OpenSource/Spring

ChainedTransactionManager를 이용한 글로벌트랜잭션

태하팍 2013. 8. 22. 16:39
반응형

 

 

ChainedTransactionManager는 정말 획기적인 것 같다.

2pc의 글로벌트랜잭션을 하기 위하여 XA datasource를 이용하던지, 분산처리를 할 수 있는 오픈소스를 사용하여야만 하였다.

하지만 stand alone 에서도 또는 tomact에서! 아주 쉽게 2pc 처리를 할 수 가 있다.
즉, 글로벌 트랜잭션으로 묶을 수 가있다.

 

환경 : spring 3.1

         tomcat 6.0

         maven project

 

 

 


 

 

 

 maven을 사용하고 있다면 아래의 jar파일을 우선적으로 가져와야한다.

 

# pom.xml 설정

 

dependencies에 아래와 같이 선언한다.

 

 <dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-neo4j-tx</artifactId>
  <version>2.1.0.RELEASE</version>
  <exclusions>
   <exclusion>
    <artifactId>cglib</artifactId>
    <groupId>cglib</groupId>
   </exclusion>
  </exclusions>
 </dependency>
 <dependency>
  <groupId>org.neo4j</groupId>
  <artifactId>neo4j-kernel</artifactId>
  <version>1.8</version>
 </dependency>

 

 

 


 

 

# 데이터소스 설정

  데이터소스는 dbcp로 설정!!

  
 <!-- DataSource from DBCP -->
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
       <property name="driverClassName" value="${database.driver.ClassName}" />
      <property name="url" value="${database.url}" />
      <property name="username" value="${database.username}" />
      <property name="password" value="${database.password}" />
 </bean>

 

<bean id="dataSource_remote" class="org.apache.commons.dbcp.BasicDataSource">

    블라~블라~
</bean>

 

 


 

 

# context 설정

 

 <tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager"/> 

 -> proxy-target-class="true"는 class class 기반 일경우에 true~!!! Interface 기반이면 삭제 해도 무관하다 default가 false 이다!

 

 <bean id="transactionManagerAcet"
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
 </bean>


 <bean id="transactionManagerAcetRemote"
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource_remote" />
 </bean>

 

 <bean id="transactionManager"    <--- 대표가 되는 트랜잭션 manager~!
  class="org.springframework.data.neo4j.transaction.ChainedTransactionManager"
  lazy-init="false">
  <constructor-arg>
   <list>
    <ref bean="transactionManagerAcet" />
    <ref bean="transactionManagerAcetRemote" />
   </list>
  </constructor-arg>
 </bean>     

 

 

 


 


 괜찮은 것 같다.

 

  - 끝 -

반응형