2011-08-23 20 views
5

मेरे ऐप में, कई कदम हैं जहां डेटाबेस में कई लोग कई तरीकों से अनुक्रमिक रूप से किए जाएंगे। उदाहरण:स्प्रिंग और हाइबरनेट का उपयोग करके नेस्टेड लेनदेन

A -> B -> C 
     -> D 
      ->E 
     -> F 
    -> G 

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

धन्यवाद।

उत्तर

7

सबसे पहले, "घोंसला" लेनदेन, इस अर्थ में कि एक-दूसरे के आधार पर कई चल रहे लेनदेन हैं, समर्थित नहीं है, afaik।

फिर, propagation=REQUIRED इसका मतलब है कि प्रचार के साथ सभी तरीकों होगा:

  • एक नई लेन-देन है, अगर वहाँ कोई भी मौजूद नहीं
  • एक मौजूदा लेन-देन में भाग लेने अगर इस तरह से मौजूद है शुरू करते हैं।

इसका मतलब यह है कि आपके परिदृश्य में, F में एक विफलता पूरे लेन-देन रोलबैक हैं (क्योंकि यह एक एकल लेनदेन, A द्वारा शुरू किया है, और अन्य तरीकों के प्रचार)

+0

मैं पूरी तरह से आप के साथ सहमति व्यक्त की है | जब तक मैं पढ़ता हूं (कहीं - यह कहां नहीं था कि यह कहां था) यह कार्य पूरा होने के साथ ही होता है। मुझे लगता है कि मैं समझ में गलत हूं। वास्तविक प्रतिबद्धता कब होती है (हमें स्पष्ट रूप से ऐसा करने की ज़रूरत नहीं है। सही?)? –

+1

प्रतिबद्धता तब होती है जब लेनदेन शुरू करने वाली विधि पूरी होती है। यह इस मामले में 'ए' है – Bozho

+0

ठीक है। महान। बहुत बहुत धन्यवाद। –

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