GartenUmgraben
Erfahrenes Mitglied
Hoi
In einer Java Anwendung greifen wir per CMP auf Datenbanken zu..was auch alles wunderbar geht. Nun haben wir in der ejb-jar.xml eine Funtkion (Buchung) so konfiguriert, dass die innerhalb einer neuen Transaktion ablaufen soll.
In der Funktion selbst wird ein Betrag von einer Datenbank abgebucht und anschliessend auf eine andere Datenbank (auf anderem Rechner) aufgebucht..was auch ohne Probleme funktioniert. Zwischen den beiden Buchungen habe ich per Schleife ein 30sek Break eingebaut. Trenne ich den 30sek die Verbindung zu Datenbank 2 sollte er ja die Buchung an Datenbank 1 per Rollback rückgängig machen..was er aber nicht tut.
Soll heissen er bucht zwar von DB_1 ab aba nicht auf DB_2 drauf. Genau das soll ja durch die Transaktion verhindert werden. Ich benutze JBOSS 4.0.1. sp1 und MySQL 4.1.10
Muss ich evtl. den JBOSS noch konfigurieren oder irgendwelche andren Einstellungen machen ?
Das komplette Projekt anbei noch hier http://www.tfh-wildau.de/marschu/Projekt.zip
In einer Java Anwendung greifen wir per CMP auf Datenbanken zu..was auch alles wunderbar geht. Nun haben wir in der ejb-jar.xml eine Funtkion (Buchung) so konfiguriert, dass die innerhalb einer neuen Transaktion ablaufen soll.
Code:
<assembly-descriptor >
<container-transaction>
<method>
<ejb-name>KontoService</ejb-name>
<method-name>Buchung</method-name>
</method>
<trans-attribute>RequiresNew</trans-attribute>
</container-transaction>
</assembly-descriptor>
In der Funktion selbst wird ein Betrag von einer Datenbank abgebucht und anschliessend auf eine andere Datenbank (auf anderem Rechner) aufgebucht..was auch ohne Probleme funktioniert. Zwischen den beiden Buchungen habe ich per Schleife ein 30sek Break eingebaut. Trenne ich den 30sek die Verbindung zu Datenbank 2 sollte er ja die Buchung an Datenbank 1 per Rollback rückgängig machen..was er aber nicht tut.
Code:
2005-06-24 13:59:03,743 DEBUG [org.jboss.util.NestedThrowable] org.jboss.util.NestedThrowable.parentTraceEnabled=true
2005-06-24 13:59:03,743 DEBUG [org.jboss.util.NestedThrowable] org.jboss.util.NestedThrowable.nestedTraceEnabled=false
2005-06-24 13:59:03,743 DEBUG [org.jboss.util.NestedThrowable] org.jboss.util.NestedThrowable.detectDuplicateNesting=true
2005-06-24 13:59:03,743 ERROR [org.jboss.ejb.plugins.LogInterceptor] TransactionRolledbackException in method: public abstract void DB_2.ejb.Service.interfaces.KontoService.Buchung(java.lang.Integer,java.lang.Integer,java.lang.Double) throws java.rmi.RemoteException, causedBy:
org.jboss.tm.JBossRollbackException: Unable to commit, tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=Ganz_grosses_Damentennis/27, BranchQual=, localId=27] status=STATUS_NO_TRANSACTION; - nested throwable: (javax.ejb.EJBException: Store failed; CausedByException is:
Communication link failure: java.io.EOFException, underlying cause: null
** BEGIN NESTED EXCEPTION **
java.io.EOFException
STACKTRACE:
java.io.EOFException
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1394)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1538)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1929)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2251)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1772)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1619)
at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:316)
at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreEntityCommand.execute(JDBCStoreEntityCommand.java:136)
at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.storeEntity(JDBCStoreManager.java:651)
at org.jboss.ejb.plugins.CMPPersistenceManager.storeEntity(CMPPersistenceManager.java:413)
at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.storeEntity(CachedConnectionInterceptor.java:390)
at org.jboss.ejb.EntityContainer.storeEntity(EntityContainer.java:743)
at org.jboss.ejb.GlobalTxEntityMap$2.synchronize(GlobalTxEntityMap.java:134)
at org.jboss.ejb.GlobalTxEntityMap$GlobalTxSynchronization.synchronize(GlobalTxEntityMap.java:253)
at org.jboss.ejb.GlobalTxEntityMap$GlobalTxSynchronization.beforeCompletion(GlobalTxEntityMap.java:302)
at org.jboss.tm.TransactionImpl.doBeforeCompletion(TransactionImpl.java:1383)
Soll heissen er bucht zwar von DB_1 ab aba nicht auf DB_2 drauf. Genau das soll ja durch die Transaktion verhindert werden. Ich benutze JBOSS 4.0.1. sp1 und MySQL 4.1.10
Muss ich evtl. den JBOSS noch konfigurieren oder irgendwelche andren Einstellungen machen ?
Das komplette Projekt anbei noch hier http://www.tfh-wildau.de/marschu/Projekt.zip