2010-06-20 4 views
14

शीर्षक के बीच अंतर यह सब कहता है: UserTransaction और EntityTransaction के बीच क्या अंतर है?UserTransaction और EntityTransaction

मेरे अल्पविकसित समझ के साथ कि UserTransaction जब JTA आवश्यकता है (एकाधिक चीजों पर जैसे प्रश्नों करने के लिए), और जब जेपीए केवल आवश्यक है EntityTransaction प्रयोग किया जाता है कि प्रयोग किया जाता है (उदाहरण के लिए जब क्वेरी परमाणु है)।

क्या यह दोनों के बीच एकमात्र अंतर है या उससे कहीं अधिक है?

+0

के संभावित डुप्लिकेट ([क्या @Resource UserTransaction और EntityManager.getTransaction() के बीच अंतर है] http://stackoverflow.com/questions/2517062/what-is-difference-between-resource-usertransaction-and-entitymanager-gettransac) – ewernli

+1

@ewernli: यह थोड़ा सा अनुचित है, मैं चाहता हूं ly जानते हैं कि यह सवाल एक डुप्लिकेट था अगर मुझे पहले से ही सवाल का जवाब पता था! न तो सवाल और न ही उत्तर 'EntityTransaction' का कोई उल्लेख करता है - मैंने पूछने से पहले खोज की थी। – bguiz

+7

मैं इसे पूरी तरह से समझता हूं। यही कारण है कि मैंने आपके प्रश्न का उत्तर देने का समय लिया जो मैं कर सकता था। संभावित डुप्लिकेट को इंगित करने के लिए एसओ पर यह एक आम प्रथा है ताकि लोग दोनों सवालों के जवाब पढ़ सकें, यह एसओ की गुणवत्ता में सुधार करता है। यह आलोचना या कुछ भी नहीं है।सवाल यह है कि "सटीक डुप्लिकेट के रूप में बंद" केवल तभी होता है जब 5 वोट होते हैं जो इसे चिह्नित करते हैं। – ewernli

उत्तर

20

मेरे अल्पविकसित समझ के साथ कि UserTransaction इस्तेमाल किया जाता है जब JTA आवश्यक (जैसे एकाधिक चीजों पर प्रश्नों करने के लिए), और कहा कि EntityTransaction जब जेपीए केवल आवश्यक है प्रयोग किया जाता है (उदाहरण के लिए क्वेरी है जब है परमाणु)।

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

  • तो जेपीए उपयोग स्टैंड-अलोन है, तो आप EntityTransaction का उपयोग लेन-देन खुद हदबंदी के लिए:

    UserTransaction बनाम EntityTransaction ध्यान में रखते हुए।

  • यदि जेपीए एक प्रबंधित वातावरण में उपयोग किया जाता है जहां यह जेटीए के साथ एकीकृत होता है, तो आप UserTransaction का उपयोग करते हैं। EntityManager खुद को जेटीए वितरित लेनदेन प्रबंधक में हुक करता है। एकमात्र subtlety मुझे पता है कि परिवर्तन की फ्लश पर विचार करता है। जब EntityTransaction का उपयोग किया जाता है, तो जेपीए को पता है कि इसे परिवर्तनों को फ्लश करने की आवश्यकता है। यदि लेनदेन UserTransaction का उपयोग करके नियंत्रित किया जाता है, तो उसे जेटीए registerSynchronization का उपयोग करके कॉलबैक पंजीकृत करने की आवश्यकता होती है, ताकि लेनदेन पूरा होने से पहले डेटाबेस में परिवर्तन फ़्लैश हो जाएं। यदि आप सीएमटी (कंटेनर प्रबंधित लेनदेन) के साथ ईजेबी का उपयोग करते हैं, तो आपको UserTransaction का उपयोग करने की भी आवश्यकता नहीं है: ऐप सर्वर शुरू होता है और आपके लिए लेन-देन बंद कर देता है।

संबंधित प्रश्न: