2010-07-10 5 views
49

"jta-datasource" और "संसाधन-स्थानीय डेटासोर्स" शब्द मेरे लिए थोड़ा अस्पष्ट हैं। मैं जो कुछ समझ रहा हूं उसे छोड़ रहा हूं (या मान रहा हूं) और मैं आपको यह कहना चाहता हूं कि मैं कहां सही/गलत हूं। यदि JTA-डेटा स्रोत के रूप में उल्लेख"jta-datasource" और "संसाधन-स्थानीय" डेटास्रोत के बीच अंतर?

  • एक ही डाटाबेस एक JTA-डेटा स्रोत के रूप में या एक संसाधन के स्थानीय डेटा स्रोत के रूप में
  • के लिए भेजा जा सकता है, तो सेम/अन्य वर्गों JTA उपयोग कर सकते हैं। इसलिए, UserTransaction इंटरफ़ेस
  • CMT/BMT उपयोग नहीं कर सकते, तो डेटा स्रोत संसाधन स्थानीय
  • तो संसाधन स्थानीय डेटा स्रोत के रूप में उल्लेख है, लेन-देन JTA जानकारी नहीं है। कोड EntityTransaction इंटरफ़ेस का उपयोग कर सकता है लेकिन उपयोगकर्ता ट्रांज़ेक्शन इंटरफ़ेस

धन्यवाद!

उत्तर

62

"jta-datasource" और "resouce-local datasource" शब्द मेरे लिए थोड़ा अस्पष्ट हैं।

मुझे लगता है कि आप वास्तव में jta-datasource और non-jta-datasource तत्वों का संदर्भ लें। संक्षेप में:

  • यदि दृढ़ता इकाई के लेन-देन प्रकार, JTA है jta-datasource तत्व JTA डेटा स्रोत कनेक्शन प्राप्त करने के लिए इस्तेमाल किया जाएगा की JNDI नाम घोषित करने के लिए प्रयोग किया जाता है। यह आम मामला है।
  • यदि दृढ़ता इकाई का लेनदेन प्रकार संसाधन-स्थानीय है, non-jta-data-source का उपयोग गैर-जेटीए डेटा स्रोत के जेएनडीआई नाम की घोषणा के लिए किया जाना चाहिए।
  • एक ही डाटाबेस एक JTA-डेटा स्रोत के रूप में या एक संसाधन के स्थानीय डेटा स्रोत

यह सही है के रूप में भेजा जा सकता है। और मैंने अभी उल्लेख नहीं किया है लेकिन कुछ प्रदाता भी jta-datasourceऔरnon-jta-datasource दोनों को घोषित करने की अनुमति देते हैं और बाद में गैर-जेटीए कनेक्शन के माध्यम से अनुकूलित पढ़ने के लिए उपयोग करते हैं (यानी यह चालू जेटीए लेनदेन से जुड़ा नहीं होगा) ।

  • तो JTA-डेटा स्रोत के रूप में उल्लेख किया है, तो सेम/अन्य वर्गों JTA उपयोग कर सकते हैं। इसलिए, उपयोगकर्ता ट्रांज़ेक्शन इंटरफ़ेस।

पहला भाग सही है, अंतिम भाग पूरी तरह से नहीं है। EJB 3.0 कल्पना से, खंड 13.3.4 उद्यम बीन्स कंटेनर प्रबंधित लेन-देन सीमांकन का उपयोग करना:

उद्यम में फली की व्यापार के तरीकों [...] प्राप्त करने के लिए प्रयास या javax.transaction.UserTransaction इंटरफ़ेस का उपयोग नहीं करना चाहिए।

और अनुभाग 16.12 UserTransaction इंटरफ़ेस:

कंटेनर UserTransaction इंटरफ़ेस उद्यम सेम है कि इस इंटरफेस का उपयोग करने की अनुमति नहीं है के लिए उपलब्ध नहीं करना चाहिए।

दूसरे शब्दों में, UserTransaction इंटरफ़ेस सीएमटी एंटरप्राइज़ बीन्स के लिए उपलब्ध नहीं है।

  • CMT/BMT उपयोग नहीं कर सकते, तो डेटा स्रोत संसाधन स्थानीय

शब्दों है थोड़ा यहाँ भ्रमित है, लेकिन मुझे लगता है कि सख्ती से सही यह नहीं कहना चाहते हैं। जेपीए 1.0 विनिर्देश से, खंड § 5.5 लेनदेन नियंत्रण:

एक आवेदन से प्रबंधित इकाई प्रबंधक या तो एक JTA इकाई प्रबंधक या एक संसाधन-स्थानीय इकाई प्रबंधक हो सकता है।

...

