trasaction 재질문 드립니다.
- 작성자 :
- 연*훈
- 작성일 :
- 2013-03-19 10:54:41
- 조회수 :
- 1,160
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
//////////////// 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" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* kr.*..impl.*Impl.*(..))" />
</aop:config>
//////////////// context-datasource.xml ///////////////////////
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@//172.30.1.150:1521/xxxx"/>
<property name="username" value="xxxxx"/>
<property name="password" value="xxxxx"/>
</bean>
////////////////////////////////////////////////////////////////////////////////////////////////////
설정은 위와 같습니다. 그런데 transaction이 잡히질 안네요.
테스트 방법 : 똑같은 쿼리를 두번 실행 -> 무결성 제약 조건
-> 데이터 확인 결과 하나에 데이터가 들어가 있는 상태
테스트한 실제 serviceImpl 패키지 : kr.or.xxx.xtest.admi.service.impl.CodeServiceImpl
설정에 뭐가 문제가 있을까요?
아님 serviceImpl에 @Transactional 어노테이션을 지정해야 하나요?
(해봤지만 되지 않았음....)
말 씀하신대로 포인트컷을 execution(* kr.*..impl.*Impl.*(..))해봤지만
역시 안되네요?
Transaction이 잡힌다면 로그에 남나요?
위 에러로그도 첨부해드립니다.
어떻게 해야할지 모르겠네요. 답변 부탁드려요.
<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" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* kr.*..impl.*Impl.*(..))" />
</aop:config>
//////////////// context-datasource.xml ///////////////////////
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@//172.30.1.150:1521/xxxx"/>
<property name="username" value="xxxxx"/>
<property name="password" value="xxxxx"/>
</bean>
////////////////////////////////////////////////////////////////////////////////////////////////////
설정은 위와 같습니다. 그런데 transaction이 잡히질 안네요.
테스트 방법 : 똑같은 쿼리를 두번 실행 -> 무결성 제약 조건
-> 데이터 확인 결과 하나에 데이터가 들어가 있는 상태
테스트한 실제 serviceImpl 패키지 : kr.or.xxx.xtest.admi.service.impl.CodeServiceImpl
설정에 뭐가 문제가 있을까요?
아님 serviceImpl에 @Transactional 어노테이션을 지정해야 하나요?
(해봤지만 되지 않았음....)
말 씀하신대로 포인트컷을 execution(* kr.*..impl.*Impl.*(..))해봤지만
역시 안되네요?
Transaction이 잡힌다면 로그에 남나요?
위 에러로그도 첨부해드립니다.
어떻게 해야할지 모르겠네요. 답변 부탁드려요.
A
안녕하세요.. 연승훈님..
Exception stack trace 상에.. transaction manager 처리 부분이 없는 것으로 봐서...
transaction 관련 AOP 정의가 되어 있는 xml 자체가 contextConfigLocation 설정에 지정되어 있지 않은 경우 같습니다.
web.xml을 확인하셔서 transaction 설정 xml이 정상적으로 지정되어 있는지 확인해 보십시오..
또는.. Impl 자체가.. new를 통해서 직접 호출되는 경우도 AOP의 적용을 받지 않습니다. (Controller에서 @Resource를 통해 호출되어야 함..)
단, 이 경우는 DAO를 타기 전에 보통 Nullpointer Exception을 발생시키기 때문에 해당되지는 않으신 것 같습니다.
그럼.. 즐거운 하루되십시오.
감사합니다.
Exception stack trace 상에.. transaction manager 처리 부분이 없는 것으로 봐서...
transaction 관련 AOP 정의가 되어 있는 xml 자체가 contextConfigLocation 설정에 지정되어 있지 않은 경우 같습니다.
web.xml을 확인하셔서 transaction 설정 xml이 정상적으로 지정되어 있는지 확인해 보십시오..
또는.. Impl 자체가.. new를 통해서 직접 호출되는 경우도 AOP의 적용을 받지 않습니다. (Controller에서 @Resource를 통해 호출되어야 함..)
단, 이 경우는 DAO를 타기 전에 보통 Nullpointer Exception을 발생시키기 때문에 해당되지는 않으신 것 같습니다.
그럼.. 즐거운 하루되십시오.
감사합니다.