【问题标题】:MySQL and Infinispan - JTA implementationMySQL 和 Infinispan - JTA 实现
【发布时间】:2015-02-26 08:27:28
【问题描述】:

我们在 Tomcat 下有一个 Web 应用程序,集成了 Hibernate 4X、Spring 4X 和 HibernateTransactionManager 作为我们的事务管理器(目前是一个 MySQL 资源)。

作为我们配置分发的一部分,我们应该将 Infinispan 集成为我们的缓存管理器,以以 MySQL 以外的其他格式存储配置。意思是,不是作为 Hibernate 二级缓存集成!

我设法将 Infinispan 与 Spring 集成,但现在我面临一个大问题,因为 MySql 事务和 Infinispan 必须在同一个 @Transactional 上。

我阅读了有关 Spring JTA 以及如何与 Atomikos 集成(例如)作为我们的全局事务管理器的信息,但我不确定我们是否可以将整个实体结合起来一起工作以及如何:(

我需要知道是否有使用 Atomikos Spring JTA 的选项,以便 Infinispan 将识别此 JTA 实现并将 MySql 和 Infinispan 作为一个全局事务处理! (2PC)

谢谢!

【问题讨论】:

    标签: spring hibernate infinispan atomikos


    【解决方案1】:

    首先我会建议一起配置Spring + Hibernate + JTA。这是一个非常好的tutorial。如果您正确配置了所有内容 - 您应该拥有一个 TransactionManager 类型的 bean。在上面的教程中,它是在这个块内配置的:

    @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。这应该返回上面创建的事务管理器。

    最后你必须创建事务缓存,像这样:

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

    之后,一切都应该使用同一个事务管理器,Spring 应该在单个 @Transactional 注释中处理所有事情。

    【讨论】:

    • 只是一个很小的观察 - 因为您需要 Hibernate 和 JTA(用于事务),也许值得去 Wildfly 应用程序服务器而不是 Tomcat + Atomikos?
    • 非常感谢您的解释!不幸的是,我设法做到了和你写的一样的事情并且忘记更新我的问题:(现在我遇到了最大的问题,由于我们在 Infinispan 中发现了一些限制和错误,我现在的要求是使用不支持 XA 的 Redis (据我所知)。你有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 2011-01-22
    • 2013-07-19
    • 2012-06-03
    • 2015-02-12
    • 2022-12-11
    • 2013-10-26
    • 2019-09-22
    相关资源
    最近更新 更多