본문 바로가기

Language/자바

2Phase Commit

1. https://github.com/cloudXane/2PC 해당 위치에 2PC 구현한 소스 있음.

2. JTA 표준에 XA를 제공해서 이기종간 DataSource를 제공하는 법이 있다고 함. 이거 확인

3. 개념 설명

    https://dzone.com/articles/xa-transactions-2-phase-commit


4. 참고 자료 

  jeus 2pc example

   http://webcache.googleusercontent.com/search?q=cache:w7eM5TW1mkcJ:technet.tmaxsoft.com/download.do%3FfilePath%3D/nas/technet/technet/upload/kss/tdoc/jeus/2014/02/%26fileName%3DFILE-20140206-000001_140206103400_1.pdf+&cd=1&hl=ko&ct=clnk&gl=kr


* 개념

1. XA Transaction안에 XA Resource들이 묶이게 된다.

2. 첫 번째 단계는 준비단계이다. 각 XA Resource 에게 준비됐는지 물어본다. 이 때, 이미 SQL을 날린 상태겠지.

3. XA Resource 로 부터 OK , ABORT 를 받게되며, 전부 OK이면 XA 매니저는 Commit 명령어를 실행 / 

   ABORT라면 Rollback을 실행.

4. 마지막 Commit 단계에서 완료됐으면, end 메소드를 전송한다.

5. 문제가 발생하는 상황 분석

 5.1 첫 번째 단계에서 protocol 이 시작되기 전에 발생한 에러는 rollback 이나 그 외 나머지를 할 필요없다.

 5.2 준비 단계에서의 실패는 rollback 시키면 됨 (어차피 SQL만 날라간 상태이므로)

 5.3 마지막이 문제인데 Commit 단계에서 일부는 Commit 되고 나머지는 안됬다? 그럼 Recover 를 해야한다.

6. Recover

 6.1 Trancation 매니저는 XA Resource 에게 recover 메소드 명령을 내린다. 

 6.2 XA Resource 는 logs를 추적하고 마지막 상태로 rebuild 한다.

 6.3 하지만 여기에도 예외적인 상황이 있다. 로그가 충돌이 났을 때

 6.4 위 상황에서 트랜잭션 매니저는 휴리스틱한(어림짐작의 방법) 방법을 사용한다.

'Language > 자바' 카테고리의 다른 글

isInstanceOf vs isAssignable  (0) 2016.09.08
Java Stream / marshal, unmarshal / serializable / NIO  (0) 2016.09.05
JVM Locale  (0) 2016.06.23
BCI  (0) 2016.06.09
BTrace  (0) 2016.06.09