2010-03-31 9 views
19

वे जावा ईई पर्यावरण में जेटीए लेनदेन समर्थन का उपयोग करने की सलाह देते हैं।हाइबरनेट के लिए टॉमकैट 6 में जेटीए समर्थन का उपयोग कैसे करें?

लेकिन टॉमकैट 6 में जेटीए को कॉन्फ़िगर कैसे करें ताकि हाइबरनेट सत्र इसका उपयोग कर सके?

संस्करण 3.0.1 से शुरू होने पर, हाइबरनेट ने सत्र Factory.getCurrentSession() विधि को जोड़ा। प्रारंभ में, इसने जेटीए लेनदेन का उपयोग माना, जहां जेटीए लेनदेन ने वर्तमान सत्र के दायरे और संदर्भ दोनों को परिभाषित किया। कई स्टैंड-अलोन जेटीए लेनदेन प्रबंधक कार्यान्वयन की परिपक्वता को देखते हुए, अधिकांश, यदि नहीं, तो अनुप्रयोगों को जेटीए लेनदेन प्रबंधन का उपयोग करना चाहिए, भले ही वे जे 2 ईई कंटेनर में तैनात हों या नहीं। उस पर आधारित, जेटीए-आधारित प्रासंगिक सत्रों का उपयोग करने की आवश्यकता है।

+2

क्या आपको वास्तव में जेटीए की आवश्यकता है? – Bozho

+0

ठीक है, मुझे एक जेएनडीआई कॉन्फ़िगरेशन सत्र फ़ैक्टरी की आवश्यकता है। अब जब मैं लुकअप के माध्यम से सत्र फैक्ट्री प्राप्त करने में सक्षम हूं तो मुझे जेटीए को कॉन्फ़िगर करने की आवश्यकता है। मेरे होम क्लासेस getCurrentSession() का उपयोग करते हैं और जैसा कि मैं प्रलेखन में पढ़ सकता हूं यह केवल जेटीए कॉन्फ़िगर किए गए वातावरण में काम करता है। इसके अलावा, जैसा कि मैंने पहले ही उल्लेख किया है, वस्तुतः हर कोई जेईई पर्यावरण में जेटीए का उपयोग करने की सिफारिश करता है। – EugeneP

+3

जेटीए का उपयोग न करें क्योंकि किसी ने आपको बताया है कि आपको इसकी आवश्यकता है। 99% परिस्थितियों में जेटीए बहुत जटिल है, और अनावश्यक है। हाइबरनेट/जेपीए इसके बिना ठीक काम करेगा। – skaffman

उत्तर

28

आप बिलाव में JTA समर्थन चाहते हैं तो आप Atomikos, JOTM, Bitronix, SimpleJTA, JBossTS या GeronimoTM/Jencks की तरह एक स्टैंडअलोन लेनदेन प्रबंधक का उपयोग करने की आवश्यकता होगी। लेकिन ईमानदारी से, यदि आप कई संसाधनों में लेनदेन को संभालने नहीं जा रहे हैं, तो आप जेटीए के बिना जी सकते हैं (और यदि आपको वास्तव में जेटीए की आवश्यकता है, तो एक पूर्ण उड़ाए गए एप्लिकेशन सर्वर का उपयोग करें)।

6

तुम सिर्फ SessionFactory.getCurrentSession() उपयोग करने के लिए आप बस अपने hibernate.cfg.xml के लिए निम्न दो पंक्तियों में जोड़ सकते हैं चाहते हैं:

<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> 
<property name="hibernate.current_session_context_class">thread</property> 

यह आपको प्रत्येक थ्रेड के लिए एक अनूठा सत्र दे देंगे। एक सर्वलेट अनुरोध हमेशा एक थ्रेड के भीतर संभाला जाता है (यह देखते हुए कि आपका कोड नए नहीं बनता है), सत्र पूरे अनुरोध के लिए लाइव होगा।

अनुरोध के बाद सत्र बंद करने के लिए फ़िल्टर का उपयोग करना न भूलें!

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