वसंत लेनदेन में आवश्यकताएं और नेस्टेड प्रचार के बीच अंतर


80

मैं PROPAGATION_REQUIRES_NEWऔर PROPAGATION_NESTEDप्रसार नीतियों के बीच व्यवहार के अंतर को नहीं समझ सकता । मुझे ऐसा लगता है कि दोनों मामलों में, वर्तमान प्रक्रिया को रोलबैक किया गया है, लेकिन संपूर्ण लेनदेन नहीं। कोई सुराग?


7
इस लिंक को देखें: forum.springsource.org/archive/index.php/t-16594.html - Juergen Hoeller इसे बहुत अच्छी तरह से समझाता है
राल्फ

@ राल्फ: शुक्रिया, यह वही है जो मैं देख रहा था। आपको इसे एक उत्तर के रूप में जोड़ना चाहिए।
एलेक्सिस डुफ्रेनॉय

1
@ राल्फ: महान, यह एक सबसे अच्छा जवाब होगा।
नंदकुमार टेकले

1
इसलिए मुख्य अंतर यह है कि एक नेस्टेड लेन-देन नीति के साथ, लेन-देन को वर्तमान परमाणु ऑपरेशन की शुरुआत में रोलबैक किया जा सकता है, जो कि एक की आवश्यकता के रूप में एक ही है, लेकिन यह केवल पूरी प्रक्रिया के अंत में शुरू किया जाएगा। जो पूरी तरह से requirement_new नीति से अलग है, जहां प्रत्येक परमाणु संचालन समाप्त होने पर शुरू हो जाएगा।
एलेक्सिस डुफ्रेनॉय

