<XA><XA datasource?>
XA는 2PC(2 phase commit)을 통한 분산 트렌젝션 처리를 위한 X-Open에서 명시한 표준.
예를 들어 Oracle데이타베이스와 IBM DB2 데이타베이스간에 2단계검증을 통한 2PC를 보장하여 트렌젝션을 보장시켜주는 것.

등록 된 하나 이상의 데이터베이스 간에 2PC 트랜잭션이 보장되어야 할 때 XA datasource 사용
하나 이상이 데이터베이스를 접근하더라도, 굳이 트랜잭션이 보장되어야 할 필요성이 없다면 Non-XA-datasource 사용하면 됨



[트랜잭션 수행 단계]

* 2PC
begin -> end -> prepare  -> commit
글로벌 트랜잭션을 하려면 반드시 2PC를 해야만 한다.
글로벌 트랜잭션은 여러 리소스 사이에서 처리하는 작업이기 때문에 "분산" 트랜잭션(Distribute Transaction)이라고도 함. = XA
비 XA 데이터 소스는 자원 관리자 로컬 트랜잭션(RMLT)만을 지원할 수 있으나,
XA 데이터 소스는 로컬 트랜잭션 뿐만 아니라 2단계 커미트 조정을 지원할 수 있다.(?)

* 1PC
begin -> end -> commit
트랜잭션에 참여한 리소스들이 서로 같은 리소스라고 확인이 되었을 경우에는 prepare가 필요없다
위와 같이 처리하는것을 1PC(one-phase-commit)이라고 부름.
이렇게하면 prepare를 안해도 되므로 트랜잭션의 처리 성능 향상에 도움을 줄 수 있다.
따라서 1PC는 트랜잭션 성능 향상(Transaction optimization)의 한 방법이다.
※ 주의할 것은 1PC도 글로벌 트랜잭션이다. 로컬 트랜잭션 아님.


<XA JDBC를 사용하는 이유>
-> JTA를 사용하기 위함임
-> 데이터베이스 두개 이상을 사용하거나, XA스펙을 지원하는 자원일 경우 2단계 커밋 지원 -> 안정적 트랜잭션 처리



개인적 remind

트랜잭션의 모든 연산은 반드시 한꺼번에 완료가 되어야 하며, 그렇지 않은 경우에는 한꺼번에 취소되어야하는 원자성을 지닌다.

* COMMIT
한꺼번에 완료가 된 경우를 말함. 이 경우에는 작업결과는 데이터베이스에 반영.

* ROLLBACK
취소가 된 경우에는 비정상적인 종료. 이경우에는 작업결과는 모두 취소되게 되어 데이터베이스에 영향을 미치지 않음.

* 트랜잭션(Transaction)의 특성
1) 원자성(Atomicity)
분리할 수 없는 하나의 단위로 작업은 모두 완료되거나 모두 취소되어야 한다.
2) 일관성(Consistency)
사용되는 모든 데이터는 일관되어야 한다.
3) 격리성(Isolation)
접근하고있는 데이터는 다른 트랜잭션으로 부터 격리되어야 한다.
트랜잭션이 진행되기 전과 완료된 후에 상태를 볼 수 있지만, 트랜잭션이 진행되는 중간 데이터는 볼 수 없다.
4)영속성(Durability)
트랜잭션이 정상 종료되면 그 결과는 시스템에 영구적으로 적용되어야 한다
5)순차성(Sequentiality)
데이터를 다시 로드하고 트랜잭션을 재생하여 원래 트랜잭션이 수행 된 후 상태로 데이터를 되돌리는 것

+ Recent posts