2017-01-18 1 views
0

JBoss 6.1.0에 큰 문제가 있습니다. 다중 스레드 응용 프로그램이며 BMT 및 Sybase DB와 함께 상태 비 저장 EJB를 사용하고 있습니다. 사용 된 JDK는 1.7.76u입니다. 사용자 트랜잭션이 시작되었습니다. 쿼리가 실행되었지만 관련된 스레드가 한 시간 후에 커밋을 시도합니다. 실행중인 스레드에 어떤 일이 발생했는지 알지 못합니다. 코드에서 중단 된 것은 아니지만 일시 중지되었습니다.JBoss 6.1.0에서 오랫동안 트랜잭션이 중단 된 스레드

아무도 스레드가 한 시간 이상 중단 된 이유에 대해 중요한 포인터를 제공 할 수 있습니까? 분명히 한 시간이 지나면 스레드 재개 및 COMMIT 또는 ROLLBACK 중 하나를 시도하는 것은 실패하고 기본 트랜잭션 타임 아웃이 300 초 (JBoss 6 기본값)이므로 실패합니다.

2017-01-09 10:01:49,389 DEBUG [TestDAO] [EventId: ] [pool-63-thread-6] SQL SELECT QUERY 
2017-01-09 10:01:49,391 DEBUG [TestDAO] [EventId: ] [pool-63-thread-6] ['dao.rowsProcessed']: 1 rows processed 
2017-01-09 10:01:49,389 DEBUG [TestDAO] [EventId: ] [pool-63-thread-6] SQL UPDATE QUERY 
2017-01-09 10:01:49,391 DEBUG [TestDAO] [EventId: ] [pool-63-thread-6] ['dao.rowsUpdated']: 1 row updated 
2017-01-09 11:05:48,213 DEBUG [DAOUtils] [EventId: ] [pool-63-thread-6] commitTx 
2017-01-09 11:05:48,214 ERROR [DAOUtils] [EventId: ] [pool-63-thread-6] commitTx() ARJUNA-16063 The transaction is not active! 
2017-01-09 11:05:48,215 DEBUG [DAOUtils] [EventId: ] [pool-63-thread-6] rollbackTx 
2017-01-09 11:05:48,215 ERROR [DAOUtils] [EventId: ] [pool-63-thread-6] rollbackTx() java.lang.IllegalStateException - BaseTransaction.rollback - ARJUNA-16074 no transaction! 

답변

0

시간이 초과 된 트랜잭션은 오래 실행 한 것 같습니다.

"거래가 활성화되지 않았습니다!" 트랜잭션 시간 초과로 인해 발생합니다. 트랜잭션 시간이 초과되면 트랜잭션 관리자가 트랜잭션을 비동기 적으로 롤백 한 후, 트랜잭션에 다시 액세스하려고 할 때 (예 : 커밋하거나 롤백) JTA 사양에 따라 트랜잭션을 다시 액세스하려고 시도 할 수 없습니다.

응용 프로그램 서버 구성의 "transactions"하위 시스템에서 "default-timeout"속성에 기본 트랜잭션 시간 초과가 정의되었습니다.

  • 기본값은 300 초/5 분입니다.

  • 값을 수정하여 기본 트랜잭션 시간 초과를 늘릴 수 있습니다.

  • 트랜잭션 리퍼/트랜잭션 시간 초과를 비활성화하려면이 값을 0으로 설정할 수 있습니다.

기본 시간 초과 변경 사항을 적용하려면 응용 프로그램 서버 VM을 다시 시작해야합니다.

<subsystem xmlns="urn:jboss:domain:transactions:1.4"> 
    <coordinator-environment default-timeout="300"/> <!-- HERE --> 
</subsystem> 

그것은 그것의 트랜잭션이 시간 초과되어 있으므로이 메시지를 처리하는 데 5 분 이상이 걸리는 당신처럼 나에게 보인다.

이 상황을 피하기 위해 트랜잭션 시간 제한을 더 높게 설정하는 것이 좋습니다. 트랜잭션을 완료하는 데 걸리는 시간을 줄이기 위해 애플리케이션 코드를 리팩토링 할 수 있다면 좋을 것입니다. 따라서 응용 프로그램 논리가이 시나리오를 올바르게 처리하고있을 수 있습니다.

+0

많은 감사합니다. JBoss 개발자 사이트에서도 저에게 답변 해 주셨기를 바랍니다. 나는 당신에게 문제에 대한 설명을 자세하게 답했다. https://developer.jboss.org/thread/273677 이것은 매우 산발적 인 문제이며 이것이 JBoss의 환경이나 런타임 문제와 관련 될 수 있다고 생각됩니다. 어떤 힌트라도 도움이 될 것입니다. – sridhar

0

JBoss 포럼에서 언급했듯이 트랜잭션 시간 초과에는 문제가 없습니다. 데이터베이스의 잠금이 트랜잭션에 의해 유지되므로 다른 모든 응용 프로그램을 차단하므로 트랜잭션 시간 초과를 연장 할 필요가 없습니다.

트랜잭션을 실행하는 스레드는 고정되어 있습니다. 이 스레드가 커밋되지 않도록 차단 된 이유에 대한 힌트가 있으면 큰 도움이됩니다.

RGDS Manohar 응답 .. 아누 프에 대한