2011-11-14 8 views
8

मैं अपने वेबएप को डिबग कर रहा हूं। यह स्टार्टअप पर DataSourceTransactionManager बीन और एक HibernateTransactionManager बीन बनाने के लिए कॉन्फ़िगर किया गया है। यह जानबूझकर नहीं है लेकिन तीसरी पार्टी निर्भरता के कारण होता है। प्रभाव सौम्य प्रतीत होता है। जो मैं डीबगिंग के माध्यम से देख रहा हूं वह यह है कि जब हम एक हाइबरनेट आधारित डीएओ के माध्यम से किसी ऑब्जेक्ट को जारी रखते हैं - डेटासोर्स ट्रांज़ेक्शन मैनेजर को हाइबरनेट ट्रान्सएक्शन मैनेजर (बीन्स दोनों को 'लेनदेन प्रबंधक' कहा जाता है) नहीं कहा जाता है। वसंत जावाडोक का तात्पर्य है (मुझे लगता है, अब इसे फिर से पढ़ना) यह स्थानीय संसाधनों के लिए ठीक है - जो हमारी स्थिति है। अर्थात। यह एक वितरित जेटीए आधारित पर्यावरण नहीं है।क्या HibernateTransactionManager की बजाय ORM दृढ़ता के लिए DataSourceTransactionManager का उपयोग करना ठीक है?

मेरा सवाल है - क्या ओआरएम आधारित दृढ़ता के लिए HibernateTransactionManager का उपयोग न करने का कोई नकारात्मक प्रभाव है। मैं कॉन्फ़िगरेशन को HibernateTransactionManager को हमारे डीएओ पर @ ट्रांसेक्शन एनोटेशन पर क्वालीफायर के माध्यम से उपयोग करने के लिए बदल सकता हूं।

साधारण यूनिट परीक्षण, एकीकरण परीक्षण सेटअप में चीजें ठीक काम कर रही हैं, लेकिन जब हम हजारों उपयोगकर्ता और उच्च स्तर की सहमति प्राप्त करेंगे, तो मैं पूर्ण उत्पादन वॉल्यूम को स्केल करने के बारे में अधिक चिंतित हूं।

टीआईए, उम्मीद है कि यह बहुत अस्पष्ट नहीं है।

वसंत 3.0.x बीटीडब्ल्यू।

यह स्प्रिंग 3.1 डॉक्स में है।

सेक्शन 11.9 "सामान्य समस्याओं के समाधान"।

पर आधारित प्लेटफार्म प्रौद्योगिकियों और आवश्यकताओं के आधार पर सही प्लेटफार्म ट्रांज़ेक्शन प्रबंधक कार्यान्वयन का उपयोग करें।

उत्तर

6

यह मुझे गलत के रूप में मार देगा और समस्याएं पैदा करेगा। हाइबरनेट टीएक्सएन मैनेजर के बिना हाइबरनेटऑपरेशंस में किए गए सभी कॉल एक लेन-देन के बाहर और एक अलग सत्र पर होंगे, संभवतः ऑटो-प्रतिबद्ध का उपयोग कर। तो ऐसा लगता है कि जब कोई त्रुटि होती है तो सबकुछ ठीक होता है, आपको ऐसे बदलाव मिल सकते हैं जिन्हें आप रोल-बैक होने की उम्मीद करेंगे।

जाँच करने के लिए

  • शुरू ट्रॅन
  • कुछ
  • फेंक अपवाद
  • बचाने के लिए प्रतिबद्ध

चेक कि क्या 'कुछ' डीबी में है या नहीं दिखाई देता है का पालन करें।

एक और जांच होगी

  • ट्रॅन
  • लोड कुछ
  • पहुँच कुछ से किसी अन्य वस्तु के लिए एक रिश्ता शुरू करते हैं और इस संबंधित वस्तु की एक संपत्ति (नहीं पी) का उपयोग

आपको अंतिम कॉल एक अपवाद का कारण बन सकता है क्योंकि सत्र लोड से खुला नहीं रखा गया था क्योंकि संलग्न टीएक्सएन हाइबरनेट टीएक्सएन प्रबंधक द्वारा प्रबंधित नहीं किया जाता है।

+0

+1 हम्म। दिलचस्प। धन्यवाद। इन परीक्षणों में से एक कोशिश करेंगे। जो मैं देख रहा हूं वह यह है कि डीएओ कॉल लेन-देन के भीतर हो रही हैं, और डीएओ कॉल प्राप्त करता है सत्र() - तो वसंत सत्र फैक्ट्री का उपयोग एक नया सत्र वापस करता है और सब ठीक लगता है। लेकिन जैसा कि आप कहते हैं - रोलबैक को आराम करने के लिए हमें कितनी बार याद है। –

+4

अच्छा है। मैंने इस परीक्षा की कोशिश की है। सहेजने के बाद अपवाद के कारण, हाइबरनेट टीएक्स एमजीआर के साथ बचाया गया था। DataSourceTransactionManager के साथ यह नहीं था। –

+0

क्या आप अपने शब्द का समर्थन करने वाले आधिकारिक दस्तावेज प्रदान कर सकते हैं "हाइबरनेट टीएक्सएन मैनेजर के बिना हाइबरनेटऑपरेशंस के लिए किए गए सभी कॉल लेनदेन के बाहर और एक अलग सत्र पर होंगे"? मैं DataSourceTransactionManager + Hibernate का उपयोग कर रहा हूँ। – DerekY

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