2010-12-19 2 views
2


Я использую основные транзакции Atomicos как мой TM в своем приложении J2SE.
У меня есть следующий код:Что означает «TERMINATED» состояние UserTransaction в журналах Atomikos?

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.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) по адресу 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.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 (Unknown Source)

Если строка 57 в myOtherClass является линией, в которой я звоню commit() в приведенном выше коде. userTransaction - это пример UserTransaction.
Что я не могу понять, то, что делает TERMINATED означает? Я не мог найти эти классы в дистрибутиве Atomikos (что странно с их открытым исходным кодом, и я дополнительно выполнил текстовый поиск для строки по всем источникам) и завершен не является одним из статусов, определенных в javax.transaction.Status.
Неужели кто-то это сказал? Как я могу проверить, является ли пользовательское транзакционное ядро ​​действительным для фиксации?

Спасибо,
Еффей

ответ

2

TERMINATED средства фиксации или отката. В вашем случае, скорее всего, тайм-аут/откат.

Попробуйте увеличить тайм-аут, если сможете.

В целом проверка состояния транзакции не гарантирует фиксацию следующей строки кода. Committing - это запрос приложения, который может выйти из строя из-за тайм-аутов и проблем с ресурсами; в противном случае вам не нужна двухфазная фиксация :-)

Лучшее

+0

Спасибо. Два вопроса, если можно: 1) Предполагая, что это был тайм-аут (и он ушел, как только я увеличил тайм-аут на основе ваших предложений на форуме Atomikos), был TX Active Xms до того, когда произошел «IF»? 2) Почему Atomicos выводит состояние, которое не привязано к таблице состояния JTA? На мой взгляд, это может быть гораздо более полезным и самоочевидным. Еще раз спасибо за ваш вклад. – Ittai

Смежные вопросы