2010-01-01 6 views
6

हाइबरनेट प्रलेखन राज्यों निम्नलिखित:निबर्ननेट कनेक्शन रिलीज मोड: "after_transaction" का उपयोग करके दस्तावेज़ों को पुनः संयोजित क्यों किया जाता है?

विन्यास पैरामीटर hibernate.connection.release_mode जो रिलीज मोड का उपयोग करने के लिए निर्दिष्ट किया जाता है। संभावित मान: * ऑटो (डिफ़ॉल्ट) - वर्तमान रिलीज में after_transaction के बराबर। इस डिफ़ॉल्ट व्यवहार को बदलने के लिए शायद ही कभी एक अच्छा विचार है क्योंकि इस सेटिंग के मूल्य के कारण विफलता उपयोगकर्ता कोड में बग और/या अमान्य मान्यताओं को इंगित करती है। * on_close - ConnectionReleaseMode.OnClose का उपयोग करने के लिए कहता है। यह सेटिंग पीछे की संगतता के लिए छोड़ी गई है, लेकिन इसका उपयोग अत्यधिक निराश है। ...

मैंने एक एकीकरण परीक्षण बनाया है जो एक ही समय में दो सत्र खोलकर और एक ही इकाई में हेरफेर करके एक StaleObjectException को उत्तेजित करता है। यह सुनिश्चित करने के लिए कि परीक्षण पूरा होने पर सब कुछ वापस ले जाता है, परीक्षण सामग्री को लेनदेनस्कोप के भीतर रखा जाता है; इससे वितरित लेनदेन का कारण बनता है क्योंकि दो सत्र एक ही परिवेश लेनदेन के खिलाफ डीबी कनेक्शन खोलेंगे। मैं डिफ़ॉल्ट कनेक्शन रिलीज मोड सेटिंग को "ऑनक्लोज़" में बदलना चाहता हूं, लेकिन ऊपर बताए अनुसार, दस्तावेज इसकी अनुशंसा नहीं करता है। क्या कोई यह समझा सकता है कि डिफ़ॉल्ट व्यवहार को बदलने का अच्छा विचार क्यों नहीं है?

+0

लेनदेन प्रबंधित करने के तरीके के बजाय आप मैन्युअल लेन-देन का उपयोग क्यों करते हैं? – Paco

+0

मेरा यूनिटऑफवर्क लेन-देन को निहितार्थ तरीके से संभालता है। यदि मैं परीक्षण के भीतर एक सत्र का उपयोग करता हूं तो मैं StaleObjectStateException को उत्तेजित नहीं कर सकता (क्योंकि तब मुझे एक ही इकाई के दो उदाहरण नहीं मिल सकते हैं)। वैसे भी, यह बिंदु के बगल में है। – Marius

+0

मैं आपके प्रश्न का उत्तर नहीं दे सकता (अभी तक), लेकिन मुझे इस विषय के बारे में अधिक जानना है, क्योंकि मैं भविष्य में इसी तरह के मुद्दों की अपेक्षा करता हूं जिस पर मैं काम कर रहा हूं। आप अपना आईएसएशन उदाहरण कैसे बनाते हैं? – Paco

उत्तर

5

ठीक है क्योंकि कोई और परेशान नहीं कर रहा है, मैं इसे स्वयं जवाब देने का प्रयास करूंगा :-) यदि आप ऐसे पैटर्न का उपयोग करते हैं जहां सत्र का निपटारा करते समय लेनदेन किया जाता है (एक लेनदेन = एक सत्र) तो आप " ऑनक्लोज़ "रिलीज मोड। यदि आप पैटर्न का उपयोग करते हैं जहां आपका सत्र एकाधिक लेन-देन फैलाता है (उदाहरण के लिए बातचीत प्रति व्यापार लेनदेन http://dotnetchris.wordpress.com/2009/01/27/conversation-per-business-transaction-using-postsharp-and-ioc/), "ऑनक्लोज़" का उपयोग करके असुरक्षित संसाधनों को हॉग कर दिया जाएगा क्योंकि आप अपने लेनदेन को कम करते समय कनेक्शन पूल से अपने कनेक्शन जारी नहीं कर रहे हैं। लेनदेन को कम करते समय डिफ़ॉल्ट "after_transaction" रिलीज़ मोड आपके कनेक्शन को रिलीज़ करेगा, इस प्रकार आपके बहुमूल्य डेटाबेस कनेक्शन को मुक्त कर देगा।

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