컨트롤러에 트랜잭션 처리
- 작성자 :
- 김*훈
- 작성일 :
- 2011-11-03 11:52:08
- 조회수 :
- 1,999
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
샘플소스로 컨트롤러에 트랜잭션을 처리하고 싶은데.. 안되네요..
context-transaction.xml을 아래와 같이 수정했고
<aop:config>
<aop:pointcut id="requiredTx"
expression="execution(* egovframework.rte.sample..impl.*Impl.*(..))"/>
<aop:pointcut id="requiredTx2"
expression="execution(* egovframework.rte.sample.web.*Controller.*(..))"/>
<aop:advisor advice-ref="txAdvice"
pointcut-ref="requiredTx" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="requiredTx2" />
</aop:config>
컨트롤러 소스에 다음과 같이 수정하여 테스트 부분에 에러를 강제로 유발시켰습니다. 그런데 오류메세지는 뜨는데 롤백이 되질 않네요
sampleService.insertSample(sampleVO);
sampleService.insertSample2(sampleVO); //테스트
어떻게 해야 컨트롤러 쪽에서 트랜잭션을 처리할 수 있나요?
context-transaction.xml을 아래와 같이 수정했고
<aop:config>
<aop:pointcut id="requiredTx"
expression="execution(* egovframework.rte.sample..impl.*Impl.*(..))"/>
<aop:pointcut id="requiredTx2"
expression="execution(* egovframework.rte.sample.web.*Controller.*(..))"/>
<aop:advisor advice-ref="txAdvice"
pointcut-ref="requiredTx" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="requiredTx2" />
</aop:config>
컨트롤러 소스에 다음과 같이 수정하여 테스트 부분에 에러를 강제로 유발시켰습니다. 그런데 오류메세지는 뜨는데 롤백이 되질 않네요
sampleService.insertSample(sampleVO);
sampleService.insertSample2(sampleVO); //테스트
어떻게 해야 컨트롤러 쪽에서 트랜잭션을 처리할 수 있나요?
A
안녕하세요.. 김태훈님..
expression 부분에.. 두개의 식은 or로 다음과 같이 묶으면.. 처리 가능합니다.
expression="execution(* egovframework.rte.sample..impl.*Impl.*(..)) or execution(* egovframework.rte.sample.web.*Controller.*(..))"
다만.. 이렇게 설정된 경우는 추가적으로 인터페이스가 아닌 클래스에 대한 proxy를 처리할 수 있도록 다음과 같이 설정이 변경되어야 하며..
<aop:config proxy-target-class="true>
CGLIB 관련 library가 추가되어야 합니다...
성능 또한 문제가 발생합니다..
따라서... 트랜잭션은.. Controller가 아닌 Service 부분으로 걸으시는 것을 가이드 해드리고 있습니다.....
그럼.. 즐거운 하루되십시오.
감사합니다.
expression 부분에.. 두개의 식은 or로 다음과 같이 묶으면.. 처리 가능합니다.
expression="execution(* egovframework.rte.sample..impl.*Impl.*(..)) or execution(* egovframework.rte.sample.web.*Controller.*(..))"
다만.. 이렇게 설정된 경우는 추가적으로 인터페이스가 아닌 클래스에 대한 proxy를 처리할 수 있도록 다음과 같이 설정이 변경되어야 하며..
<aop:config proxy-target-class="true>
CGLIB 관련 library가 추가되어야 합니다...
성능 또한 문제가 발생합니다..
따라서... 트랜잭션은.. Controller가 아닌 Service 부분으로 걸으시는 것을 가이드 해드리고 있습니다.....
그럼.. 즐거운 하루되십시오.
감사합니다.