exception 발생 시 트랜잭션 rollback 관련 문의드립니다.
- 작성자 :
- 김*진
- 작성일 :
- 2022-04-28 11:33:21
- 조회수 :
- 1,763
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
안녕하세요, exception 발생 시 트랜잭션 rollback 관련 문의드립니다.
현재 aop 사용하여 트랜잭션 관리 중입니다.
<tx:advice ~>
<tx:attribute>
<tx:method name="*" rollback-for="Exception"/>
...
<aop:config>
<aop:popintcut ... expression="excution(......Impl.*(..))"
<aop:acvisor advice-ref="txAdvice" pointcut-ref="requiredTx"/>
</aop:config>
이렇게 설정되어 있고, 제가 문의드리고 싶은 함수 두 개는 annotaion을 이용하여
@Transaction(isolation=Isolation.SERIALIZABLE, propagation=Propagation.REQUIRED, rollbackFor=Exception)
public void cancel()
@Transaction(isolation=Isolation.SERIALIZABLE, propagation=Propagation.REQUIRES_NEW, rollbackFor=Exception)
public void reserve()
이렇게 사용되고 있습니다.
우선, aop와 annotaion은 동시 사용이 불가능하다는 답변글을 봤는데 그렇다면 지금 선언된 annotaion은 결국 아무런 기능을 하지 못하는 건지 궁금합니다.
추가로, reserve() 함수에서 pay() 함수를 호출하는 도중, pay() 함수 내에서 exception이 발생하였고,
catch 문에서 해당 exception을 던지지 않고 e.printStackTrace()로 출력만 하게끔 해놨는데 reserve() 내의 모든 transaction이 rollback 되었습니다.
반면 cancel() 함수에서 실행 도중 exception이 발생하여 catch문에서 e.printStackTrace()로 출력만 하게끔 해놨는데 이 함수 내의 다른 transaction은 또 정상 실행이 되었습니다.
왜 reserve() 함수는 rollback 되었고, cancel() 함수는 롤백되지 않았는지에 대해서 문의드립니다.
reserve() 함수 내에서 호출한 pay() 함수가 exception을 던지던 던지지않던 rollback 되었는데,
cancel() 함수는 exception을 던져야만 모든 transcation이 롤백됩니다.
현재 aop 사용하여 트랜잭션 관리 중입니다.
<tx:advice ~>
<tx:attribute>
<tx:method name="*" rollback-for="Exception"/>
...
<aop:config>
<aop:popintcut ... expression="excution(......Impl.*(..))"
<aop:acvisor advice-ref="txAdvice" pointcut-ref="requiredTx"/>
</aop:config>
이렇게 설정되어 있고, 제가 문의드리고 싶은 함수 두 개는 annotaion을 이용하여
@Transaction(isolation=Isolation.SERIALIZABLE, propagation=Propagation.REQUIRED, rollbackFor=Exception)
public void cancel()
@Transaction(isolation=Isolation.SERIALIZABLE, propagation=Propagation.REQUIRES_NEW, rollbackFor=Exception)
public void reserve()
이렇게 사용되고 있습니다.
우선, aop와 annotaion은 동시 사용이 불가능하다는 답변글을 봤는데 그렇다면 지금 선언된 annotaion은 결국 아무런 기능을 하지 못하는 건지 궁금합니다.
추가로, reserve() 함수에서 pay() 함수를 호출하는 도중, pay() 함수 내에서 exception이 발생하였고,
catch 문에서 해당 exception을 던지지 않고 e.printStackTrace()로 출력만 하게끔 해놨는데 reserve() 내의 모든 transaction이 rollback 되었습니다.
반면 cancel() 함수에서 실행 도중 exception이 발생하여 catch문에서 e.printStackTrace()로 출력만 하게끔 해놨는데 이 함수 내의 다른 transaction은 또 정상 실행이 되었습니다.
왜 reserve() 함수는 rollback 되었고, cancel() 함수는 롤백되지 않았는지에 대해서 문의드립니다.
reserve() 함수 내에서 호출한 pay() 함수가 exception을 던지던 던지지않던 rollback 되었는데,
cancel() 함수는 exception을 던져야만 모든 transcation이 롤백됩니다.
환경정보
-
- OS 정보 :
- 표준프레임워크 버전 :
- JDK(JRE) 정보 :
- WAS 정보 :
- DB 정보 :
- 기타 환경 정보 :
A
안녕하세요.
표준프레임워크센터입니다.
상세한 코드가 없어 문의주신 사항만으로 센터에서 테스트한 결과
문의하신 내용과 같은 케이스가 발생하지 않았습니다.
별도의 트랜잭션 관리가 필요하다면
TransactionTemplate 를 사용하거나
PlatformTransactionManager 구현제를 직접 구현하는
프로그래밍적인 트랜잭션 관리 형태로 구성하여셔
사용해보시기 바랍니다.
감사합니다.
표준프레임워크센터입니다.
상세한 코드가 없어 문의주신 사항만으로 센터에서 테스트한 결과
문의하신 내용과 같은 케이스가 발생하지 않았습니다.
별도의 트랜잭션 관리가 필요하다면
TransactionTemplate 를 사용하거나
PlatformTransactionManager 구현제를 직접 구현하는
프로그래밍적인 트랜잭션 관리 형태로 구성하여셔
사용해보시기 바랍니다.
감사합니다.