2010-12-19 44 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

相關問題