सबसे पहले, कुछ पृष्ठभूमि: मैं एएसपी.नेट एमवीसी 2 और एनएचबेर्नेट के लिए नया हूं। मैं अपना पहला एप्लिकेशन शुरू कर रहा हूं और मैं एनएचबीर्नेट का उपयोग करना चाहता हूं, क्योंकि मैं जेएसपी + स्ट्रैट्स 1 + हाइबरनेट वेब अनुप्रयोगों से आया हूं।एएसपी.नेट एमवीसी 2 आवेदन में एनएचबीर्नेट लेनदेन कब करें?
कोई भी इस बारे में बात नहीं कर रहा है, इसलिए मुझे लगता है कि यह बहुत स्पष्ट होना चाहिए। फिर भी मैं अपने सिर को खरोंच करता हूं क्योंकि मुझे निम्न समाधानों को पूरा करने वाला कोई समाधान नहीं मिल रहा है:
1) मैं "सत्र प्रति अनुरोध" रणनीति का उपयोग करना चाहता हूं। इसलिए, हर बार जब कोई उपयोगकर्ता अनुरोध करता है, तो उसे निबर्ननेट सत्र मिल जाता है, लेनदेन शुरू होता है, और जब अनुरोध खत्म हो जाता है, तो लेनदेन करता है, और एनएचबीर्नेट सत्र बंद हो जाता है (और यदि पूल होता है तो पूल में वापस आ जाता है)। यह गारंटी देता है कि मेरे लेनदेन परमाणु हैं।
2) जब कोई डेटाबेस अपवाद होता है (पीके उल्लंघन, अनूठा उल्लंघन, जो भी हो) मैं उस अपवाद को कैप्चर करना चाहता हूं, अपना लेनदेन रोलबैक करना चाहता हूं और उपयोगकर्ता को एक स्पष्ट संदेश देता हूं: यदि यह पीके उल्लंघन था, तो वह संदेश, और सभी अखंडता त्रुटियों के साथ ही।
तो, मेरी समस्या क्या है? मैं जावा वर्ल्ड से आया हूं, जहां मैंने सत्र खोलने के लिए फ़िल्टर का उपयोग किया, लेनदेन शुरू किया, अनुरोध संसाधित किया, फिर लेनदेन किया और सत्र बंद कर दिया। यह काम करता है, जब कोई डीबी अपवाद होता है, और जब तक आप फ़िल्टर में होते हैं तो गंतव्य पृष्ठ को बदलने का कोई तरीका नहीं है क्योंकि प्रतिक्रिया पहले से ही प्रतिबद्ध है।
तो उपयोगकर्ता वास्तव में सफलता पृष्ठ देखता है जब वास्तविकता लेनदेन को घुमाया गया था। इससे बचने के लिए मुझे सभी अखंडता अपवादों को रोकने के लिए जावा में बहुत सारी डेटा अखंडता जांच लिखनी है, क्योंकि मैं उन्हें सही तरीके से संभाल नहीं सकता था। यह बुरा है क्योंकि मैं इसे डेटाबेस में छोड़ने के बजाय काम कर रहा हूं (या शायद मैं गलत हूं और मुझे हमेशा अपने ऐप में यह डेटा अखंडता कोड लिखना होगा?)।
तो मुझे आईएचटीपी मॉड्यूल इंटरफेस मिला है जो मुझे लगता है कि एक javax.servlet.Filter (मुझे गलत है अगर सही है) के रूप में बहुत ही अवधारणा है, इसलिए मुझे लगता है कि मैं वही कर सकता हूं फिर से समस्या
यह सुनिश्चित करने के लिए कि मेरे लेन-देन परमाणु हैं, और जब वे अपवाद फेंकते हैं तो मैं अपना काम कहां रखूं, मैं उन्हें पकड़ सकता हूं और अपना गंतव्य पृष्ठ बदल सकता हूं और उपयोगकर्ता को एक व्यापक संदेश दे सकता हूं?
अब तक का एकमात्र संभावित समाधान है जो मैंने अपने आईएचटीपी मॉड्यूल को लेनदेन को शुरू करने और बंद करने के लिए रखा है, और प्रतिबद्धता को मेरे नियंत्रकों के तरीकों की अंतिम पंक्ति में डाल दिया है, इस प्रकार वहां अपवादों को पकड़ने में सक्षम है और फिर संदेश के साथ एक appropiate दृश्य वापस। अब मुझे उन सभी प्रतिबद्धता विधियों में उन प्रतिबद्धताओं और अपवाद हैंडलिंग लाइनों की प्रतिलिपि बनाना होगा जिनके लिए काम की आवश्यकता है। और चिंताओं के मुद्दे को अलग करना है, कि मेरे नियंत्रकों को डीबी के बारे में पता होना चाहिए, जो मुझे बिल्कुल पसंद नहीं है।
क्या कोई बेहतर तरीका है?
क्या आप कोड में एक उदाहरण दिखा सकते हैं? यह सहायक होगा। –