2012-06-29 7 views
18

मैं जेटीए को समझने की कोशिश कर रहा हूं और बिट्रोनिक्स का उपयोग पसंद के लेनदेन प्रबंधक (केवल सीखने और समझने के लिए) के रूप में कर रहा हूं। मैं बिट्रोनिक्स reference guide here के अंदर कोड देख रहा हूं और खुद को सोच रहा हूं: यदि मैं जेडीबीसी का उपयोग कर रहा हूं, जो स्वयं लेनदेन है (Connection वापस/घुमाया जा सकता है), मैं कभी ऐसा कोड क्यों लिखना चाहूंगा? !?!जावा ईई: सीधे जेटीए का उपयोग क्यों करें?

अब शायद उस कोड स्निपेट का बिंदु केवल मौजूदा लेनदेन डेटास्टोर पर बिट्रोनिक्स/जेटीए का उपयोग करने का तरीका प्रदर्शित करना था, लेकिन मुझे अभी भी यह नहीं मिलता कि यह कौन सा अंतर्निहित लाभ प्रदान करता है।

फिर, इस कोड स्निपेट मुझे सोच मिला: "केवल दो मुख्य datasources आप का उपयोग डेटाबेस और संदेश दलालों कर रहे हैं, और आप क्रमश: उन लोगों के साथ संवाद करने के लिए JDBC/JMS का उपयोग, और इन दो मानकों (JDBC/JMS) पहले से ही लेनदेन कर रहे हैं, तो आपको कभी भी जेटीए का उपयोग करने की आवश्यकता क्यों होगी?!? "

क्या जेटीए कुछ प्रकार का" आंतरिक "जावा ईई एपीआई है जो जेडीबीसी, जेपीए, जेएमएस, आदि का उपयोग करता है; और वहां केवल 1% ers के लिए सार्वजनिक रूप से उजागर किया गया है जो इसके साथ कुछ पागल करना चाहते हैं? या क्या मैं पूरी तरह से जेटीए के विचार/प्रयोज्यता को याद कर रहा हूं?

मुझे लगता है कि मैं जेटीए को सीधे मारने के लिए दो गैर-जेडीबीसी और गैर-जेएमएस उपयोग के मामलों की कल्पना कर सकता हूं, लेकिन चूंकि मैं पहली जगह जेटीए पर इतना अस्पष्ट हूं, मुझे नहीं पता कि ये मामले ऑफ-ट्रैक हैं या नहीं :

  • शायद आपके पास अपने ऐप में एक जटिल I/O सिस्टम है और डिस्क पर एक ही फ़ाइल से पढ़ने/लिखने के लिए कई धागे पढ़ रहे हैं। शायद आप प्रत्येक थ्रेड को इस फाइल को लिखने के लिए एक लेनदेन का उपयोग करना होगा। (हाँ?!? नहीं?!?)
  • शायद आपके पास एक राज्य की स्थिति का प्रतिनिधित्व करने वाली एक राज्य मशीन POJO है, और कई धागे मशीन को संशोधित कर सकते हैं। शायद आप प्रत्येक धागे मशीन के राज्य को बदलने के लिए एक लेनदेन का उपयोग करेंगे।

मैं अपने प्रश्न की जड़ में लगता है (हां नहीं?!??!?):

  • मेरी जेपीए (हाइबरनेट) और/या JDBC कॉल पहले से ही व्यवहार कर रहे हैं, यही कारण है कि मैं करूंगा जेटीए के अंदर उन्हें लपेटना चाहते हैं-> प्रतिबद्ध/रोलबैक ब्लॉक? जेएमएस और मैसेजिंग सिस्टम के लिए डिट्टो।
  • जेपीए/जेडीबीसी/जेएमएस के बाहर, संचालन की श्रृंखला को पार करने के लिए जेटीए का उपयोग करने के लिए मामलों का क्या उपयोग मौजूद है?

अग्रिम धन्यवाद!

उत्तर

23

यह सिर्फ खुले लेनदेन को वापस रोल करने से कहीं अधिक है, जेटीए XAResource इंटरफ़ेस प्रदान करता है जो प्रदाता लागू कर सकते हैं, आपका जेडीबीसी ड्राइवर और जेएमएस प्रदाता पहले से ही ऐसा करेगा और आप अपना स्वयं का कार्यान्वयन कर सकते हैं। यह एक खुले मानक पर आधारित है और शायद इसके बारे में पढ़ने लायक है।

अब हम यह क्यों चाहते हैं?

एक आपदा में मैथ्यू उदाहरण पर विचार करें:

Begin DB Transaction 

Set AccountBalance $100 lower for Account #345 in database 

Add JMS Message "Transfer $100 to OtherBank Account #987" to queue 

