티스토리 뷰

* 상황은 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)


댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함