首页 文章

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

提问于
浏览
2

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

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

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

java.lang.IllegalStateException:TM_UNIQUE_NAME0003000006不再处于活动状态,但处于com.atomikos.icatch.imp.TransactionStateHandler.addParticipant(TransactionStateHandler)的com.atomikos.icatch.imp.CoordinatorImp.addParticipant(CoordinatorImp.java:615)的状态TERMINATED中 . java:133)at com.atomikos.icatch.imp.TransactionStateHandler.committed(TransactionStateHandler.java:347)at com.atomikos.icatch.imp.TransactionStateHandler.commit(TransactionStateHandler.java:298)at com.atomikos.icatch.imp .CompositeTransactionImp.doCommit(CompositeTransactionImp.java:319)at com.atomikos.icatch.imp.CompositeTerminatorImp.commit(CompositeTerminatorImp.java:79)at com.atomikos.icatch.jta.TransactionImp.commit(TransactionImp.java:236)at com.atomikos.icatch.jta.TransactionManagerImp.commit(TransactionManagerImp.java:496)位于com.mycompany.module.view.myOtherClass.transformMpr的com.atomikos.icatch.jta.UserTransactionImp.commit(UserTransactionImp.java:129) myOtherClass.java:57)在java.util.Observable com.mycompany.module.model.myClass.notifyObservers(myClass.java:291)中的.notifyObservers(未知来源),位于java.util的com.mycompany.module.model.myClass.MultiStateEscalation.run(myClass.java:91) .concurrent.Executors $ RunnableAdapter.call(未知来源)java.util.concurrent.FutureTask $ Sync.innerRun(未知来源)java.util.concurrent.FutureTask.run(未知来源)java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 301(未知来源)java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(未知来源)java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(未知来源)java.util.concurrent.ThreadPoolExecutor $ java.lang.Thread.run上的Worker.run(未知来源)(未知来源)

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

谢谢,
以太

1 回答

  • 2

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

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

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

    最好

相关问题