2010-12-19 67 views
2


我在我的J2SE应用程序中使用Atomikos基本事务作为我的TM。
我有以下代码:Atomikos日志中UserTransaction的“TERMINATED”状态是什么意思?

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

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

java.lang.IllegalStateException: TM_UNIQUE_NAME0003000006处于状态TERMINATED不再有效,但 at com.atomikos.icatch.imp.CoordinatorImp.addParticipant(CoordinatorImp.java:615) at com.atomikos.icatch.imp.TransactionStateHandler.addPartic ipant(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) at com.atomikos.icatch.jta.TransactionManagerImp.commit(TransactionManagerImp.java:496) at 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.Futur eTask.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行是我称之为的行上述代码中的。 userTransaction是UserTransaction的一个实例。
我不明白的是TERMINATED是什么意思?我无法在Atomikos发行版中找到这些类(这是奇怪的,因为它们的开放源代码和我另外为所有源文件搜索字符串)并终止并不是在javax.transaction.Status中定义的状态之一。
有没有人发生这种情况?我如何检查我所持有的userTransaction是否对提交有效?

感谢,
以太

回答

2

提交或回滚TERMINATED手段。在你的情况下,最有可能的超时/回滚。

尝试增加超时时间,如果可以的话。

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

最好

+0

谢谢。两个问题,如果我可以:1)假设这是一个超时(并根据您在Atomikos论坛的建议增加超时,它确实消失)是在发生'IF'之前的TX Active Xms? 2)为什么Atomikos输出一个不与JTA状态表相关的状态?在我看来,这可能会更有帮助和自我解释。再次感谢您的输入。 – Ittai 2010-12-21 07:09:13

相关问题