मुझे लगता है कि उत्तर है: यह निर्भर करता है ।
आपका इकाई प्रबंधक उस संदर्भ तक पहुंच प्राप्त करने की कुंजी है जहां संस्थाएं निवास करती हैं। यदि आपका आवेदन एक JSE आवेदन है, तो आपको विचार करना होगा कि आपके संदर्भ की जीवन प्रत्याशा क्या है।
आइए विचार करें कि आप उपयोगकर्ता के अनुरोध के अनुसार एक इकाई प्रबंधक बनाएंगे। इसलिए, जब आप किसी दिए गए अनुरोध में भाग ले रहे होते हैं, तो आप अपने इकाई प्रबंधक को खुला रखेंगे, और जब आप इसे पूरा कर लेंगे, तो आप इसे बंद कर देंगे।
एक JSE आवेदन में, आपने माना होगा कि आप अपने इकाई प्रबंधक को आवेदन के पूरे जीवन को खुला रखना चाहते हैं (यह मानकर कि आप बड़ी मात्रा में डेटा से काम नहीं कर रहे हैं) तब आप इसे बंद कर देते हैं जब आपका आवेदन बंद हो जाता है।
निचला रेखा, जब आप इसे खोलते हैं और जब आप बंद करते हैं तो यह पूरी तरह से आपकी रणनीति और आपके डिजाइन पर निर्भर करता है। आप इसे तब बंद करते हैं जब आपको इसके संदर्भ में संस्थाओं की आवश्यकता नहीं होती है।
आपके उदाहरण में, यह स्पष्ट नहीं है, लेकिन चूंकि आप विधि में ईएम बना रहे हैं, इसलिए आपको इसे वापस करने से पहले बंद कर देना चाहिए, अन्यथा, अब आपको इसे फिर से एक्सेस नहीं करना होगा (जब तक कि आप इसे कुछ रजिस्ट्री में नहीं रख रहे हों, जो कोड में स्पष्ट नहीं है)।
यदि आप इसे बंद नहीं करते हैं तो आपके द्वारा इनका उपयोग किए जाने के बाद भी आपकी इकाइयां संलग्न रखी जाएंगी। आपके संदर्भ को तब भी जीवित रखा जाएगा जब आप अपने ईएम तक नहीं पहुंच सकते।
जेपीए विशिष्टता अधिक विवरण होता है। धारा 7.7 आवेदन-प्रबंधित दृढ़ता संदर्भों में यह कहता है:
जब अनुप्रयोग-प्रबंधित निकाय प्रबंधक का उपयोग किया जाता है, तो अनुप्रयोग सीधे इकाई प्रदाता जीवनचक्र का प्रबंधन करने और दृढ़ता संदर्भों को प्राप्त करने और नष्ट करने के लिए दृढ़ता प्रदाता की इकाई प्रबंधक कारखाने के साथ सीधे संपर्क करता है।
ऐसे सभी एप्लिकेशन-प्रबंधित दृढ़ता संदर्भों को दायरे में विस्तारित किया जाता है, और कई लेन-देन कर सकते हैं।
EntityManagerFactory.createEntityManager
विधि और
EntityManager
close
और isOpen
तरीकों के लिए एक आवेदन से प्रबंधित इकाई प्रबंधक के जीवन चक्र और इससे संबंधित हठ संदर्भ प्रबंधन करने के लिए उपयोग किया जाता है।
विस्तारित दृढ़ता का संदर्भ उस बिंदु से मौजूद है, जिस पर इकाई प्रबंधक के उपयोग EntityManagerFactory.createEntityManager
से इकाई प्रबंधक के बंद होने तक उपयोग
किया जाता है EntityManager.close
।
अनुप्रयोग-प्रबंधित निकाय प्रबंधक से प्राप्त एक विस्तारित दृढ़ता संदर्भ एक स्टैंड-अलोन दृढ़ता संदर्भ है जिसे लेनदेन के साथ प्रचारित नहीं किया जाता है।
[...] EntityManager.close
विधि अपनी दृढ़ता और अन्य संसाधनों को जारी करने के लिए एक इकाई प्रबंधक को बंद कर देती है। पास बुलाने के बाद, एप्लिकेशन को EntityManager
उदाहरण के अलावा किसी भी आगे के तरीके को लागू नहीं करना चाहिए
getTransaction
और isOpen
, या IllegalStateException
फेंक दिया जाएगा। यदि लेन-देन सक्रिय होने पर करीबी तरीका लागू किया जाता है, तो लेनदेन पूरा होने तक दृढ़ता का संदर्भ प्रबंधित रहता है।
EntityManager.isOpen
विधि इंगित करता है कि इकाई प्रबंधक खुला है। isOpen
जब तक इकाई प्रबंधक बंद नहीं किया जाता है, तब तक यह विधि सही साबित होती है। वास्तव में यह समझने के लिए कि यह कैसे काम करता है यह इकाई प्रबंधक और संदर्भ के बीच के रिश्ते को समझना महत्वपूर्ण है।
इसलिए, जैसा कि आप देख सकते हैं कि इकाई प्रबंधक वह सार्वजनिक इंटरफ़ेस है जिसके माध्यम से आप अपनी संस्थाओं तक पहुँच प्राप्त करते हैं, हालाँकि, आपकी संस्थाएँ आपके इकाई प्रबंधक से जुड़ी हुई हैं। विभिन्न प्रकार के संदर्भों के जीवन चक्र को समझना आपके प्रश्न का उत्तर देगा।
दृढ़ता संदर्भ विभिन्न प्रकार के हो सकते हैं। जावा ईई अनुप्रयोगों में, आप या तो लेन-देन-स्कॉप्ड दृढ़ता संदर्भ या विस्तारित-दृढ़ता संदर्भ रख सकते हैं । जेएसई एप्लिकेशन में, संदर्भ की प्रकृति डेवलपर द्वारा नियंत्रित की जाती है ।
जब आप अपने इकाई प्रबंधक से इकाई के लिए पूछते हैं, तो यह इकाई को उसके संलग्न संदर्भ में देखता है, यदि वह इकाई को वहां पाता है, तो वह इसे वापस कर देता है, अन्यथा, यह डेटाबेस से इकाई को पुनः प्राप्त करता है। इस इकाई के संदर्भ में आने वाली कॉल उसी इकाई को लौटाएगी।
लेन-देन-दायरे वाले
लेनदेन-स्कोप्ड दृढ़ता संदर्भ का उपयोग करके जावा ईई एप्लिकेशन में, जब आप पहली बार अपने इकाई प्रबंधक तक पहुंचते हैं, तो यह जांचता है कि क्या वर्तमान जेटीए लेनदेन में कोई संदर्भ जुड़ा हुआ है यदि कोई संदर्भ अभी तक मौजूद नहीं है, तो एक नया संदर्भ बनाया जाता है और इकाई प्रबंधक जुड़ा हुआ है। इस संदर्भ में। फिर इकाई को डेटाबेस से पढ़ा जाता है (यदि वर्तमान में कैश से ओ) और इसे संदर्भ में रखा गया है। जब आपका लेन-देन समाप्त हो जाता है (कमिट या रोलबैक), तो संदर्भ अमान्य हो जाता है और इसमें जो भी इकाइयां हैं, वे अलग हो जाती हैं। यह स्टेटलेस सत्र बीन्स के लिए शास्त्रीय परिदृश्य है।
@PersistenceContext(unitName="EmplService")
EntityManager em;
इसका मतलब यह भी है कि आप अपने लेनदेन को कैसे डिज़ाइन करते हैं, इसके आधार पर, आप एक से अधिक संदर्भों के साथ समाप्त हो सकते हैं।
विस्तारित-दृढ़ता का संदर्भ
स्टेटफुल सेशन बीन्स के साथ जावा ईई एप्लीकेशन में आप कई बीन इनवोकेशन से बचे रहने के संदर्भ को पसंद कर सकते हैं, क्योंकि जब तक बीन को हटाने के लिए चिह्नित नहीं किया गया है, तब तक आप इसे पसंद नहीं करते हैं? उन मामलों में, आपको एक विस्तारित दृढ़ता संदर्भ का उपयोग करने की आवश्यकता है। इस मामले में, दृढ़ता का संदर्भ तब बनता है जब यह पहली बार आवश्यक होता है, लेकिन यह तब तक अमान्य नहीं होगा जब तक कि आपके निशान हटाने के लिए स्टेटफुल बीन नहीं होगा।
@PersistenceContext(unitName="EmplService", type=PersistenceContextType.EXTENDED)
इसका मतलब यह है कि, राज्य प्रबंधक सेम के तरीकों की बाद की कॉल में इकाई प्रबंधक के उदाहरण की परवाह किए बिना, आप सुनिश्चित कर सकते हैं कि आप हमेशा उसी संदर्भ का उपयोग करेंगे, और इसलिए, बाद में भी कॉल उसी को वापस कर देंगे। उदाहरण, क्योंकि यह एक ही संदर्भ है।
इसके अलावा, आपके परिवर्तन तब तक फ्लश नहीं किए जाएंगे जब तक कि बीन को हटाने के लिए चिह्नित नहीं किया जाता है या आप मैन्युअल रूप से उन्हें फ्लश करते हैं।
आवेदन से प्रबंधित
आप हमेशा अपने इकाई प्रबंधक कारखाने और अपने इकाई प्रबंधक को मैन्युअल रूप से त्वरित कर सकते हैं। यह वही है जो आप आमतौर पर एक जेएसई एप्लिकेशन में करते हैं, क्या यह सही है?
इस तरह के अनुप्रयोगों के लिए आपके पास आमतौर पर जेटीए लेनदेन से निपटने के लिए एक कंटेनर नहीं है, है ना? इसलिए आप संसाधन-स्थानीय लेन-देन का उपयोग करते हैं और आप मैन्युअल रूप से कम या वापस परिवर्तन करने के लिए जिम्मेदार हैं।
इस तरह के आवेदन के लिए, जब आप अपने इकाई प्रबंधक को तत्काल भेजते हैं, तो एक संदर्भ स्वतः ही इससे जुड़ जाता है।
आपके आवेदन के आधार पर, आप एक वैश्विक संस्था प्रबंधक बनाने का निर्णय ले सकते हैं जिसका जीवन चक्र आवेदन के जीवन से जुड़ा हुआ है। यह आवेदन के पूरे जीवन के लिए एक एकल इकाई प्रबंधक है। इस स्थिति में, आपका संदर्भ आपके इकाई प्रबंधक के साथ बनाया और नष्ट हो जाएगा।
या, आप अपने एप्लिकेशन उपयोगकर्ता के साथ प्रति वार्तालाप (यानी लेनदेन) एक इकाई प्रबंधक बना सकते हैं। इस मामले में, गुंजाइश आपके द्वारा निर्धारित की जाती है, लेकिन फिर भी, आपका संदर्भ आपके इकाई प्रबंधक के साथ बनाया और नष्ट हो जाएगा।