1
@ राल्फ दुर्भाग्य से, आपका लिंक अब किसी मौजूदा पृष्ठ को इंगित नहीं करता है :(
knittl

जवाबों:


117

यह लिंक देखें: PROPAGATION_NESTED बनाम PROPAGATION_REQUIRES_NEW? Juergen Hoeller ने इसे बहुत अच्छी तरह से समझाया। - स्प्रिंग सोर्स फोरम 28 फरवरी, 2019 को पूरी तरह से ऑफलाइन साइस है, लेकिन आप नीचे दिए गए उद्धरण में लेख का प्रासंगिक हिस्सा पढ़ सकते हैं

PROPAGATION_REQUIRES_NEW दिए गए क्षेत्र के लिए एक नया, स्वतंत्र "आंतरिक" लेनदेन शुरू करता है। यह लेन-देन बाहरी लेनदेन से पूरी तरह से स्वतंत्र होगा या लुढ़का होगा, इसका अपना अलग-अलग दायरा होगा, ताले का अपना सेट होगा, इत्यादि बाहरी लेनदेन आंतरिक एक की शुरुआत में निलंबित हो जाएंगे, और एक बार फिर से शुरू हो जाएगा। पूरा कर लिया है। ...

दूसरी ओर PROPAGATION_NESTED एक "नेस्टेड" लेन-देन शुरू करता है, जो मौजूदा एक का एक वास्तविक सबट्रैक्शन है। क्या होगा कि नेस्टेड लेनदेन की शुरुआत में एक बचत बिंदु लिया जाएगा। Í यदि नेस्टेड लेन-देन विफल रहता है, तो हम उस सेव पॉइंट पर वापस आ जाएंगे। नेस्टेड लेनदेन बाहरी लेनदेन का हिस्सा है, इसलिए यह केवल बाहरी लेनदेन के अंत में प्रतिबद्ध होगा। ...


अच्छा जवाब और अच्छा सवाल। आपकी टिप्पणी और निम्नलिखित लिंक मेरे लिए बहुत उपयोगी थे: byteslounge.com/tutorials/…
yaki_nuka

क्या यह सही व्यवहार है जिसे आपने प्रचार_श्रेणी_नया में वर्णित किया है? कारण जैसा कि मैंने इसकी जाँच की दोनों लेनदेन रोलबैक।
खाएंSleepCode

कृपया बाहरी लेनदेन व्यवहार को स्पष्ट करें यदि नेस्टेड लेनदेन विफल हो जाता है (क्या यह भी विफल हो जाएगा?) और इसके विपरीत
gstackoverflow

तो नेस्टेड लेनदेन के साथ, जब आंतरिक एक रोलबैक होता है, तो बाहरी एक बचत बिंदु पर जारी रहता है, जब बाहरी एक रोलबैक होता है, तो सभी कार्रवाई वापस रोल की जाती है, है ना?
वीचेरोस्की

व्यवहार में कोई अंतर?
gstackoverflow

14

PROPAGATION_REQUIRES_NEW: प्रत्येक प्रभावित लेनदेन गुंजाइश के लिए पूरी तरह से स्वतंत्र लेनदेन का उपयोग करता है। उस स्थिति में, अंतर्निहित भौतिक लेनदेन अलग-अलग होते हैं और इसलिए स्वतंत्र रूप से वापस कर सकते हैं या रोल कर सकते हैं, बाहरी लेनदेन के साथ आंतरिक लेन-देन की स्थिति से प्रभावित नहीं होते हैं।

PROPAGATION_NESTED: एक से अधिक सहेजने वाले एकल भौतिक लेनदेन का उपयोग करता है जिसे वह वापस रोल कर सकता है। इस तरह के आंशिक रोलबैक एक आंतरिक लेन-देन की गुंजाइश को इसके दायरे के लिए रोलबैक को ट्रिगर करने की अनुमति देते हैं, बाहरी लेनदेन के साथ कुछ लेनदेन वापस होने के बावजूद भौतिक लेनदेन को जारी रखने में सक्षम होते हैं। यह सेटिंग आमतौर पर JDBC सेवप्वाइंट पर मैप की जाती है, इसलिए केवल JDBC रिसोर्स ट्रांजेक्शन के साथ काम करेगी।

वसंत प्रलेखन की जाँच करें


2
हां, मैं अंडरलाइनिंग के अंतर को समझता हूं, लेकिन मैं यह नहीं देख सकता कि यह अलग तरह से कैसे व्यवहार करेगा: एक मामले में, मैं पिछले बचतकर्ता को रोलबैक करूंगा, दूसरे में, मैं वर्तमान लेनदेन को रोलबैक करूंगा और बाहरी एक को नहीं, लेकिन वास्तव में, दोनों मामलों में मैं वर्तमान परमाणु संचालन की शुरुआत में रोलबैक करूंगा और उस बिंदु से फिर से शुरू करूंगा।
एलेक्सिस डुफ्रेनॉय

1
@ ट्रॉथ: @ राल्फ द्वारा लिंक पर दो लाइनें व्यवहार में अंतर बताएंगी। PROPAGATION_REQUIRES_NEW: बाहरी लेन-देन आंतरिक एक की शुरुआत में निलंबित हो जाएगा, और एक बार आंतरिक पूरा होने के बाद फिर से शुरू हो जाएगा। प्रत्येक आंतरिक लेनदेन पूर्ण होने पर / रोलबैक किया जाता है। PROPAGATION_NESTED: नेस्टेड लेनदेन बाहरी लेनदेन का हिस्सा है, इसलिए यह केवल बाहरी लेनदेन के अंत में प्रतिबद्ध होगा।
नंदकुमार टेकले

मैं सहमत हूं, इसलिए मैंने उन्हें अपनी टिप्पणी से उत्तर देने का सुझाव दिया।
एलेक्सिस डुफ्रेनॉय

1
@ टैरोथ: मैं आपसे सहमत हूं। :) उसके पास सबसे अच्छा जवाब है।
नंदकुमार टेकले

-6

कृपया अंतर खोजें

1.) Use of NESTED Transaction

एक नेस्टेड लेनदेन के भीतर निष्पादित करें यदि कोई मौजूदा लेनदेन मौजूद है, तो PROPAGATION_REQUIRED की तरह व्यवहार करें। नेस्टेड लेनदेन स्प्रिंग द्वारा समर्थन कर रहा है

2.) आवश्यक लेनदेन का उपयोग एक मौजूदा लेनदेन का समर्थन करें, यदि कोई मौजूद नहीं है तो एक नया बनाएं। । इसका मतलब बैंकिंग डोमेन के लिए निकासी, जमा, लेन-देन को अपडेट करना है

3.) REQUIRES_NEW लेनदेन का उपयोग एक नया लेनदेन बनाएं, और यदि कोई मौजूद है तो वर्तमान लेनदेन को निलंबित करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.