हाइबरनेट संदर्भ में, यह कई बार है किहाइबरनेट सत्र कैसे तोड़ें?
सभी हाइबरनेट द्वारा फेंका अपवाद घातक होता है कहा गया है। इसका मतलब है कि आपको डेटाबेस लेनदेन वापस लेना होगा और वर्तमान
Session
बंद करना होगा।Session
के साथ काम करने के लिए आपको जारी रखने की अनुमति नहीं है, जिसने अपवाद फेंक दिया है।
हमारे विरासत ऐप्स में से एक फ़ाइलों को डीबी तालिका में फ़ाइलों से कई रिकॉर्ड अपडेट/डालने के लिए एक सत्र का उपयोग करता है। प्रत्येक रिकॉर्ड अपडेट/डालने को एक अलग लेनदेन में किया जाता है, जिसे तब किया जाता है (या किसी त्रुटि के मामले में वापस लुढ़काया जाता है)। फिर अगले रिकॉर्ड के लिए एक नया लेनदेन खोला जाता है, और इसी तरह। लेकिन पूरे सत्र में एक ही सत्र का उपयोग किया जाता है, भले ही HibernateException
प्रसंस्करण के बीच में पकड़ा गया हो। हम जेबॉस 4.2 पर हाइबरनेट 3.24.sp1 के साथ ओरेकल 9i बीटीडब्ल्यू का उपयोग कर रहे हैं।
पुस्तक में उपर्युक्त पढ़ना, मुझे एहसास हुआ कि यह डिज़ाइन विफल हो सकता है। इसलिए मैंने प्रत्येक रिकॉर्ड अपडेट के लिए एक अलग सत्र का उपयोग करने के लिए ऐप को दोहराया। एक नकली सत्र कारखाने के साथ एक यूनिट परीक्षण में, मैं सत्यापित कर सकता हूं कि अब यह प्रत्येक रिकॉर्ड अपडेट के लिए एक नए सत्र का अनुरोध कर रहा है। अब तक सब ठीक है.
हालांकि, हमें पूरे ऐप का परीक्षण करते समय सत्र विफलता को पुन: पेश करने का कोई तरीका नहीं मिला (क्या यह एक तनाव परीक्षण बीटीडब्ल्यू होगा, या ...?)। हमने डीबी के श्रोता को बंद करने के बारे में सोचा लेकिन हमें एहसास हुआ कि ऐप डीबी के लिए कनेक्शन का एक गुच्छा रख रहा है, और श्रोता उन कनेक्शनों को प्रभावित नहीं करेगा। (यह एक वेब ऐप है, जो प्रत्येक रात एक शेड्यूलर द्वारा सक्रिय किया जाता है, लेकिन इसे ब्राउज़र के माध्यम से भी सक्रिय किया जा सकता है।) फिर हमने डीबी में उन कनेक्शनों को मारने की कोशिश की, जबकि ऐप अपडेट प्रोसेस कर रहा था - इसके परिणामस्वरूप कुछ विफल अपडेट, लेकिन फिर ऐप खुशी से बाकी रिकॉर्ड अपडेट करना जारी रखा। स्पष्ट रूप से हाइबरनेट पूरे सत्र को तोड़ने के बिना हुड के नीचे टूटे हुए कनेक्शन को फिर से खोलने के लिए पर्याप्त चालाक है।
तो यह सब के बाद एक महत्वपूर्ण मुद्दा नहीं हो सकता है, क्योंकि हमारा ऐप अपने मूल रूप में भी मजबूत मजबूत प्रतीत होता है। हालांकि, यह मुद्दा मुझे परेशान करता रहता है।
- क्या परिस्थितियों में हाइबरनेट सत्र वास्तव में व्यर्थ हो जाता है के बाद एक
HibernateException
फेंक दिया गया था: मैं जानना चाहूंगा (अद्यतन: और क्या लक्षण हैं)? - किसी परीक्षण में इसे पुन: पेश करने के लिए कैसे करें (अद्यतन: प्राथमिक रूप से इकाई परीक्षण के बजाय एकीकरण में)?
- (जैसे कि एक परीक्षण के लिए उचित शब्द क्या है?)
1 के संबंध में), यह मेरी समझ भी है - इसलिए मुझे खुशी है कि मैंने अपना ऐप अधिक मजबूत बना दिया। सीधी समस्या यह है कि इसे एक स्वतंत्र परीक्षण में कैसे सत्यापित किया जाए? 2) दिलचस्प लगता है, क्योंकि यह ऐप को संशोधित किए बिना किया जा सकता है। –