2011-08-25 3 views
4

나는 오라클을위한 두 개의 데이터 소스 하나와 postgresql을위한 다른 두 개의 데이터 소스를 가지고 있으며 둘 다 같은 비즈니스 방법으로 사용된다. 어떻게 설정에서 스프링 @transaction봄 트랜잭션 다중 데이터 소스

비즈니스 방법

@Transactional 
public int getData(){ 

oracleDao.func1(); 
postgreDao.func2(); 
} 

를 사용하여이 bussiness의 방법 거래를 할 수 있습니다 내가

<bean id="transactionManagerPostGres" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
     </bean> 
    <bean id="transactionManagerOracle" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactoryOracle"/> 
</bean>  

답변

0

당신이 two-phase commit을 의미합니까 있나요? 이는 어려운 문제이며 사용하는 데이터베이스와 드라이버에 따라 다릅니다.

+0

나는 전체 커밋 또는 롤백 트랜잭션으로 비즈니스 메서드를 설정하려고합니다. –

5

2 단계 커밋 및 XA 트랜잭션을 지원하는 적절한 JavaEE 컨테이너가 필요합니다. Oracle 및 Postgres JDBC 드라이버는 모두 XA 트랜잭션을 지원하므로 정상입니다.

컨테이너는 이것을 JTA API를 통해 Spring에 공개하고, Spring은 JtaTransactionManager을 사용하여 이것을 사용한다. 응용 프로그램을 변경하지 않아도 정상적인 트랜잭션처럼 처리됩니다.

설정하는 방법은 전적으로 JavaEE 컨테이너에 따라 다르며, 각기 다른 방법이 있습니다.

+0

나는 servicemix에 응용 프로그램을 배포 할 예정입니다. –

+0

@prabha :이 경우 ServiceMix 문서를 살펴보고 XA JTA가 지원되는지 확인해야합니다. 그렇지 않다면, 당신은 당신이 가지고있는 것과 통합되는 것을 발견하거나, 찾을 다른 컨테이너를 찾을 필요가있다. 그것은 해당 컨테이너에 특정한 질문이며 Spring과 독립적입니다. – skaffman

+0

@transaction 어노테이션으로 같은 transactionManager를 사용할 수 있습니까? –

관련 문제