Manuelles commit einer Transaktion verwaltet

Bekam ich eine "API" in form eines Glases, um zu tun, einige externe Buchführung von meinem Java-Naht-Hibernate appplication.

Intern die API ist eine einfache Hibernate-Anwendung, die Verwendung von zwei unabhängigen Datenquellen außer das man verwendet, von der Naht selbst.

Das Problem ist, dass man die "API" - Operationen die folgende Ausnahme ausgelöst, wenn dabei eine interne .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 ...

Den source-code der moneyMovement-Methode sieht der standard Hibernate-Session-Transaktion 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();
}

Ich bin mit Seam-managed transactions mit JTA. Ich bin auch gezwungen, verwenden Sie die benutzerdefinierte API-und ich bin nicht gestattet, den Quelltext zu ändern.

Was sind meine alternativen? Wie kann ich die isolieren, die Naht verwaltet Transaktionen, die von "API" Hibernate-Session? Es ist möglich zu konfigurieren, dass eine Verbindung von einer bestimmten Datenquelle, um sich nicht einem managed-trx?

InformationsquelleAutor vz0 | 2011-01-25

Schreibe einen Kommentar