다중transaction지원 여부의 건
- 작성자 :
- 박*일
- 작성일 :
- 2011-04-11 10:41:56
- 조회수 :
- 3,245
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
Q&A덕분에 늘 문제를 잘 해결하고 있는 개발자입니다.
다름이 아니라, 전자정부FWK에서도 다중 Transaction지원이 가능한가 해서
이렇게 문의드립니다.
예를 들면, 한 번의 transaction에서 exception발생시 특정 서비스에서는 rollback되지 않도록 새로운 transaction을 선언하여, 해당 서비스는 전체 롤백과는 무관하게 commit이 되도록 할 수 있는지 알고 싶습니다. (첨부드린 이미지 참조바람)
혹시나, 있다면 호출메소드및 사용가이드도 부탁드리겠습니다. 감사합니다.
다름이 아니라, 전자정부FWK에서도 다중 Transaction지원이 가능한가 해서
이렇게 문의드립니다.
예를 들면, 한 번의 transaction에서 exception발생시 특정 서비스에서는 rollback되지 않도록 새로운 transaction을 선언하여, 해당 서비스는 전체 롤백과는 무관하게 commit이 되도록 할 수 있는지 알고 싶습니다. (첨부드린 이미지 참조바람)
혹시나, 있다면 호출메소드및 사용가이드도 부탁드리겠습니다. 감사합니다.
A
안녕하세요.. 박세일님..
말씀하신 것 처럼 특정 영역에 대한 호출 부분을 분리하시기 위해서는 Transaction의 propagation 설정을 추가로 하셔야 합니다.
XML 기반의 Transaction 설정을 기준으로 설명드리면 다음과 같이 설정하시면 됩니다.
- 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="selectOnly*" read-only="true"/>
<tx:method name="separate*" propagation="REQUIRES_NEW" rollback-for="Exception"/>
<tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="requiredTx"
expression="execution(* egovframework..*Impl.*(..)) or
execution(* egovframework.rte.fdl.excel.impl.*Impl.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />
</aop:config>
<tx:attributes/>의 <tx:method/> 중 "separate*"로 시작하는 메소드의 propagation 설정을 보시면 "REQUIRES_NEW"로 설정하였습니다.
이 의미는 separate로 시작하는 메소드의 transaction을 기존 transaction 영역과 분리하여 새로운 transaction을 시작하도록 하는 설정입니다.
(propagation의 기본값인 "REQUIRED"는 transaction 영역안에서 호출이 되면 같이 묶이고... 기존 transaction 영역이 없이 호출되었으면.. 새로운 transaction 영역을 만들도록 함)
2. Service(Impl) 클래스
독립을 원하는 부분을 separate로 시작하는 메소드 이름만 부여하면 됨
참조 가이드 : http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:psl:transaction:declarative_transaction_management
추가 정보 : http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html#tx-propagation
그럼.. 즐거운 하루되십시오.
감사합니다.
말씀하신 것 처럼 특정 영역에 대한 호출 부분을 분리하시기 위해서는 Transaction의 propagation 설정을 추가로 하셔야 합니다.
XML 기반의 Transaction 설정을 기준으로 설명드리면 다음과 같이 설정하시면 됩니다.
- 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="selectOnly*" read-only="true"/>
<tx:method name="separate*" propagation="REQUIRES_NEW" rollback-for="Exception"/>
<tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="requiredTx"
expression="execution(* egovframework..*Impl.*(..)) or
execution(* egovframework.rte.fdl.excel.impl.*Impl.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />
</aop:config>
<tx:attributes/>의 <tx:method/> 중 "separate*"로 시작하는 메소드의 propagation 설정을 보시면 "REQUIRES_NEW"로 설정하였습니다.
이 의미는 separate로 시작하는 메소드의 transaction을 기존 transaction 영역과 분리하여 새로운 transaction을 시작하도록 하는 설정입니다.
(propagation의 기본값인 "REQUIRED"는 transaction 영역안에서 호출이 되면 같이 묶이고... 기존 transaction 영역이 없이 호출되었으면.. 새로운 transaction 영역을 만들도록 함)
2. Service(Impl) 클래스
독립을 원하는 부분을 separate로 시작하는 메소드 이름만 부여하면 됨
참조 가이드 : http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:psl:transaction:declarative_transaction_management
추가 정보 : http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html#tx-propagation
그럼.. 즐거운 하루되십시오.
감사합니다.