दो जेपीए-विशिष्ट कारणों दिमाग में आते हैं:
EntityManager जेपीए कल्पना द्वारा threadsafe किए जाने की गारंटी नहीं है। इसलिए, पोर्टेबल जेपीए ऐप्स एक समय में केवल एक थ्रेड में ईएम का उपयोग कर सकते हैं। एक विधि-स्थानीय ईएम बनाने और इसे दायरे से बाहर होने से पहले इसे बंद करने का मुहावरा ईएम संदर्भों के ढेर को सीमित करने के लिए प्रोत्साहित करता है।
"विस्तारित" दृढ़ता संदर्भ लाइफटाइम का उपयोग कर एक ईएम अपने पूरे अस्तित्व के लिए एक दृढ़ता संदर्भ बनाए रखता है। इसका मतलब है कि संस्थाएं commit()
पर स्वचालित रूप से अलग हो जाती हैं। इसके बजाय उन्हें मैन्युअल रूप से अलग किया जाना चाहिए, अन्यथा ईएम उन्हें ट्रैक करने के लिए ज़िम्मेदार है।
यह सवाल वास्तव में पुरानी "ऑब्जेक्ट्स पूल करने के लिए" प्रश्न का एक जेपीए-विशिष्ट संस्करण है। यह एक कठिन है, लेकिन जवाब शायद "शायद ही कभी" है।
जावा समवर्ती विशेषज्ञ ब्रायन गोएट्ज द्वारा यह old developerWorks post बिंदु का विस्तार करता है। ग्रिस्ट: पूल कनेक्शन की तरह महंगा वस्तुओं के लिए पूल बहुत अच्छी समझ में आता है। लेकिन अल्पकालिक, छोटी, और त्वरित प्रारंभिक वस्तुओं जैसे EntityManager, पूलिंग या दीर्घकालिक संदर्भ प्रतिधारण के किसी अन्य रूप के लिए एक कठिन बिक्री है।
लेकिन, यह एक सामान्य सवाल है, इसलिए अपवाद होने के बाध्य हैं। शायद आवेदन सरल या सिंगलथ्रेड है। तब थ्रेडस्फीटी के बारे में ये चिंताओं मूक हो जाते हैं।
स्रोत
2010-08-03 05:42:50