2014-12-30 4 views
1

우리는 트랜잭션 관리자 (현재 하나의 MySQL 자원)로서 Hibernate 4X, Spring 4X 및 HibernateTransactionManager와 통합 된 Tomcat하에 웹 애플리케이션을 가지고있다.MySQL과 Infinispan - JTA 구현

우리의 구성 분포의 일환으로, 우리는 MySQL의 이외의 형식으로 구성 을 저장하는 우리의 캐시 매니저로 Infinispan과 통합해야한다. 의미, 아니야 최대 절전 모드로 두 번째 수준의 캐시 통합!

Infinispan을 Spring과 통합 할 수 있었지만 이제는 MySql 트랜잭션과 Infinispan 이 동일한 트랜잭션 트랜잭션 (transaction)에 있어야하므로 큰 문제에 직면하고 있습니다.

나는 우리의 글로벌 트랜잭션 관리자로 Atomikos (예를 들어)와 통합 봄 JTA와 방법에 대해 읽을 수 있지만 나는 우리가 함께 작동하도록 전체 개체를 결합 할 수 있는지 확실하지 않습니다 및 :(

난에 방법이 필요합니다 Atomikos 봄 JTA로 작업 할 수있는 옵션이 있는지 그래서 Infinispan이 JTA 구현을 인식하고 하나의 글로벌 트랜잭션 (transaction)로 MySQL과 Infinispan을 처리 할 알고있다! (2PC)를

감사합니다!

답변

1

처음에 나는 것 Spring + Hibernate + JTA 설정을 제안한다. 아르 자형. 여기에 아주 좋은 tutorial입니다. 모든 것을 올바르게 설정했다면 - TransactionManager 타입의 빈을 하나 가지고 있어야한다. 위의 튜토리얼에서는이 블록 내에 구성됩니다.

@Bean(initMethod = "init", destroyMethod = "close") 
public TransactionManager transactionManager() throws Throwable { 
    UserTransactionManager userTransactionManager = new UserTransactionManager(); 
    userTransactionManager.setForceShutdown(false); 
    return userTransactionManager; 
} 

이제는 configure Infinispan to use this transaction manager 일 수 있습니다. 이것을 달성하는 가장 쉬운 방법은 자신의 TransactionManagerLookup을 구현하는 것입니다. 위에 작성된 트랜잭션 관리자를 리턴해야합니다.

마지막으로이 같은 트랜잭션 캐시를 만들 수 있습니다 모든 것이 동일한 트랜잭션 관리자와 함께 작동해야하며, 봄 단일 @Transactional 주석 내에서 모든 것을 처리해야

<local-cache name="transactional"> 
    <transaction mode="FULL_XA"/> 
</local-cache> 

후.

+0

Tomcat + Atomikos 대신 Wildfly 응용 프로그램 서버를 사용할 가치가 있을지도 모르는 아주 작은 관찰 - 트랜잭션을 위해 Hibernate와 JTA가 필요하기 때문에? – altanis

+0

설명에 감사드립니다. 불행히도, 당신이 쓴 것처럼 내 질문을 업데이 트 잊어 버렸습니다 : ( 지금은 내가 Infinispan에서 발견 한 몇 가지 한계와 버그로 ​​인해 가장 큰 문제가있다. 나의 요구 사항은 Redis와 함께하는 것이다. XA (제 이해를 위해) 당신은 어떤 생각이 있습니까? – kmualem