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 |