Что означает «ЗАВЕРШЕНО» состояние UserTransaction для журналов Atomikos? - PullRequest
2 голосов
/ 19 декабря 2010


Я использую основные транзакции 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.
Кто-нибудь сталкивался с этим? Как я могу проверить, действительна ли удерживаемая мной пользовательская транзакция для коммита?

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

1 Ответ

2 голосов
/ 20 декабря 2010

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

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

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

Лучший

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...