*** DB power is unplugged while committing DB Transaction *** 

दुर्भाग्य से JMS संदेश, अन्य बैंक के लिए चला गया है इस वितरित लेन-देन के साथ एक बहुत वास्तविक समस्या है।

XA के साथ यह कैसे परिदृश्य बाहर खेलेंगे है:

DB Transation starts XA Transaction 

Set AccountBalance $100 lower for Account #345 in database 

JMS Connection joins XA Transaction 

Add JMS Message "Transfer $100 to OtherBank Account #987" to queue 

Everything went okay and JTA context is ready to commit. 

DB and JMS both agree that they are capable of commiting. 

JTA instructs DB and JMS to commit. 

All members of the transaction commit. 

अब आप पूछ सकते हैं, तो बिजली प्लग डीबी के अंतिम प्रतिबद्ध दौरान बाहर निकाला है क्या होता है। खैर जेएमएस कतार का इंतजार होगा, हालांकि एक्सबी लेनदेन तब तक खुला रहेगा जब तक कि डीबी एक बार फिर उपलब्ध न हो जाए, उस बिंदु पर यह फिर से डीबी को प्रतिबद्ध करने का निर्देश देगा (डीबी ने हमें वादा किया था कि यह प्रतिबद्ध हो सकता है, यह एक्सए अनुपालन का हिस्सा है)।

जेटीए के बारे में वास्तव में बहुत अच्छा क्या है कि आप आसानी से अपने स्वयं के कस्टम XAResource को कार्यान्वित कर सकते हैं और इस महान ढांचे में बंधे हैं! अपने कस्टम राज्य

  1. है या में अंतिम कोड ब्लॉक नहीं होने के कारण फाइल:

    अद्यतन

    तो जब कस्टम लेनदेन को लागू करने के बारे में अपने प्रश्न का उत्तर आप खुद से पूछ सकते हैं निम्न के लेनदेन का दायरा?

  2. क्या आपको बाहरी सिस्टम (यानी डीबी या जेएमएस) विफलता पर अपनी कस्टम स्थिति/फ़ाइल को वापस करने की आवश्यकता है?
  3. क्या एक साधारण getRollbackOnly() & सेटरॉलबैक केवल() बाहरी सिस्टम के लिए, आपके कस्टम कोड अपर्याप्त के लिए मुआवजे हैंडलिंग (यानी कस्टम स्थिति/फ़ाइल को स्पष्ट रूप से वापस) के साथ जोड़ा गया है?

यदि 1, 2 & 3 दोनों का उत्तर हाँ है तो आप शायद एक कस्टम XAResource चाहते हैं, अन्यथा मुझे लगता है कि यह शायद अधिक है।

हालांकि यदि आपका कोड एक ढांचा या पुस्तकालय है जिसे जावा ईई स्पेस में व्यावसायिक तर्क द्वारा सूचीबद्ध किया जाएगा, तो आप इसके लिए XAResource को कार्यान्वित करना चाहेंगे!

+0

महान उत्तर @ जस्टिन (+1) के लिए धन्यवाद। उदाहरणों के बारे में क्या मैं उद्धृत कर रहा हूं (फाइल रीडिंग, स्टेट मैनिपुलेशन इत्यादि)? क्या वे उदाहरण हैं जब कोई लेनदेन करना चाहता है (क्यों या क्यों नहीं)? यदि हां, तो क्या मुझे उनके लिए अपने 'एक्सएरेस स्रोत' को लागू करने की आवश्यकता होगी? ** दोबारा, बक्षीस के लिए, मैं यह तय करते समय दिशानिर्देशों का एक सेट ढूंढ रहा हूं कि कुछ लेनदेन किया जाना चाहिए या नहीं। ** धन्यवाद! +1 के लिए – IAmYourFaja

+0

@AdamTannon धन्यवाद! मैंने अपनी कुछ गाइड लाइनों को जोड़ा, मुझे उम्मीद है कि वे सहायक होंगे। – Justin

+0

बहुत बढ़िया, भयानक उत्तर। धन्यवाद! – IAmYourFaja

3

आपके पास एक लेनदेन हो सकता है जो डेटाबेस और संदेश सेवा दोनों को शामिल करता है। मैं जेटीए के बिना ऐसा करने के किसी भी तरीके से नहीं जानता।

सरल वैचारिक उदाहरण।"करने के लिए OtherBank खाता # 987 स्थानांतरण $ 100"

क़तार में

शुरू JTA लेन-देन

सेट खाता # 345 के लिए AccountBalance $ 100 कम डेटाबेस में

जोड़े JMS संदेश: सटीक कोड महत्वपूर्ण नहीं है

प्रतिबद्ध JTA लेन-देन

OtherBank एक अलग बैंक है, और हम आपको ओ तो उससे संपर्क मान वर्म जेएमएस।

