我们在Tomcat下有一个Web应用程序,与Hibernate 4X,Spring 4X和HibernateTransactionManager集成为我们的事务管理器(目前是一个MySQL资源)。
作为配置分发的一部分,我们应该与Infinispan集成作为我们的缓存管理器,以存储MySQL以外的其他格式的配置。意思是,不像休眠第二级缓存集成!
我设法将Infinispan与Spring集成,但现在我面临着一个大问题,因为MySql事务和Infinispan必须在同一@Transactional上。
我读过Spring JTA以及如何与Atomikos集成(例如)作为我们的全球事务管理器,但我不确定我们是否可以将整个实体结合起来协同工作以及如何:(
我需要知道是否有使用Atomikos Spring JTA的选项,以便Infinispan能够识别此JTA实现,并将MySql和Infinispan作为一个全局事务进行处理!(2个)
谢谢!
起初,我建议一起配置 Spring + Hibernate + JTA。这是一个非常好的教程。如果您正确配置了所有内容 - 您应该有一个 TransactionManager
类型的 bean .在上面的教程中,它在此块中配置:
@Bean(initMethod = "init", destroyMethod = "close")
public TransactionManager transactionManager() throws Throwable {
UserTransactionManager userTransactionManager = new UserTransactionManager();
userTransactionManager.setForceShutdown(false);
return userTransactionManager;
}
现在,您可以将 Infinispan 配置为使用此事务管理器。实现此目的的最简单方法是实现自己的 TransactionManagerLookup。这应该返回上面创建的事务管理器。
最后,您必须创建事务缓存,如下所示:
<local-cache name="transactional">
<transaction mode="FULL_XA"/>
</local-cache>
之后,一切都应该使用相同的事务管理器,Spring 应该在单个@Transactional
注释中处理所有内容。