11.7.4. 자카르타 트랜잭션 트랜잭션 오류 처리

11.7.4.1. 트랜잭션 오류 처리

트랜잭션 오류는 타이밍에 의존하는 경우가 많기 때문에 해결하기 어렵습니다. 다음은 문제 해결을 위한 일반적인 오류와 아이디어입니다.

참고

이러한 지침은 추론적 오류에는 적용되지 않습니다. 복구 오류가 발생하면 트랜잭션 처리에서 Heuristic Outcome을 참조하고 Red Hat 글로벌 지원 서비스에 문의하십시오.

트랜잭션 시간이 초과되었지만 비즈니스 로직 스레드는 확인되지 않았습니다.

이러한 유형의 오류는 Hibernate가 지연 로드를 위한 데이터베이스 연결을 얻을 수 없을 때 나타납니다. 자주 발생하는 경우 시간 초과 값을 늘릴 수 있습니다. 트랜잭션 관리자 구성에 대한 정보는 JBoss EAP 구성 가이드를 참조하십시오.

이 방법이 적합하지 않은 경우 외부 환경을 조정하여 보다 신속하게 수행하거나 코드를 보다 효율적으로 재구성할 수 있습니다. 시간 초과 문제가 있는 경우 Red Hat 글로벌 지원 서비스에 문의하십시오.

트랜잭션이 이미 스레드에서 실행 중이거나 NotSupportedException 예외가 수신됨

NotSupportedException 예외는 일반적으로 Jakarta 트랜잭션 트랜잭션을 중첩하려고 시도했으며 이는 지원되지 않음을 나타냅니다. 트랜잭션을 중첩하지 않으려는 경우 다른 트랜잭션이 스레드 풀 작업에서 시작되었을 가능성이 크지만 트랜잭션을 일시 중단하거나 종료하지 않고 작업을 완료합니다.

일반적으로 애플리케이션에서는 자동으로 처리하는 UserTransaction 을 사용합니다. 그렇지 않으면 프레임워크에 문제가 있을 수 있습니다.

코드가 TransactionManager 또는 Transaction 메서드를 직접 사용하는 경우 트랜잭션을 커밋하거나 롤백할 때 다음 동작을 주의하십시오. 코드가 TransactionManager 메서드를 사용하여 트랜잭션 을 제어하는 경우 트랜잭션을 커밋하거나 롤백하면 현재 스레드의 트랜잭션의 연결이 끊깁니다. 그러나 코드에서 Transaction 메서드를 사용하는 경우 트랜잭션이 실행 중인 스레드와 연결되지 않을 수 있으며 스레드 풀에 반환하기 전에 수동으로 해당 스레드에서 연결을 해제해야 합니다.

두 번째 로컬 리소스를 열거할 수 없습니다.
이 오류는 XA가 아닌 두 번째 리소스를 트랜잭션에 등록하려고 하면 발생합니다. 트랜잭션에 여러 리소스가 필요한 경우 XA여야 합니다.