दोनों JTA इकाई प्रबंधकों और संसाधन स्थानीय इकाई प्रबंधकों जावा ईई वेब कंटेनर और EJB कंटेनर में समर्थित होना आवश्यक हैं। एक ईजेबी पर्यावरण के भीतर, एक जेटीए इकाई प्रबंधक आमतौर पर उपयोग किया जाता है।

और खंड 6.2.1.2 लेन-देन प्रकार

transaction-type विशेषता है कि क्या इकाई हठ इकाई के लिए इकाई प्रबंधक कारखाने द्वारा प्रदान प्रबंधकों JTA इकाई प्रबंधकों या संसाधन होना चाहिए निर्दिष्ट करने के लिए प्रयोग किया जाता है -लोकल इकाई प्रबंधकों। इस तत्व का मान JTA या RESOURCE_LOCAL है। एक लेनदेन प्रकार का जेटीए मानता है कि एक जेटीए डेटा स्रोत प्रदान किया जाएगा - या तो jta-data-source तत्व द्वारा निर्दिष्ट या कंटेनर द्वारा प्रदान किया गया है। सामान्य रूप से, जावा ईई वातावरण में, RESOURCE_LOCAL का मानना ​​है कि एक गैर-जेटीए डेटासोर्स प्रदान किया जाएगा। जावा ईई पर्यावरण में, यदि यह तत्व निर्दिष्ट नहीं है, तो डिफ़ॉल्ट जेटीए है।

तो तुम जो एक संसाधन स्थानीय इकाई प्रबंधक हो सकता है एक आवेदन कामयाब इकाई प्रबंधक का उपयोग कर सकते हैं (यदि आप एक EntityManagerFactory इंजेक्षन कि मामले में यह से ईएम पाने के लिए करना होगा) और यह नहीं होगा जेटीए लेनदेन का हिस्सा। this (very interesting) discussion देखें।

  • तो संसाधन स्थानीय डेटा स्रोत के रूप में उल्लेख किया है, लेन-देन के बारे में पता नहीं JTA हैं। कोड फिर EntityTransaction इंटरफेस नहीं बल्कि UserTransaction इंटरफ़ेस

उपयोग कर सकते हैं, शब्दों थोड़ा भ्रामक है, लेकिन मैं कहना चाहता हूँ कि यह सही है।

+0

हाय, समय लेने और इसे स्पष्ट रूप से समझाए जाने के लिए बहुत बहुत धन्यवाद !!! अब मैं देखता हूं कि हम "संसाधन स्थानीय इकाई प्रबंधक" शब्द का उपयोग करते हैं और "संसाधन स्थानीय डेटासोर्स" नहीं। हां मेरा मतलब गैर-जेटीए-डेटास्रोत था जब मैंने "संसाधन स्थानीय डेटासोर्स" कहा था। इस तरह मैं अब समझता हूं: जेटीए/RESOURCE_LOCAL -> EntityManager का लेनदेन प्रकार। निर्धारित करता है कि अंतर्निहित लेनदेन को नियंत्रित कौन करता है। चाहे जेटीए/एंटिटी ट्रान्सएक्शन एपीआई जेटीए एंटीटीमेनर: कंटेनर इस EntityManager का प्रबंधन करता है। जेटीए लेनदेन में शामिल है। एक जेटीए लेनदेन या तो सीएमटी या बीएमटी हो सकता है। प्रबंधित कक्षाओं में इस्तेमाल किया जा सकता है। – stratwine

+0

संसाधन-स्थानीय इकाई प्रबंधक: EnityManager कंटेनर द्वारा प्रबंधित नहीं किया जाता है। गैर-जेटीए लेनदेन में शामिल है। EntityTransaction API का उपयोग किया जाता है। POJOs BMT के लिए में उपयोग कर सकते हैं, UserTransaction हमेशा एक JTA-डेटास्रोत का उपयोग करता है और एक गैर JTA-डेटा स्रोत इसी तरह CMT के लिए भी उपयोग नहीं कर सकते, कंटेनर केवल एक JTA-डेटा स्रोत – stratwine

+1

@stratwine इस्तेमाल कर सकते हैं: आपका स्वागत है , खुशी है कि आपको यह सहायक पाया (और आपकी समझ सही दिखती है)। शब्द के बारे में, मुझे पिक्य होने का मतलब नहीं था, लेकिन चूंकि एक बहुत सटीक (और सूक्ष्म) शब्दावली परिभाषित करता है, इसका उपयोग संचार को आसान बनाता है, इसलिए मैंने इसके बारे में कुछ जोर दिया (और मैं पढ़ने की सिफारिश करता हूं जिन अनुभागों में मैंने आंशिक रूप से उद्धृत किया है)। –