트랜잭션 유형 및 연결 작동
모든 연결 사용은 글로벌 트랜잭션 또는 로컬 트랜잭션 포함(LTC) 경계 범위 내에서 발생합니다. 각 트랜잭션 유형은 연결에 다른 요구사항을 두고 연결 설정에 다르게 영향을 줍니다.
연결 공유 및 재사용
글로벌 트랜잭션 범위 내에서 연결을 공유할 수 있습니다(기타 공유 규칙을 충족한 것으로 가정). 또한 공유 가능한 LTC 내에서도 연결을 공유할 수 있습니다. LTC 범위 내에서는 연결을 계속해서 재사용할 수 있습니다. 다른 가져오기/사용/닫기 후에 연결 가져오기/사용/닫기(동일한 데이터 소스 또는 연결 팩토리)의 인스턴스를 통해 동일한 연결을 재사용할 수 있습니다. 세부사항은 공유 불가능 및 공유 가능한 연결 주제를 참조하십시오.
JDBC AutoCommit 작동
기본적으로, getConnection()
호출을 통해 처음 확보된 경우, 모든 JDBC 연결은 AutoCommit=TRUE 설정을 포함합니다. 그러나
다른 트랜잭션 범위 및 설정은 AutoCommit 값의 변경 또는 단순한 대체로 이어질 수 있습니다.
- LTC 내에서 조작 중이고 해당 resolution-control을 Application으로 설정할 경우, 애플리케이션에 의해 변경되지 않는 한 AutoCommit는 TRUE 상태로 유지됩니다.
- LTC 내에서 조작 중이고 해당 resolution-control을 ContainerAtBoundary로 설정할 경우, 애플리케이션은 AutoCommit 설정을 변경하지 않아야 합니다. WebSphere® Application Server 런타임은 작업이 시작되기 전에 AutoCommit 값을 FALSE로 설정한 후 LTC 범위 끝에서 해당 작업을 적절하게 커미트하거나 롤백합니다.
- 글로벌 트랜잭션 내에서 연결을 사용할 경우, 데이터베이스는 AutoCommit 설정을 무시하므로 커미트/롤백 처리를 제어하는 트랜잭션 서비스가 트랜잭션을 관리할 수 있습니다. 이 조치는 사용자가 AutoCommit 설정을 변경하는지 여부에 상관없이 작업을 수행하기 위해 연결을 처음 사용할 때 발생합니다. 트랜잭션이 완료된 후에 AutoCommit 값은 연결을 처음 사용하기 전에 가졌던 값으로 리턴됩니다. 따라서 연결이 글로벌 트랜잭션에서 사용되기 전에 AutoCommit 값이 TRUE로 설정되더라도, 데이터베이스가 값을 무시하게 되므로 사용자는 값을 FALSE로 설정할 필요가 없습니다. 이 예에서, 트랜잭션이 완료된 후 연결의 AutoCommit 값은 TRUE로 리턴됩니다.
- 글로벌 트랜잭션 내에 여러 개의 구별되는 연결을 사용하는 경우 모든 작업이 함께 커미트또는 롤백을 보장합니다. 이것은 로컬 트랜잭션 포함(LTC 범위)의 경우는 아닙니다. LTC 내에서 하나의 연결에 대한 작업이 수행되면 LTC 내의 다른 연결에 수행된 작업과는 별도로 커미트되거나 롤백됩니다.
1단계 커미트 및 2단계 커미트 연결
애플리케이션에 의해
액세스되어야 하는 데이터베이스 서버와 같은 자원 관리자의 유형과 수는
종종 애플리케이션 트랜잭션 요구사항을 결정합니다. 결과적으로 각 자원 관리자 유형은
연결 동작에 대한 다른 요구사항을 둡니다.
- 2단계 커미트 자원 관리자는 2단계 트랜잭션 조정을 지원할 수 있습니다. 이러한 지원은 다른 자원 관리자를 포함하는 트랜잭션에 필수입니다. 이러한 트랜잭션은 글로벌 트랜잭션입니다. 추가 설명은 WebSphere Application Server의 트랜잭션 지원 주제를 참조하십시오.
- 1단계 커미트 자원 관리자는 자원이 단일 참여 데이터 저장소인 1단계 트랜잭션 또는 LTC 트랜잭션만 지원합니다. 추가 설명은 WebSphere Application Server의 트랜잭션 지원 주제를 참조하십시오.
1단계 커미트 자원은 1단계 연결에서 수행 중인 작업이 다른 연결과 섞일 수 없고 모든 연결에서 수행된 작업을 완료시키거나 완료하지 못하도록 하는 것입니다. 따라서 제품은 글로벌 트랜잭션에서 둘 이상의 1단계 커미트 연결을 허용하지 않습니다. 게다가 하나 이상의 2단계 커미트 연결을 가진 글로벌 트랜잭션에서 1단계 커미트 연결을 허용하지 않습니다. 하나의 글로벌 트랜잭션 내에서는 여러 개의 2단계 커미트 연결만을 조정할 수 있습니다.
WebSphere Application Server에서는 단일 1단계 커미트 자원이 하나 이상의 2단계 커미트 자원을 가진 글로벌 트랜잭션에 참여할 수 있게 하는 마지막 참여자 지원을 제공합니다.
res-sharing-scope=Unshareable을 지정하는
자원 참조를 사용하여 여러 번 getConnection() 호출을 수행할 때마다
여러 개의 실제 연결을 얻습니다. 이 상황은 공유 규칙 외
res-sharing-scope=Shareable이 준수되지 않을 경우에도 발생합니다. 어떤 경우든
글로벌 트랜잭션에서 실행하는 경우 포함된 자원이 2단계 커미트에 대해
사용 가능한지 확인하십시오(간혹 JTA 사용 가능이라고도 함).
이렇게 하지 못하면 다음 메시지가 로그로 기록되는 XAException이 발생합니다.
WTRN0063E: An illegal attempt to enlist a one phase capable resource with existing two phase capable
resources has occurred.