서비스임플에서의 트랜젝션 문의
- 작성자 :
- 박*원
- 작성일 :
- 2014-10-28 16:24:20
- 조회수 :
- 609
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
서비스임플에서 dao를 4개를 호출하다가 3번째실행되고 4번째 실행되기전에
접속이 끊겨서 4번째 dao는 실행이 안대고 3번째 dao만 롤백이 되었습니다.
1,2번 dao는 같은 dao파일에 있고 3,4번 dao는 다른 dao파일에 있습니다.
질문: 같은서비스 임플에서 호출하는 dao는 같은 dao파일에 있어야 트랜젝션이
1,2,3,4 호출에 적용되나요?
접속이 끊겨서 4번째 dao는 실행이 안대고 3번째 dao만 롤백이 되었습니다.
1,2번 dao는 같은 dao파일에 있고 3,4번 dao는 다른 dao파일에 있습니다.
질문: 같은서비스 임플에서 호출하는 dao는 같은 dao파일에 있어야 트랜젝션이
1,2,3,4 호출에 적용되나요?
A
안녕하세요. 박두원님.
AOP 설정이나 @Transactional 사용에 따라 다르지만,
보통 ServiceImpl 부분에 transaction을 지정하기 때문에 하나의 서비스에서 여러 DAO를 호출하는 경우 전체가 transaction 영역으로 묶이도록 되어 있습니다. DAO가 여러 개의 DAO 클래스로 분리되어 있어도 동일합니다.
다만, 여러 DAO가 각기 다른 DataSource를 참조한다면, 설정에 따라 Global transaction(2PC) 방식으로 묶이거나 둘 중 하나만 transaction 처리가 됩니다.
설명하는 내용으로는 일단 하나의 DataSource를 참조하신 경우라면, 1, 2, 3번이 같이 rollback되거나, 전체가 되지 않아야 합니다.
3번만 rollback이 되셔다면 여러 DataSource를 참조하신 경우 같습니다.
이 경우는 Global transaction을 처리하기 위한 JTA 방식으로 변경하여 합니다.
해당 방법은 WAS별로 다르기 때문에, WAS쪽 문서를 참조하시면 되실 것 같습니다.
위 경우라 아니시면, 설정된 transaction 정보나 오류 상황에서의 trace 등을 올려주십시오.
그럼, 즐거운 하루되십시오.
감사합니다.
AOP 설정이나 @Transactional 사용에 따라 다르지만,
보통 ServiceImpl 부분에 transaction을 지정하기 때문에 하나의 서비스에서 여러 DAO를 호출하는 경우 전체가 transaction 영역으로 묶이도록 되어 있습니다. DAO가 여러 개의 DAO 클래스로 분리되어 있어도 동일합니다.
다만, 여러 DAO가 각기 다른 DataSource를 참조한다면, 설정에 따라 Global transaction(2PC) 방식으로 묶이거나 둘 중 하나만 transaction 처리가 됩니다.
설명하는 내용으로는 일단 하나의 DataSource를 참조하신 경우라면, 1, 2, 3번이 같이 rollback되거나, 전체가 되지 않아야 합니다.
3번만 rollback이 되셔다면 여러 DataSource를 참조하신 경우 같습니다.
이 경우는 Global transaction을 처리하기 위한 JTA 방식으로 변경하여 합니다.
해당 방법은 WAS별로 다르기 때문에, WAS쪽 문서를 참조하시면 되실 것 같습니다.
위 경우라 아니시면, 설정된 transaction 정보나 오류 상황에서의 trace 등을 올려주십시오.
그럼, 즐거운 하루되십시오.
감사합니다.