मैं माइस्क्ल और ग्लासफ़िश के साथ हाइबरनेट इकाई प्रबंधक का उपयोग करने का प्रयास कर रहा हूं। मैं निम्न त्रुटि जब एक JTA डेटा स्रोत उपयोग करने का प्रयास हो रही है:हाइबरनेट, माइस्क्ल, ग्लासफ़िश v3, और जेटीए डेटासोर्स
Caused by: org.hibernate.HibernateException: The chosen transaction strategy requires access to the JTA TransactionManager
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:376)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1367)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:858)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:733)
... 37 more
यहाँ है मैं कैसे कॉन्फ़िगर किया है मेरी persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="myPU" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/mysql</jta-data-source>
<class>com.my.shared.entity.MyFile</class>
<class>com.my.shared.entity.MyRole</class>
<class>com.my.shared.entity.MyUser</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.show.sql" value="true" />
</properties>
हालांकि, जब मैं एक कॉन्फ़िगर गैर-जेटीए डेटासोर्स, यह ठीक काम करता है
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="myPU" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>jdbc/mysql</non-jta-data-source>
<class>com.my.shared.entity.MyFile</class>
<class>com.my.shared.entity.MyRole</class>
<class>com.my.shared.entity.MyUser</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.show.sql" value="true" />
</properties>
</persistence-unit>
</persistence>
यह सब ठीक है ,
em.getTransaction().begin();
em.persist(myObject);
em.getTransaction().commit();
मैं हाइबरनेट विन्यास के साथ कुछ कमी कर रहा हूँ या यह भी एक का उपयोग करना संभव है: d अच्छा है, लेकिन मैं वास्तव में उपयोग करना चाहते हैं:
em.persist(myObject);
बजाय
जेटीए डेटासोर्स?
ठीक है, तो मैं संपत्ति नाम = "hibernate.transaction.manager_lookup_class" जोड़ा < मूल्य = "org.hibernate.transaction.SunonETransactionManagerLookup" /> मेरे persistence.xml पर। अब यह त्रुटि के बिना "बनी रहती है", लेकिन यह डेटाबेस के लिए कभी भी प्रतिबद्ध नहीं होती है। – KevMo
@ केवीमो: आपको 'em.getTransaction() शुरू करें() शुरू करें, जैसा कि आप सीएमटी का उपयोग कर रहे हैं, एक लेनदेन को घोषणात्मक रूप से शुरू करने की आवश्यकता नहीं है। मुझे आशा है कि आपने अपनी बीन विधि को '@ ट्रांजेक्शनल 'के साथ चिह्नित किया है? –
ओपीएस, क्षमा करें, आप वसंत का उपयोग नहीं कर रहे हैं :) तो मेरे जवाब का पालन करें। –