동일한 트랜잭션의 1단계 및 2단계 커미트 가능 자원에 대한 액세스 조정
마지막 참가자 지원을 사용하면 동일한 글로벌 트랜잭션에서 원하는 수의 2단계 커미트 가능 자원이 포함된 한 개의 1단계 커미트 가능 자원 사용이 가능합니다. 동일한 트랜잭션에서 1단계 커미트 자원을 포함한 다중 상호작용이 있을 수 있지만, 이러한 자원 하나만을 포함할 수 있습니다.
트랜잭션 커미트 시, 먼저 2단계 커미트 프로토콜을 사용하여 2단계 커미트 자원이 준비되며, 이 작업에 성공하면 커미트를 위해 1단계 커미트 자원을 호출합니다. 그런 다음 2단계 커미트 자원은 1단계 커미트 자원의 응답에 따라 커미트되거나 롤백됩니다.
- 기본 시나리오는 1단계 커미트 자원 제공자가 트랜잭션을 시작하는
애플리케이션 서버 프로세스("트랜잭션 루트" 서버)에서 액세스되는
경우입니다.
이 시나리오에서는 마지막 참여자 지원이 동일한 트랜잭션의 1단계 커미트 가능 자원과 여러 2단계 커미트 가능 자원을 조정할 수 있습니다.
- 예를 들어, EJB 구현이 1단계 커미트 자원 제공자에 액세스하는 원격 EJB 인터페이스에서의
트랜잭션 호출 결과로, 1단계 커미트 자원 제공자가 트랜잭션이 시작된 서버와
다른 애플리케이션 서버("트랜잭션 하위" 서버)에서 액세스되는 경우.
이 시나리오에서는 일반적으로 트랜잭션을 커미트할 수 없습니다. 트랜잭션 하위 서버에 포함된 1단계 커미트 자원을 글로벌 트랜잭션의 일부로 커미트할 수 있으려면 트랜잭션 서비스가 조정 책임을 트랜잭션 루트에서 하위 서버로 위임해야 합니다. 이 경우는 트랜잭션 루트 서버에 다른 자원이 등록되지 않은 경우에만 발생합니다.
마지막 참여자 지원은 트랜잭션에 경험적인 결과의 위험 증가를 초래합니다. 즉, 트랜잭션 관리자는 모든 자원이 동일한 방향으로 완료되었는지 확신할 수 없습니다(커미트 또는 롤백된 경우). 이러한 이유로, 애플리케이션이 동일한 트랜잭션의 1단계와 2단계 커미트 가능 자원에 대한 액세스를 조정할 수 있도록 하려면 발견적 위험, 즉 경험적인 결과의 위험 증가를 승인하도록 애플리케이션을 구성합니다.
트랜잭션 서비스(JTS)가 1단계 커미트 자원에 대한 커미트 1단계 플로우에서 어떤 응답도 수신하지 못한 경우 경험적인 결과가 발생합니다. 이 상황에서 트랜잭션 서비스는 1단계 커미트 자원의 변경사항이 커미트되었는지 롤백되었는지를 결정할 수 없으므로, 다른 2단계 커미트 자원에 있는 글로벌 트랜잭션의 올바른 결과를 신뢰할 수 있게 이끌어낼 수 없습니다.
경험적 위험을 승인하도록 애플리케이션 서버에 대한 트랜잭션 서비스를 구성하거나 경험적 위험을 승인하도록 개별적으로 애플리케이션을 구성할 수 있습니다. 애플리케이션이 어셈블될 때 또는 애플리케이션이 배치된 후에 애플리케이션을 개별적으로 구성할 수 있습니다.
- 1단계 커미트 자원을 커미트할지 묻는 경우 활동 로그에 경험적 결과가 보고됩니다.
- 1단계 커미트 자원을 커미트할지 묻지 않은 경우 이 트랜잭션은 계속 롤백됩니다.
1단계 및 2단계 커미트 자원을 모두 포함하는 트랜잭션 예외
1단계 및 2단계 커미트 자원을 포함하는 트랜잭션에 의해 발생할 수 있는 예외는 2단계 커미트 자원만을 포함하여 트랜잭션에 의해 발생할 수 있는 예외와 같습니다.
발생 가능한 예외는 WebSphere Application Server Information Center의 API(Application Programming Interface) 참조 정보에 나열되어 있습니다.