मैंने JBoss 6.0.0 में जेएनडीआई के माध्यम से हाइबरनेट स्थापित किया है।लेखों के बहुत से पालन करके अंतिम और कुछ समस्याएं थीं लेकिन इसे हल किया गया और यह काम करता है, लेकिन सवाल यह है कि, क्या मैंने यह सही किया है? एक के लिए मैंने एक लेनदेन लुकअप या फैक्ट्री क्लास निर्दिष्ट नहीं किया है।
सेवा-hibernate.xml फ़ाइल:
<hibernate-configuration xmlns="urn:jboss:hibernate-deployer:1.0">
<session-factory name="java:/hibernate/SessionFactory" bean="jboss.test.har:service=Hibernate, testcase=TimersUnitTestCase">
<property name="datasourceName">java:jdbc/MyDataSourceDS</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
<property name="current_session_context_class">jta</property>
<depends>jboss:service=Naming</depends>
<depends>jboss:service=TransactionManager</depends>
</session-factory>
स्पष्ट रूप से मेरी संस्थाएं और .hbm.xml फ़ाइलें भी हैं, इसलिए यहां कुछ कोड है जिसका उपयोग मैं सर्वलेट में प्रयोग कर रहा हूं:
UserTransaction utx = (UserTransaction)new InitialContext().lookup("UserTransaction");
utx.begin();
InitialContext ctx = new InitialContext();
SessionFactory sf = (SessionFactory)ctx.lookup("java:/hibernate/SessionFactory");
Session session = sf.getCurrentSession();
List<TblSettings> settings = session.createQuery("FROM TblSettings").list();
utx.commit();
उपर्युक्त कोड काम करता है, लेकिन क्या मैं इसे जिस तरह से इरादा कर रहा हूं?
बीटीडब्ल्यू, मैं मैवेन एचएआर प्लगइन को अपनी इकाइयों + .hbm.xml और service-hibernate.xml पैकेज को एक एचएआर संग्रह के रूप में उपयोग कर रहा हूं।
धन्यवाद।
उत्तर:
जवाब के लिए 2 № 1मेरा मानना है कि आप जेबॉस जेटीए के साथ हाइबरनेट का सही ढंग से उपयोग नहीं कर रहे हैं, लेकिन हाइबरनेट स्वचालित रूप से मौजूदा जेटीए लेनदेन का उपभोग कर सकता है। यह सुनिश्चित करने के लिए, लॉगिंग वर्बोसिटी बढ़ाने के लिए प्रयास करें (बस के लिए org.hibernate.transaction
पर्याप्त होना चाहिए) हाइबरनेट के लिए और इस तरह की प्रविष्टियों को देखें:
16:27:11,518 INFO TransactionFactoryFactory:58 - Using default transaction strategy (direct JDBC transactions)
16:27:11,520 INFO TransactionManagerLookupFactory:79 - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
यदि आप उपरोक्त की तरह प्रविष्टियां देखते हैं, तो आपको संपत्ति को स्पष्ट रूप से सेट करने की आवश्यकता होगी transaction.factory_class
सेवा मेरे org.hibernate.transaction.JTATransactionFactory
और संपत्ति jta.UserTransaction
सेवा मेरे java:comp/UserTransaction
आपके cfg.xml में।
ध्यान देने योग्य एक और बात यह है कि एचएआर तैनातीप्री-जेपीए दिनों में उपयोगी थे, जब एएस-प्रबंधित तरीके से हाइबरनेट का उपयोग करने का कोई मानक तरीका नहीं था। एचबी तैनाती शायद जेबॉस एएस 7 में बहिष्कृत की जाएगी। आपको अपने प्रोजेक्ट के आधार पर स्वयं तय करना चाहिए, लेकिन मैं लंबी अवधि के लिए जेपीए में माइग्रेट करने पर विचार करने की सिफारिश करता हूं।