UserTransaction的“TERMINATED”状态对Atomikos日志意味着什么?

时间:2010-12-19 15:58:43

标签: java transactions jta atomikos


我在我的J2SE应用程序中使用Atomikos基本事务作为我的TM 我有以下代码:

if (userTransaction.getStatus()== Status.STATUS_ACTIVE){
userTransaction.commit();
}

然后我在日志中看到以下异常:

  

java.lang.IllegalStateException:   TM_UNIQUE_NAME0003000006不再有效,但是   处于州终止处   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.view.myOtherClass.transformMpr(myOtherClass.java:57)   在   java.util.Observable.notifyObservers(未知   来源)at   com.mycompany.module.model.myClass.notifyObservers(myClass.java:291)   在   com.mycompany.module.model.myClass.MultiStateEscalation.run(myClass.java:91)   在   java.util.concurrent.Executors $ RunnableAdapter.call(未知   来源)at   java.util.concurrent.FutureTask中$ Sync.innerRun(未知   来源)at   java.util.concurrent.FutureTask.run(未知   来源)at   java.util.concurrent.ScheduledThreadPoolExecutor中的$ ScheduledFutureTask.access $ 301(未知   来源)at   java.util.concurrent.ScheduledThreadPoolExecutor中的$ ScheduledFutureTask.run(未知   来源)at   java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(未知   来源)at   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(未知   来源)at   java.lang.Thread.run(未知来源)

myOtherClass中的第57行是我在上面的代码中调用commit()的行。 userTransaction是UserTransaction的实例 我无法理解的是 TERMINATED 是什么意思?我在Atomikos发行版中找不到这些类(这是因为它们的开源很奇怪,而且我还在所有源上对字符串进行了文本搜索)并且终止不是javax.transaction.Status中定义的状态之一。
有人遇到过这种情况吗?如何检查我持有的userTransaction是否对提交有效?

谢谢,
以太

1 个答案:

答案 0 :(得分:2)

TERMINATED表示已提交或已回滚。在您的情况下,很可能是超时/回滚。

如果可以,请尝试增加超时。

通常,检查事务状态并不能保证下一行代码可以提交。提交是由于超时和资源问题而可能失败的应用程序请求;否则你不需要两阶段提交: - )

最佳