'jta'에 해당되는 글 1건

  1. [Spring MVC 3] 2개 이상의 dataSource에 대해 하나의 Transaction으로 처리하기

[Spring MVC 3] 2개 이상의 dataSource에 대해 하나의 Transaction으로 처리하기

* 상황은 Spring MVC 3 환경의 Service 클래스에서 아래와 같이 서로 다른 dataSource를 가지는 DAO의 CRUD를 하나의 비즈니스 로직으로 여겨 트랜잭션 처리를 해야 한다.

aDAO.update();

anotherDAO.update();


* 기본적으로 Spring MVC 3에서 트랜잭션 처리는 하나의 dataSource를 대상으로만 이루어진다. 2개 이상의 dataSource에 대한 CRUD를 하나의 트랜잭션으로 처리할 수 있는 방법은 없을까?


* 구글링 결과 JTA를 사용해야 하며 transactionManager 클래스로 JtaTransactionManager 클래스를 이용하라고 한다. 이 클래스는 컨테이너에 종속성을 가지기 때문에 컨테이너마다 설정이 다르다고 한다.

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">

  <property name="transactionManagerName" value="java:/comp/UserTransaction" />

</bean>


* 또는 아래와 같이 간단하게 한줄로 끝낼수도 있다.

<tx:jta-transaction-manager />


* 컨테이너가 Tomcat일 경우 /conf/context.xml 파일의 <Context> 엘러먼트 안에 아래 설정을 추가해야 한다.

<Transaction factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60" />


* 관련 링크

http://stackoverflow.com/a/7196375 (skaffman)

http://stackoverflow.com/a/5080761 (Darren)

http://blog.codecentric.de/en/2012/03/integration-of-a-transaction-manager-in-tomcat-for-spring-and-openjpa/ (Andreas Fritz)


저작자 표시 비영리 동일 조건 변경 허락
신고