2013-09-01 4 views
0

나는 Jackrabbit을 사용하여 파일 (데이터 저장소)을 저장하고 Hibernate는 거의 모든 것을 저장합니다. 나는 많은 거래를 알지 못합니다.하지만 저는이 두 가지에 대한 글로벌 트랜잭션을 원한다는 것을 알고 있으므로 예외가 모든 것을 롤백합니다. 현재 데이터베이스 항목은 롤백되지만 Jackrabbit은 그렇지 않습니다.동일한 트랜잭션의 여러 리소스 공급자 Spring

저는 Spring 3.2를 사용하고 있습니다. Jackrabbit JCA 어댑터를 JBoss (7.1.1)에 배포했습니다. config xml에 다음 줄이 있습니다.

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

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

그러나 이것은 충분하지 않습니다. 누군가가 나에게 필요한 정보를 얻을 수있는 단서를 알려줄 수 있습니까? 리소스 공급자 중 하나에게 문제가 발생하면 모든 것을 롤백해야합니다.

답변

2

이것은 설정하는 것이 매우 까다 롭습니다. Spring은 자동으로 'transactionManager'를 기본 이름으로 사용하여 문제를 일으켰습니다. 동기화가 불일치하는 데이터 소스가 곧 악몽이되어 버릴지라도 확실히 노력해야 할 가치가 있습니다.

나를 위해 일한 내 예제 구성은 다음과 같습니다. 물론 xml 대신 @Configuration을 사용할 것입니다. 이것은 스프링 데이터, JTA, MySQL과 XA 드라이버 및 Neo4j를 사용하여 작업했습니다. Neo4j 특정 사항은 생략되었습니다.

봄 데이터가 도움이 될 수도 있습니다. 여기

은 ...

<tx:annotation-driven transaction-manager="xaTransactionManager" /> 

<bean id="xaTransactionManager" class="some.type.of.ChainedTransactionManager"> 
    <constructor-arg> 
    <list> 
     <ref bean="jpaTransactionManager"/> 
     <ref bean="otherTransactionManager"/> 
    </list> 
    </constructor-arg> 
</bean> 

<bean id="jpaTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="localContainerEntityManagerFactoryBean"/> 
</bean> 

<bean id="otherTransactionManager" class="other.type.of.jta.TransactionManager"> 
    <property name="transactionManager" ref="otherTransactionManagerService"/> 
</bean> 
+0

선발이다 그리고'이 될 ChainedTransactionManager' 것이 무엇을 입력합니다? 봄부터 수업인가요? 어디에서 찾을 수 있습니까? – LuckyLuke

+0

그리고 저는 트랜잭션을 잘 처리하지 못했지만 JBoss를 트랜잭션 관리자로 사용하지 않고 있습니다. 봄에 어떻게 할 수 있니? 내가 실제로 여기서 뭘하고있는거야? 나는 그것을 얻을 수 있는지 잘 모르겠다. – LuckyLuke

+0

다음 링크는 조금 설명하는 데 도움이 될 수 있습니다. http://www.javaworld.com/javaworld/jw-04-2007/jw-04-xa.html – Thierry

관련 문제