मैं एक "एपीआई" एक जार के रूप में दिया गया था मेरी जावा सीवन-हाइबरनेट appplication से कुछ बाहरी लेखा संचालन करने के लिए।कैसे को प्रबंधित लेन-देन के लिए प्रतिबद्ध करने
आंतरिक रूप से, एपीआई एक सादे हाइबरनेट आवेदन, सीवन से ही इस्तेमाल किया एक के अलावा दो स्वतंत्र डेटा स्रोतों का उपयोग कर रहा है।
मुद्दा यह है कि "API" आपरेशनों में से एक है जब एक आंतरिक .commit() कर निम्न अपवाद को जन्म देती है:
java.sql.SQLException: You cannot commit during a managed transaction!
at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.jdbcCommit(BaseWrapperManagedConnection.java:543)
at org.jboss.resource.adapter.jdbc.WrappedConnection.commit(WrappedConnection.java:334)
at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:139)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:115)
at com.other.APIAccountingImpl.moneyMovement(APIAccountingImpl.java:261)
at com.myapp.integration.ExternalApiIntegrator.storeAcountingData(ExternalApiIntegrator.java:125)
at com.myapp.session.EmployeeAccounting.persistData(EmployeeAccounting.java:123)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at ...
moneyMovement विधि के स्रोत कोड मानक Hibernate Session transaction idiom की तरह दिखता है:
Session sess = factory.openSession();
Transaction tx;
try {
tx = sess.beginTransaction();
//do some work
...
tx.commit();
}
catch (Exception e) {
if (tx!=null) tx.rollback();
throw e;
}
finally {
sess.close();
}
मैं उपयोग कर रहा हूँ सीवन JTA के साथ लेनदेन में कामयाब रहे। मुझे कस्टम एपीआई का उपयोग करने के लिए भी मजबूर किया गया है और मुझे स्रोत कोड बदलने की अनुमति नहीं है।
मेरे विकल्प क्या हैं? मैं "एपीआई" हाइबरनेट सत्र से सीम प्रबंधित लेनदेन को अलग कैसे कर सकता हूं? किसी प्रबंधित डेटा स्रोत से कनेक्शन को कॉन्फ़िगर करना संभव है ताकि प्रबंधित ट्रक्स न हो?