2010-06-30 7 views
6

क्या जेएसएफ 2 अनुप्रयोगों के भीतर दृश्य सत्र में ओपन सत्र के बारे में बात करना समझ में आता है? मेरे ऐप में जेएसएफ 2 प्रबंधित बीन्स बिजनेस सर्विस ईजेबी को बुलाते हैं जो सभी डीबी से संबंधित सामान करते हैं (एक डीएओ परत है लेकिन इससे कोई फर्क नहीं पड़ता)।जेएसएफ 2: ईजेबी के साथ दृश्य में ओपन सत्र?

ओएसआईवी पैटर्न होने का मतलब यह होगा कि प्रबंधित बीन को किसी भी तरह से यह सुनिश्चित करना होगा कि अंतर्निहित सत्र खोला गया हो।

मैं जेपीए का भी उपयोग कर रहा हूं।

उत्तर

2

सैद्धांतिक रूप से, यह मुद्दा बिल्कुल वही है: जब तक वे ईटीबी छोड़ते हैं तो इकाई अलग हो जाती है जब तक कि कुछ एंटीटी मैनेजर का दायरा खुला न हो। (यहां सामान्य रूप से विषय के बारे में एक महान पोस्ट है: JPA implementation patterns: Lazy loading)।

एक blog post से मैंने पढ़ा:

8) नहीं खुला इकाई प्रबंधक देखें समर्थन में। [...] EJB3 में, जब अपने इकाई लेनदेन के साथ सेम छोड़ देता है scoped EntityManager, यह हठ संदर्भ से अलग है और तुम अब ( आलसी लोड हो रहा है पर भरोसा कर सकते वास्तव में, जेपीए विनिर्देश नहीं है ऐसी स्थिति में व्यवहार निर्दिष्ट, शायद कुछ विक्रेता पर निर्भरशील अपवाद ... फेंक दिया जाएगा) बेशक, आप साथ EntityManager उपयोग कर सकते हैं बढ़ाया हठ संदर्भ, यो जब तक लेन-देन और दृढ़ता संदर्भ पकड़े आप चाहते हैं। लेकिन यह सुविधा केवल एसएफएसबी के लिए उपलब्ध है, जबकि डीएओ कक्षाएं स्टेटलेस सेवाओं के विशिष्ट उदाहरण हैं, क्योंकि वे केवल दृढ़ता परत पर प्रेषण कॉल भेजती हैं। इसके अतिरिक्त, प्रत्येक ग्राहक के लिए डीएओ बीन उदाहरण समर्पित होने पर एक बड़ा ओवरकिल लगता है।

मुझे यकीन नहीं है कि यह वास्तव में सच है। मेरी समझ से आपको एक सर्वलेट फ़िल्टर लिखने में सक्षम होना चाहिए जो लेनदेन शुरू करने और प्रतिबद्ध करने के लिए UserTransaction का उपयोग करता है (जैसे ओएसआईवी में नियमित फ़िल्टर)। ईजेबी तब फ़िल्टर में शुरू होने वाले लेनदेन में भाग लेगा और EntityManager खुला रहेगा। हालांकि मैंने इसका परीक्षण नहीं किया है, लेकिन मेरा सुझाव यह कोशिश करना होगा।

+0

काउचो में एक फ़िल्टर है जैसा आपने वर्णन किया है: http://wiki.caucho.com/TransactionFilter – cdmckay

संबंधित मुद्दे