2011-12-08 14 views
18

मुझे वर्तमान में जेपीए की अवधारणा को समझने में समस्या है।आवेदन बनाम कंटेनर प्रबंधित EntityManager

मैं वर्तमान में उपयोग कर रहा हूँ/हाल EclipseLink, Glassfish, डर्बी डेटाबेस विकासशील एक परियोजना प्रदर्शित करने के लिए।

इससे पहले कि मैं बहुत बड़ी तस्वीर में कुछ विकसित, मैं अलग-अलग दायरों के मामले में यह कैसे PersistingUnit काम की पूरी तरह से सुनिश्चित करने की आवश्यकता है।

मैं सर्वलेट्स 3.0 की गुच्छा और (एक ही युद्ध फ़ाइल में सब कुछ) वर्तमान में request.session वस्तु में उपयोगकर्ता की संबद्ध इकाई वर्गों की बचत की है। मैं वर्तमान में EntityManagerFactory और UserTransaction इंजेक्शन का उपयोग कर एप्लिकेशन-प्रबंधित EntityManager का उपयोग कर रहा हूं। जब यह स्वयं द्वारा परीक्षण किया जाता है तो यह चिकनी काम करता है। इकाइयों के विभिन्न संस्करण तब होते हैं जब 2 लोग एक ही समय में एक ही इकाइयों तक पहुंचते हैं। मैं प्रबंधित बीन्स के साथ काम करना चाहता हूं, वही युद्ध, एक ही दृढ़ता इकाई को पार करें यदि संभव हो।

मैं http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html पढ़ सकते हैं और उन स्कोप जो मेरे लिए बिल्कुल मतलब नहीं है के स्पष्टीकरण की गुच्छा है।

लंबी कहानी लघु, ऐप और कंटेनर एंटिटीमेनर्स प्रबंधित और अंतर का क्या उपयोग है?

उत्तर

17

जब आप एप्लिकेशन प्रबंधित लेनदेन कहते हैं तो इसका मतलब है कि यह आपका कोड लेनदेन को संभालने वाला है। संक्षेप में इसका मतलब है:

आप फोन:

entityManager.getTransaction().begin(); //to start a transaction 

तो सफलता अगर आप

entityManager.getTranasaction().commit(); //to commit changes to database 

या विफलता के मामले में आप कर देगा कॉल करने के लिए यह सुनिश्चित करना होगा कॉल करने के लिए सुनिश्चित करें:

entityManager.getTransaction().rollBack(); 

अब कल्पना आप एक कंटेनर है, जो जानता है जब begin(),कॉल करने के लिएया rollback(), कंटेनर प्रबंधित लेनदेन। कोई आपकी तरफ से लेनदेन का ख्याल रखता है।

आपको बस इसे निर्दिष्ट करने की आवश्यकता है।

+0

"अब कल्पना करें कि आपके पास एक कंटेनर है, जो जानता है कि कॉलिंग, प्रतिबद्ध या रोलबैक कहां कॉल करना है, कंटेनर प्रबंधित लेनदेन। कोई आपकी तरफ से लेनदेन का ख्याल रखता है।" –

+0

कंटेनर स्प्रिंग की तरह है, जहां आप अपनी बीन को कॉन्फ़िगर करते हैं, आप निर्दिष्ट करते हैं कि आप अपनी टैनएक्शन इकाई क्या हैं जैसे कि आप एक इकाई बीन को कॉन्फ़िगर करते हैं, आप निर्दिष्ट करते हैं कि आपकी बीन @ ट्रांसेक्शनल के रूप में है और आपके लेनदेन को स्प्रिंग – mprabhat

+3

पर ध्यान दिया जाता है। मुझे यह प्रश्न मिल गया है जो दर्शाता है मैं खोज रहा था - "ऐप और कंटेनर प्रबंधित एंटिटीमेनर्स का उपयोग और अंतर", केवल यह पता लगाने के लिए कि कुछ अलग-अलग कंटेनर बनाम एप्लिकेशन _transactions_ के बारे में स्वीकार किए गए उत्तर वार्ता। उस पर, उत्तर "जब आप एप्लिकेशन प्रबंधित लेनदेन कहते हैं" के साथ शुरू होता है, जो ओपी ने नहीं कहा था। – alterfox

11

कंटेनर प्रबंधित लेनदेन (सीएमटी) को एक तरह के घोषणात्मक लेनदेन के रूप में माना जा सकता है, इस मामले में, लेनदेन प्रबंधन कंटेनर (आमतौर पर ईजेबी कंटेनर) को सौंप दिया जाता है, और अधिक विकास कार्य को सरल बनाया जा सकता है।

यदि हम एक ईजेबी कंटेनर के साथ जावा ईई पर्यावरण में हैं, तो हम सीधे सीएमटी का उपयोग कर सकते हैं।

यदि हम जावा एसई पर्यावरण में हैं, या ईजेबी कंटेनर के बिना जावा ईई पर्यावरण में हैं, तो हम अभी भी सीएमटी का लाभ उठा सकते हैं, एक तरीका वसंत का उपयोग करना है, जो घोषणात्मक लेनदेन प्रबंधन को लागू करने के लिए एओपी का उपयोग करता है; एक और तरीका गुइस का उपयोग करना है, जो घोषणात्मक लेनदेन को लागू करने के लिए एक पर्सिस्टफिल्टर का उपयोग करता है।

सीएमटी में, एक कंटेनर (जो भी एक ईजेबी कंटेनर, वसंत या गुइस) लेनदेन प्रचार और प्रतिबद्ध/रोलबैक सामान का ख्याल रखेगा;

आवेदन कामयाब लेन-देन (एएमटी) है कि हम अपने कोड में प्रोग्राम के रूप में लेनदेन को संभालने की ज़रूरत में CMT से अलग है।

+4

अच्छा जवाब, लेकिन यह न भूलें कि प्रत्येक आधिकारिक जावा ईई पर्यावरण में हमेशा एक ईजेबी कंटेनर होता है। अन्यथा इसे जावा ईई नहीं कहा जा सकता है (इस प्रकार टोमकैट आधिकारिक जावा ईई पर्यावरण नहीं है)। इसके अलावा, जावा ईई में सीएमटी के विपरीत बीएमटी कहा जाता है; बीन प्रबंधित लेनदेन। –

+0

इस उत्तर के आपके पूरक के लिए बहुत बहुत धन्यवाद। – aqingsao

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