트랜잭션 관련 질문
- 작성자 :
- 박*철
- 작성일 :
- 2015-02-06 15:00:25
- 조회수 :
- 852
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
안녕하세요.
매번 친절한 답변 감사합니다.
많은 도움이 되고 있네요 ^^
개념적인 질문인데요.
분산 트랜잭션을 처리하기 위해서는 JTA를 사용해서 해결한다.
여기서 말하는 분산 트랜잭션이란 서버 한대에 여러 대의 디비 연결에 대한 트랜잭션을 보장하는 것을 말하는 것입니다.
그리고 리모트 서버 호출을 하기 위해서는 RMI를 사용한다.
아래와 같은 구조이죠
DB a서버< ---> 서버 A <-----------------> 서버 B <-------> DB b 서버
여기서 서버A와 서버B의 서비스 호출은 RMI를 통해 구현할 수 있습니다.
위와 같은 RMI 환경에서의 트랜잭션 보장을 구현하려면 어떻게 해야 힐까요?
(단 서버A는 DB b 서버를 직접 바라볼수 없습니다.)
이런 환경에서도 트랜잭션 보장
( 즉 서버 A의 서비스가 서버 B의 서비스를 호출 성공적으로 한 후에 다시 서버 A서비스에서 에러가 발생했을 때 전에 호출 했던
서버 B의 서비스가 롤백되어야 하는 상황...)
이런 상황도 분산 트랜잭션이라고 말하는게 맞는지... 연계인지 분산 트랜잭션인지..
만약 분산트랜잭션이라면 JTA나 JOTM으로 위와 같은 상황의 트랜잭션을 보장 받을 수 있는지..
궁금합니다.
JOTM 설정을 하다가.. 과연 위와 같은 상황에서 트랜잭션을 보장 받을수 있을지 의문이 생겨서
처음부터 개념을 잘못 잡았나 싶어서 질문 드립니다.
매번 성의있는 답변 감사드립니다 (__)
매번 친절한 답변 감사합니다.
많은 도움이 되고 있네요 ^^
개념적인 질문인데요.
분산 트랜잭션을 처리하기 위해서는 JTA를 사용해서 해결한다.
여기서 말하는 분산 트랜잭션이란 서버 한대에 여러 대의 디비 연결에 대한 트랜잭션을 보장하는 것을 말하는 것입니다.
그리고 리모트 서버 호출을 하기 위해서는 RMI를 사용한다.
아래와 같은 구조이죠
DB a서버< ---> 서버 A <-----------------> 서버 B <-------> DB b 서버
여기서 서버A와 서버B의 서비스 호출은 RMI를 통해 구현할 수 있습니다.
위와 같은 RMI 환경에서의 트랜잭션 보장을 구현하려면 어떻게 해야 힐까요?
(단 서버A는 DB b 서버를 직접 바라볼수 없습니다.)
이런 환경에서도 트랜잭션 보장
( 즉 서버 A의 서비스가 서버 B의 서비스를 호출 성공적으로 한 후에 다시 서버 A서비스에서 에러가 발생했을 때 전에 호출 했던
서버 B의 서비스가 롤백되어야 하는 상황...)
이런 상황도 분산 트랜잭션이라고 말하는게 맞는지... 연계인지 분산 트랜잭션인지..
만약 분산트랜잭션이라면 JTA나 JOTM으로 위와 같은 상황의 트랜잭션을 보장 받을 수 있는지..
궁금합니다.
JOTM 설정을 하다가.. 과연 위와 같은 상황에서 트랜잭션을 보장 받을수 있을지 의문이 생겨서
처음부터 개념을 잘못 잡았나 싶어서 질문 드립니다.
매번 성의있는 답변 감사드립니다 (__)
A
안녕하세요. 박승철님.
세부적인 부분은 인터넷 등을 통해 직접 확인해 보셔야 하지만, 개념적으로 설명 드리겠습니다.
(구현이 쉽지는 않으며, JDBC의 XA Driver들은 이 XAResource를 구현하는 형태로 XA를 지원합니다.)
RMI 호출을 포함하여 JTA를 통해 global transaction(distributed transaction)을 처리하시기 위해서는 JTA의 XAResource 인터페이스(javax.transaction.xa 패키지)를 구현하신 후에 WAS 상에 등록을 하는 방식입니다.
이 경우 Spring의 AOP 방식을 사용하시게 되면, RMI 내부적으로 transaction이 처리되기 때문에 UserTransaction을 통한 API 방식으로 직접 DB 처리에 대한 transaction도 관리하셔야 합니다.
(eg. XAResource의 commit 메소드의 경우 UserTransaction을 commit하는 코드 포함)
그럼, 즐거운 하루되십시오.
감사합니다.
세부적인 부분은 인터넷 등을 통해 직접 확인해 보셔야 하지만, 개념적으로 설명 드리겠습니다.
(구현이 쉽지는 않으며, JDBC의 XA Driver들은 이 XAResource를 구현하는 형태로 XA를 지원합니다.)
RMI 호출을 포함하여 JTA를 통해 global transaction(distributed transaction)을 처리하시기 위해서는 JTA의 XAResource 인터페이스(javax.transaction.xa 패키지)를 구현하신 후에 WAS 상에 등록을 하는 방식입니다.
이 경우 Spring의 AOP 방식을 사용하시게 되면, RMI 내부적으로 transaction이 처리되기 때문에 UserTransaction을 통한 API 방식으로 직접 DB 처리에 대한 transaction도 관리하셔야 합니다.
(eg. XAResource의 commit 메소드의 경우 UserTransaction을 commit하는 코드 포함)
그럼, 즐거운 하루되십시오.
감사합니다.