2010-12-19 4 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 com.atomikos.icatch.imp.TransactionStateHandler.commit에서 com.atomikos.icatch.imp.TransactionStateHandler.committed (TransactionStateHandler.java:347)에서 (TransactionStateHandler.java:133) (TransactionStateHandler.java:298) com.atomikos.icatch에서 com.atomikos.icatch.imp.CompositeTransactionImp.doCommit com.atomikos.icatch.imp.CompositeTerminatorImp.commit (CompositeTerminatorImp.java:79)에서 (CompositeTransactionImp.java:319) 에서 .jta.TransactionImp.commit (TransactionImp.java:236) at com.atomikos.icatch.jta.TransactionManagerImp.commit (TransactionManagerImp.java:496) at java.util.Observable.notifyObservers에서com.atomikos.icatch.jta.UserTransactionImp.commit com.mycompany.module.view.myOtherClass.transformMpr (myOtherClass.java:57)에서 (UserTransactionImp.java:129) com.mycompany.module.model.myClass.MultiStateEscalation.run (myClass.java:91)에서 com.mycompany.module.model.myClass.notifyObservers (myClass.java:291)에서 (알 소스)에 java.util.concurrent.Executors $ RunnableAdapter.call java.util.concurrent.Futur에서 java.util.concurrent.FutureTask $ Sync.innerRun (알 소스)에서 (알 소스) eTask.run 있는 java.util에서 java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (알 소스)에서 $ 301 (알 소스) java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access에서 (알 소스) java.lang.Thread.run에서 java.util.concurrent.ThreadPoolExecutor $ Worker.run (알 소스) (알 수없는 소스)

에서 .concurrent.ThreadPoolExecutor $ Worker.runTask (알 소스) 여기서 myOtherClass의 57 번째 줄은 내가 전화하는 곳입니다.위의 코드에서. userTransaction은 UserTransaction의 인스턴스입니다.
내가 이해할 수없는 것은 무엇입니까 종료 됨을 의미합니까? Atomikos 배포판에서이 클래스를 찾을 수 없었습니다. 오픈 소스 이후로 이상하게 보였습니다. 모든 소스에서 문자열을 텍스트로 검색하여 실행했습니다. 종료 된 문자열은 javax.transaction.Status에 정의 된 상태 중 하나가 아닙니다.
누군가이 문제가 발생 했습니까? 보유하고있는 userTransaction이 커밋에 유효한지 어떻게 확인할 수 있습니까?

감사합니다,


잇대

답변

2
최선을 다하고 있습니다 또는 롤백

TERMINATED 의미합니다. 귀하의 경우에는 시간 초과/롤백 가능성이 큽니다.

가능한 경우 시간 초과를 늘리십시오.

일반적으로 트랜잭션 상태를 검사한다고해서 다음 코드 행이 커밋 될 수 있다고 보장 할 수는 없습니다. 커밋은 시간 초과 및 리소스 문제로 인해 실패 할 수있는 응용 프로그램 요청입니다. 그렇지 않으면

최저

+0

감사합니다 :-) 2 단계 커밋이 필요하지 않을 것입니다. 1) 그것이 타임 아웃이라고 가정 할 때 두 가지 질문이 있습니다. Atomikos 포럼의 제안에 따라 타임 아웃을 늘리면 시간이 초과되었습니다. TX IF Xms 이전에 'IF'가 발생 했습니까? 2) Atomikos가 JTA 상태 테이블에 중재하지 않는 상태를 출력하는 이유는 무엇입니까? 그것은 내 의견으로는 훨씬 더 유익하고 자명 할 수 있습니다. 입력 해 주셔서 다시 한 번 감사드립니다. – Ittai