【问题标题】:What does "TERMINATED" state of UserTransaction mean on Atomikos logs?UserTransaction 的“TERMINATED”状态在 Atomikos 日志上意味着什么?
【发布时间】:2010-12-19 15:58:42
【问题描述】:


我在 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.view.myOtherClass.transformMpr(myOtherClass.java:57) 在 java.util.Observable.notifyObservers(未知 来源)在 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(未知 来源)在 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$Worker.run(未知 来源)在 java.lang.Thread.run(未知来源)

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

谢谢,
伊泰

【问题讨论】:

    标签: java transactions jta atomikos


    【解决方案1】:

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

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

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

    最好的

    【讨论】:

    • 谢谢。如果我可以问两个问题:1)假设它是一个超时(并且一旦我根据您在 Atomikos 论坛中的建议增加超时,它确实消失了)是在 IF 发生之前的 TX Active Xms? 2) 为什么 Atomikos 输出的状态与 JTA 状态表不相关?在我看来,它可能更有帮助和自我解释。再次感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 2017-09-01
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    相关资源
    最近更新 更多