2013/08/26 17:55

presentation layer에 transaction 처리가 되지 않는 문제. Spring



흠,
transaction 처리는 service layer에서..

그냥 그렇게 알고 있었고,
그렇게 가이드 했었고.. 

그런데, 서비스 모듈을 공통으로 쓰려고 하는
프로젝트가 있었는데,
거기서는 service에서 트랜젝션을 잡으면,
공통 모듈을 트랜젝션으로 묶는데 문제가 생겨.. (이중으로 처리해야 하는..)
presentation later에서 처리하겠다고 했다.
머, 권장사항은 아니지만,
꼭 그렇게 하시겠다기에 그렇게 하시라고 했는데.. 

이제서야, 트랜젝션 처리가 안된다고.;;;

난 테스트도 다 해서 적용 하셨다길래,
잘 되나보다.. 했던 부분인데.........

머 암튼,
그래서 삽질을 시작했고,, 
어노테이션 기반, aop 기반 두가지 다 적용해 보았으나
안됐다.. 

그래서 찾다보니,, 
아래 사이트에서 정갈하게 해답이 콱!


그렇다,
하나를 풀더라도, 
제대로 알고, 제대로 풀어야 한다......

암튼, Spring AOP가 동작할 때,
JDK 다이네믹 프록시 기반으로 동작하던지,
CGLib 프록시를 사용하던지 하는데,
JDK 프록시의 경우 인터페이스가 있는 경우에만 proxy를 만들수 있는데 반해,
CGLib의 경우는 concrete class에 proxing이 가능하다. 
따라서 presentation layer의 경우,
인터페이스 구현이 없는 관계로 CGLib를 사용해야 하고,
따라서 아래 설정을 추가해 주어야 한다.
<aop:config proxy-target-class="true"/>

잘 된다.
물론 프로젝트 쪽에서는 pointcut designators를 잘못 기술한 문제도 추가적으로 있었다;; 

암튼,, 
교훈 하나를 또 얻어간다... 

덧글

댓글 입력 영역