Я использую основные транзакции Atomikos в качестве моей ТМ в своем приложении J2SE.
У меня есть следующий код:
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 (Неизвестно
Источник) в
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 (неизвестный источник)
Где строка 57 в myOtherClass
- это строка, где я вызываю commit()
в приведенном выше коде. userTransaction является экземпляром UserTransaction
.
Что я не могу понять, что означает TERMINATED ? Я не смог найти эти классы в дистрибутиве Atomikos (что странно, поскольку их открытый исходный код, и я дополнительно запустил текстовый поиск строки по всем источникам), и прекращение не является одним из состояний, определенных в javax.transaction.Status
.
Кто-нибудь сталкивался с этим? Как я могу проверить, действительна ли удерживаемая мной пользовательская транзакция для коммита?
Спасибо
Еффий