Ich verwende Atomikos wesentliche Transaktionen als mein TM in meiner J2SE-Anwendung.
Ich habe den folgenden Code:Was bedeutet der Status "TERMINATED" von UserTransaction in Atomikos-Protokollen?
if (userTransaction.getStatus()== Status.STATUS_ACTIVE){
userTransaction.commit();
}
und dann die folgende Ausnahme in den Protokollen sehe ich:
java.lang.IllegalStateException: TM_UNIQUE_NAME0003000006 ist nicht mehr aktiv, aber im Zustand BEENDET unter com.atomikos.icatch.imp.CoordinatorImp.addParticipant (CoordinatorImp.java:615) um com.atomikos.icatch.imp.TransactionStateHandler.addPartic ipant (TransactionStateHandler.java:133) bei com.atomikos.icatch.imp.TransactionStateHandler.committed (TransactionStateHandler.java:347) bei com.atomikos.icatch.imp.TransactionStateHandler.commit (TransactionStateHandler.java:298) bei com.atomikos.icatch.imp.CompositeTransactionImp.doCommit (CompositeTransactionImp.java:319) bei com.atomikos.icatch.imp.CompositeTerminatorImp.commit (CompositeTerminatorImp.java:79) bei com.atomikos.icatch .jta.TransactionImp.commit (TransactionImp.java:236) um com.atomikos.icatch.jta.TransactionManagerImp.commit (TransactionManagerImp.java:496) um com.atomikos.icatch.jta.UserTransactionImp.commit (UserTransactionImp.java:129) bei com.mycompany.module.view.myOtherClass.transformMpr (myOtherClass.java:57) bei java.util.Observable.notifyObservers (Unbekannt Quelle) bei com.mycompany.module.model.myClass.notifyObservers (myClass.java:291) bei com.mycompany.module.model.myClass.MultiStateEscalation.run (myClass.java:91) bei java.util.concurrent.Executors $ RunnableAdapter.call (Unbekannt Quelle) bei java.util.concurrent.FutureTask $ Sync.innerRun (Unbekannt Quelle) bei java.util.concurrent.Futur eTask.run (Unbekannt Quelle) bei java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access 301 $ (Unbekannt Quelle) bei java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (Unbekannt Quelle) bei java.util .concurrent.ThreadPoolExecutor $ Worker.runTask (Unbekannt Quelle) bei java.util.concurrent.ThreadPoolExecutor $ Worker.run (Unbekannt Quelle) bei java.lang.Thread.run (Unknown Source)
Wo Zeile 57 in der myOtherClass
ist die Zeile, wo ichaufrufenim obigen Code. userTransaction ist eine Instanz von UserTransaction
.
Was ich nicht verstehen kann ist, was bedeutet TERMINATED bedeutet? Ich konnte diese Klassen in der Atomikos-Verteilung nicht finden (was seltsam ist, da ihre Open Source und ich zusätzlich eine Textsuche für die Zeichenfolge über alle Quellen ausgeführt haben) und beendet ist nicht einer der in javax.transaction.Status
definierten Status.
Hat jemand das gefunden? Wie kann ich überprüfen, ob die userTransaction, die ich halte, für das Commit gültig ist?
Danke,
Ittai
Danke. Zwei Fragen, wenn ich darf: 1) Angenommen, es war ein Timeout (und es ging weg, sobald ich das Timeout aufgrund Ihrer Vorschläge im Atomikos-Forum erhöhte) war das TX Active Xms vor, als das 'IF' stattfand? 2) Warum gibt Atomikos einen Zustand aus, der nicht mit der JTA Statustabelle korreliert? Es könnte meiner Meinung nach viel hilfreicher und selbsterklärender sein. Nochmals vielen Dank für Ihre Eingabe. – Ittai