Я использую основные транзакции Atomikos в качестве TM в моем приложении J2SE.
У меня есть следующий код:
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.comHandler:29.java.java.java.stateHandler.commit (транзакция). .atomikos.icatch.imp.CompositeTransactionImp.doCommit (CompositeTransactionImp.java:319) в com.atomikos.icatch.imp.CompositeTerminatorImp.commit (CompositeTerminatorImp.java:79) в com.atomikos.icatch.jta.Transaction .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. runTask (Неизвестный источник) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (Неизвестный источник) в java.lang.Thread.run (Неизвестный источник)
Где строка 57 в myOtherClass
- это строка, в которой я вызываю commit()
в приведенном выше коде. userTransaction - это экземпляр UserTransaction
.
Я не могу понять, что означает ПРЕКРАЩЕННЫЙ? Мне не удалось найти эти классы в дистрибутиве Atomikos (что странно, поскольку их исходный код открыт, и я дополнительно выполнил текстовый поиск строки по всем источникам), и завершение не является одним из статусов, определенных в javax.transaction.Status
.
Имеет кто-то сталкивался с этим? Как я могу проверить, действительна ли удерживаемая мной userTransaction для фиксации?
Спасибо,
Иттай