트랜잭션 롤백 문의드립니다.
- 작성자 :
- 김*일
- 작성일 :
- 2014-07-08 11:00:05
- 조회수 :
- 928
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
동일한 Insert 쿼리를 두번 실행시켜서
두번째 쿼리에서 무결성 제약 조건 위반을 시켰으나
전체 롤백이 안되고 첫번째 쿼리가 입력 되었습니다.
아래 참조하시어 문제 해결 부탁드립니다.
1. context-datasource.xml
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="net.sf.log4jdbc.DriverSpy"/>
<property name="url" value="jdbc:log4jdbc:oracle:thin:@192.168.xxx.xxx:1521:DWDB"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
</bean>
2. context-transaction.xml
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="requiredTx" expression="execution(* *..*.*ServiceImpl.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />
</aop:config>
기타 내용은 첨부파일 참조 부탁드립니다.
감사합니다.
두번째 쿼리에서 무결성 제약 조건 위반을 시켰으나
전체 롤백이 안되고 첫번째 쿼리가 입력 되었습니다.
아래 참조하시어 문제 해결 부탁드립니다.
1. context-datasource.xml
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="net.sf.log4jdbc.DriverSpy"/>
<property name="url" value="jdbc:log4jdbc:oracle:thin:@192.168.xxx.xxx:1521:DWDB"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
</bean>
2. context-transaction.xml
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="requiredTx" expression="execution(* *..*.*ServiceImpl.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />
</aop:config>
기타 내용은 첨부파일 참조 부탁드립니다.
감사합니다.
A
안녕하세요. 김세일님.
디버그 정보나 Exception trace 상에 AOP에 대한 처리가 빠져 있는 것으로 봐서는
context-transaction.xml의 정의와 @Service를 component-scan한 ApplicationContext가 다른 것 같습니다.
확인은 component-scan이 2곳에서 정의 (ContextLoaderListener에 지정된 component-scan과 DispatcherServlet에 의해 지정된 component-scan이 있으신데, DispatcherServlet 상에 Service가 exclude 처리가 되어 있는지와
context-transaction.xml 설정이 ContextLoaderListener에 의해 지정되었는지 확인해 보시면 되실 것 같습니다.
그럼, 즐거운 하루되십시오.
감사합니다.
디버그 정보나 Exception trace 상에 AOP에 대한 처리가 빠져 있는 것으로 봐서는
context-transaction.xml의 정의와 @Service를 component-scan한 ApplicationContext가 다른 것 같습니다.
확인은 component-scan이 2곳에서 정의 (ContextLoaderListener에 지정된 component-scan과 DispatcherServlet에 의해 지정된 component-scan이 있으신데, DispatcherServlet 상에 Service가 exclude 처리가 되어 있는지와
context-transaction.xml 설정이 ContextLoaderListener에 의해 지정되었는지 확인해 보시면 되실 것 같습니다.
그럼, 즐거운 하루되십시오.
감사합니다.