मैंने अतीत में कुछ जेपीए सामान बनाए हैं जो डीएओ के प्रति उदाहरण javax.persistence.EntityManager
का उदाहरण इस्तेमाल करते हैं; इस तरह से अधिकांश उदाहरण सेटअप हैं।जेपीए EntityManager स्टेटिक या इंस्टेंस?
public class BaseDaoThatEveryDaoExtends {
@PersistenceContext
private EntityManager entityManager;
}
मैं सिर्फ कोड पर ठोकर खाई है कि का उपयोग करता है एक स्थिरjavax.peristence.EntityManger
एक PersistenceContext
एनोटेशन द्वारा इंजेक्शन, वास्तुकार मुझसे कहता है यह कोई समस्या नहीं होती है और वे भी JTA और एक साथ एक संकुल आवेदन में किसी भी समस्या थी कभी नहीं XA डेटा स्रोत:
public class BaseDaoThatEveryDaoExtends {
@PersistenceContext
private static EntityManager entityManager;
}
जहाँ तक मुझे इस बता सकते हैं के रूप में एक विरोधी पैटर्न के रूप में EntityManager
कुछ राज्य सूचना रखती है और यह स्थिर बना देता है कि पूरे राज्य आवेदन चौड़ा है। इसके अलावा कक्षाओं को परीक्षण करने में बहुत मुश्किल होती है।
क्या ऐसा करने में कोई कमी है या क्या यह EntityManager
का उपयोग करने का एक मानक तरीका है?
एक एनपीई भी अच्छी तरह से संभव है जब कोई मैन्युअल रूप से इंजेक्शन प्राप्त करने के बजाय डीएओ का उदाहरण बनाता है और उस पर इंस्टेंस विधियों का आह्वान करता है। तो यह वास्तव में एक तर्क नहीं है। – BalusC
सिवाय इसके कि आपको BaseDaoThatEveryDaoExtends का निर्माण करने की आवश्यकता नहीं है, आप बस BaseDaoThatEveryDaoExtends.doSomeStaticwork() को कॉल करते हैं जिसके परिणामस्वरूप एनपीई हो सकता है। –