शुरुआत लेनदेन और प्रतिबद्धता जेटीए द्वारा संभाली जाती है। यदि इसे कतार में जोड़ना विफल रहता है, तो वापसी भी स्वचालित रूप से वापस आती है।

वास्तविक जीवन इतना आसान नहीं है, लेकिन यह आपको एक विचार देना चाहिए।

संपादित करें:

JTA प्रणाली के किसी भी समय भाग सही ढंग से XAResource लागू कर सकते हैं इस्तेमाल किया जा सकता। इसे कार्यान्वित करके, संसाधन वितरित लेनदेन में भाग ले सकता है। पहली नज़र में, आपके प्रस्तावित उदाहरण दोनों संभवतः XAResource लागू कर सकते हैं।

"आपके ऐप में एक जटिल I/O सिस्टम और डिस्क पर एक ही फ़ाइल से पढ़ने/लिखने के लिए कई धागे हैं।" - ऐसा लगता है जैसे यह एक डेटाबेस हो सकता है, अगर आप इसके बारे में सोचते हैं।

"शायद आपके पास एक राज्य की स्थिति का प्रतिनिधित्व करने वाली एक राज्य मशीन POJO है, और कई धागे मशीन को संशोधित कर सकते हैं।" - यह निश्चित रूप से एक उम्मीदवार हो सकता है, यदि परिवर्तन पर्याप्त रूप से अलग किया जा सकता है।

मुझे लगता है कि रूब्रिक का पहला भाग मूल रूप से संसाधन है XAResource एस हो सकता है। दूसरे शब्दों में, एसीआईडी ​​की अवधारणा सार्थक है। दूसरा यह है कि यह संभव है और उस इंटरफेस को लागू करने के प्रयास के लायक है (जहां इसे पहले से लागू नहीं किया गया है)।

+0

धन्यवाद मैट (+1) लेकिन कृपया याद रखें कि मैं जेटीए (और ज्यादातर डिग्री, सामान्य रूप से जावा ईई) के लिए बिल्कुल नया हूं। क्या आप इस बारे में एक कोड उदाहरण प्रदान कर सकते हैं जिसके बारे में आप बात कर रहे हैं (या अधिक विशिष्ट हो)? मुझे लगता है कि मैं यहां "पेड़ के माध्यम से जंगल" नहीं देख रहा हूं ... मैं डेटाबेस और संदेश ब्रोकर दोनों के लिए संचालन के एक ही सेट को क्यों लेनदेन करना चाहता हूं? – IAmYourFaja

+0

@ एडमटैनन, मैं भी जेटीए के लिए नया हूं। लेकिन मैंने एक वैचारिक उदाहरण प्रदान किया है। –

+1

अहह, इसलिए जेटीए * एकाधिक संसाधनों *, हां? में पारगमन योग्य बनाता है? यदि यह सही है तो मैं इसे "प्राप्त करता हूं" !! धन्यवाद फिर से – IAmYourFaja

0

मेरी राय में, पहला विचार TX प्रबंधक और TX सिस्टम को सजाने के लिए है।

जब मैं अपना आवेदन डिज़ाइन करता हूं, तो शब्द ट्रांज़ेक्शनल मेरे एसीआईडी ​​को करने का इरादा रखता है। मैं इस उद्देश्य को अपने व्यापार कोड में रखना चाहता हूं क्योंकि इसे किसी व्यापार की ज़रूरत से प्रेरित किया जाना चाहिए।

मैं उम्मीद कुछ जादू (वास्तविक जीवन में मेरी कंटेनर) सही ढंग से मेरी tx उद्देश्य बुनाई होगा, अंतर्निहित TX प्रणाली (डेटाबेस, jms दलाल, आदि)

इसके अलावा निर्भर करता है, JTA एकीकरण की अनुमति देने के somes इंटरफेस को परिभाषित करता है मौजूदा जेटीए प्रणाली और एक (अंततः नई, अंततः विदेशी) TX प्रणाली के बीच। उदाहरण के लिए: गीगास्पेस एक्सएपी एक इन-मेमोरी डाटाग्रिड है। यह जेएमएस नहीं है, एसक्यूएल नहीं है, लेकिन इसे it provides a JTA integration के रूप में प्लंबर करना आसान है। हम कई अन्य उत्पादों को उद्धृत कर सकते हैं ...

जाहिर है, हत्यारा उदाहरण विभिन्न प्रणालियों के बीच एक्सए लेनदेन का समर्थन है (मैं जस्टिन को एक बिंदु देता हूं)। मेरा मुद्दा यह कहना है कि यदि आप एक्सए लेनदेन का उपयोग नहीं करते हैं तो भी जेटीए का मूल्य है।

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