AOP를 이용한 트랙잰셕 설정을 dispatcher-servlet.xml 에서만 정상 동작
- 작성자 :
- 강*주
- 작성일 :
- 2014-08-25 13:01:20
- 조회수 :
- 850
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
안녕하세요.
http://www.egovframe.go.kr/uss/olh/qna/QnaInqireCoUpdt.do?qaId=QA_00000000000011093&pageIndex=1
건으로 문의드렸었는데요..
DB에서도 확인해 보았지만 1건은 입력 또는 수정이 되었습니다.
다양하게 설정을 변경해 보던중에
context-transaction.xml 에 AOP를 설정하지 않고, dispatcher-servlet.xml 에 넣었을 경우에는 정상작동 하였습니다.
특별히 고려해야할 스펙이 있는지 문의드립니다.
정상 작동시 로그 파일 첨부합니다.
수고하세요.
http://www.egovframe.go.kr/uss/olh/qna/QnaInqireCoUpdt.do?qaId=QA_00000000000011093&pageIndex=1
건으로 문의드렸었는데요..
DB에서도 확인해 보았지만 1건은 입력 또는 수정이 되었습니다.
다양하게 설정을 변경해 보던중에
context-transaction.xml 에 AOP를 설정하지 않고, dispatcher-servlet.xml 에 넣었을 경우에는 정상작동 하였습니다.
특별히 고려해야할 스펙이 있는지 문의드립니다.
정상 작동시 로그 파일 첨부합니다.
수고하세요.
A
안녕하세요. 강상주님
dispatcher-servlet.xml, 즉, DispatcherServlet 상에 생성되는 WebApplicationContext에서는 정상 동작하셨다면, 다음과 같은 원인으로 발생된 문제인 것 같습니다.
우선 ApplicationContext가 2개가 생성되는데, web.xml 상에 보시면 ContextLoaderListener에 생성되는 Root WebApplicationContext와 DispatcherServer에 의해 생성된 것입니다.
각각 contextConfigLocation에 지정된 xml에 의해 설정되는데,
일반적으로 두 부분의 설정 상에 <component-scan />을 포함하고 있습니다.
그리고 ContextLoaderListener에 의해 @Service, @Repository를 스캔하도록 되어 있고,
DispatcherServlet에 의해 @Controller만 스캔하도록 되어 있습니다.
문제는 AOP 부분의 지정이 해당 ApplicationContext만 영향을 주기 때문에 혹 @Service 부분의 스캔된 곳에 AOP가 정의되어야 합니다.
그래서 각 component-scan 설정 상에 include-filter와 exclude-filter를 통해 제어를 하는데, DispatcherServer 즉, dispatcher-servlet.xml 상에 exclude-filter로 @Service와 @Repository 제외가 없었다면, 이 두 종류도 DisplaterServlet에 의해 scan되기 때문에 Listener에 의한 AOP 설정이 처리되지 않았던 것 입니다.
dispatcher-servlet.xml 상에 다음과 같이 exclude-filter가 적용되어 있는지 확인해 주시면 되실 것 같습니다.
<context:component-scan base-package="egovframework">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
그럼, 즐거운 하루되십시오.
감사합니다.
dispatcher-servlet.xml, 즉, DispatcherServlet 상에 생성되는 WebApplicationContext에서는 정상 동작하셨다면, 다음과 같은 원인으로 발생된 문제인 것 같습니다.
우선 ApplicationContext가 2개가 생성되는데, web.xml 상에 보시면 ContextLoaderListener에 생성되는 Root WebApplicationContext와 DispatcherServer에 의해 생성된 것입니다.
각각 contextConfigLocation에 지정된 xml에 의해 설정되는데,
일반적으로 두 부분의 설정 상에 <component-scan />을 포함하고 있습니다.
그리고 ContextLoaderListener에 의해 @Service, @Repository를 스캔하도록 되어 있고,
DispatcherServlet에 의해 @Controller만 스캔하도록 되어 있습니다.
문제는 AOP 부분의 지정이 해당 ApplicationContext만 영향을 주기 때문에 혹 @Service 부분의 스캔된 곳에 AOP가 정의되어야 합니다.
그래서 각 component-scan 설정 상에 include-filter와 exclude-filter를 통해 제어를 하는데, DispatcherServer 즉, dispatcher-servlet.xml 상에 exclude-filter로 @Service와 @Repository 제외가 없었다면, 이 두 종류도 DisplaterServlet에 의해 scan되기 때문에 Listener에 의한 AOP 설정이 처리되지 않았던 것 입니다.
dispatcher-servlet.xml 상에 다음과 같이 exclude-filter가 적용되어 있는지 확인해 주시면 되실 것 같습니다.
<context:component-scan base-package="egovframework">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
그럼, 즐거운 하루되십시오.
감사합니다.