2014-07-21 3 views
9

क्या कोई एक चरण और दो चरण प्रतिबद्धता के बीच अंतर को स्पष्ट कर सकता है। जहां तक ​​मैं समझता हूं कि एक चरण प्रतिबद्धता अनुप्रयोग सर्वर (सेवा विधि -> EntityManager) के दौरान प्रतिबद्धता का प्रतिनिधित्व करती है और एक्सए प्रतिबद्धता डेटाबेस (सेवा विधि -> EntityManager -> डीबी) तक एक ही लेनदेन है और क्रम में उपयोग की जाती है उचित लेनदेन को पूरी तरह से रोलबैक करने के लिए। तो हम डिफ़ॉल्ट रूप से एक्सए ड्राइवरों का उपयोग क्यों नहीं करते? क्या यह सिर्फ प्रदर्शन चिंता है? अगर मैं गलत हूं तो कृपया मुझे सही करें।एक चरण और दो चरण (एक्सए) प्रतिबद्धता के बीच वास्तविक अंतर

उत्तर

21

अंतर यह है कि एक चरण की प्रतिबद्धता आमतौर पर एक सिस्टम या डेटाबेस के भीतर उपयोग की जाती है जबकि दो चरण प्रतिबद्धता वितरित लेनदेन के लिए उपयोग की जाती है जो एकाधिक डीबी या सिस्टम का विस्तार करती है। मुझे आप के लिए सरल उदाहरण दिखा प्रत्येक

एक चरण के लिए प्रतिबद्ध

BEGIN 
    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
     VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00); 
    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
     VALUES (2, 'Khilan', 25, 'Delhi', 1500.00); 
COMMIT; 

इस क्लासिक परमाणु PL/SQL में लिखा लेन-देन (जावा EE दुनिया के लिए, EJB विधि है जो भी व्यवहार हो सकता है की कल्पना) है , केवल एक चरण है जहां सभी कार्यों का प्रदर्शन किया जाता है और या तो प्रतिबद्धता या रोलबैक बनाया जाता है।

दो चरण के लिए प्रतिबद्ध

//pseodocode 
BEGIN 
    UPDATE db1; //updates DB on another machine 
    UPDATE someCloudStorage; //update something on the cloud 
    INSERT INTO SomeTable VALUES(...); 
COMMIT; 

अब आप विभिन्न मशीनों पर विभिन्न प्रणालियों के साथ काम कर रहे हैं, लेकिन आप उन सभी को सफलतापूर्वक लिख सकते हैं या विफल (यही कारण है कि यह लेन-देन वितरित है) चाहते हैं। तो यहां Two-phase commit protocol आता है। मूल रूप से लेनदेन प्रबंधक "प्रतिबद्धता के लिए तैयार" संदेश प्रसारित करता है और फिर प्रत्येक मशीन से ठीक प्रतिक्रिया की प्रतीक्षा करता है। अगर हर कोई कहता है कि यह "ठीक है", सबकुछ प्रतिबद्ध हो जाता है - यदि नहीं, तो सभी लेनदेन वापस लुढ़क जाते हैं।

ध्यान दें कि यदि आप जावा में एक्सए लेनदेन का उपयोग करना चाहते हैं, तो आपको एक्सए समर्थन (और सही ढंग से कॉन्फ़िगर किया गया एक्सए डेटासोर्स) के साथ एक जेडीबीसी ड्राइवर की आवश्यकता होगी।

+1

बहुत अच्छी व्याख्या। लगता है कि यह अब स्पष्ट है! धन्यवाद! – sidlejinks

+0

आपका स्वागत है, मुझे खुशी है कि इससे मदद मिली :-) –

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