J2SE アプリケーションで Atomikos エッセンシャル トランザクションを TM として使用しています。
次のコードがあります。
if (userTransaction.getStatus()== Status.STATUS_ACTIVE){
userTransaction.commit();
}
そして、ログに次の例外が表示されます。
java.lang.IllegalStateException: TM_UNIQUE_NAME0003000006 はアクティブではなくなりましたが、状態はTERMINATEDです com.atomikos.icatch.imp.CoordinatorImp.addParticipant(CoordinatorImp.java:615) で com.atomikos.icatch.imp.TransactionStateHandler.addParticipant(TransactionStateHandler.java:133) で com.atomikos.icatch.imp.TransactionStateHandler.committed (TransactionStateHandler.java:347) com.atomikos.icatch.imp.TransactionStateHandler.commit(TransactionStateHandler.java:298) com.atomikos.icatch.imp.CompositeTransactionImp.doCommit(CompositeTransactionImp.java:319) com.atomikos. icatch.imp.CompositeTerminatorImp.commit(CompositeTerminatorImp.java:79) com.atomikos.icatch.jta.TransactionImp.commit(TransactionImp.java:236) com.atomikos.icatch.jta.TransactionManagerImp.commit(TransactionManagerImp.java: 496) com.atomikos.icatch.jta.UserTransactionImp.commit(UserTransactionImp.java:129) com.mycompany.module.com.mycompany.module.model.myClass.notifyObservers(myClass.java:291) の java.util.Observable.notifyObservers (不明なソース) の view.myOtherClass.transformMpr(myOtherClass.java:57)。 model.myClass.MultiStateEscalation.run(myClass.java:91) で java.util.concurrent.Executors$RunnableAdapter.call(不明なソース) で java.util.concurrent.FutureTask$Sync.innerRun(不明なソース) で java.util java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301 の .concurrent.FutureTask.run(不明なソース) java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(不明なソース) で java.util.concurrent. ThreadPoolExecutor$Worker.runTask(不明なソース) java.util.concurrent.ThreadPoolExecutor$Worker.run(不明なソース) で java.lang.Thread.実行 (不明なソース)
の 57行目は、上記のコードでmyOtherClass
呼び出す行です。commit()
userTransaction は のインスタンスですUserTransaction
。私が理解できないのは、 TERMINATED
と
はどういう意味ですか? Atomikos ディストリビューションでこれらのクラスを見つけることができませんでした (これらのクラスはオープン ソースであり、さらにすべてのソースで文字列のテキスト検索を実行したため奇妙です)、終了は で定義されているステータスの 1 つではありません。
誰かがこれに遭遇しましたか?保持している userTransaction が commit に対して有効かどうかを確認するにはどうすればよいですか? javax.transaction.Status
ありがとう、
イッタイ