【问题标题】:How to use JPA and JTA together with a transaction manager?如何将 JPA 和 JTA 与事务管理器一起使用?
【发布时间】:2014-09-08 11:42:43
【问题描述】:

我有一个现有的客户端-服务器项目,它使用普通的 JDBC 与单个 MySQL 实例进行通信。现在我想使用任何 JPA 实现并借助支持 XA 事务的 JTA 实现来扩展它以支持多个(分片)MySQL 实例。

我的问题是我应该如何进行?经过几个小时的谷歌搜索,我了解到我可能无法在没有任何应用程序服务器容器的情况下使用 JTA 实现,这是真的吗?

出于我的目的,如果可以使用任何 ORM 层来抽象应用程序逻辑,我会很高兴 - 一个 JPA 实现(如 EclipseLink 分区或 OpenJPA Slice),然后使用事务管理器(如 BTM)执行提供 ACID 的 XA 事务对底层 MySQL 实例集的保证。

到目前为止,我在 YouTube (https://www.youtube.com/watch?v=Vmr6GAlbG10) 中尝试了使用 EclipseLink 和单个数据库实例进行试验的视频教程。现在我打算将它扩展到多个实例,但不确定如何。

任何建议、链接和指南都会非常有帮助。我对此有点陌生,所以如果我误解了什么,请接受任何不便。谢谢。

【问题讨论】:

    标签: jakarta-ee jpa eclipselink jta bitronix


    【解决方案1】:

    您可以使用独立的 JTA 事务管理器,例如 Atomikos http://www.atomikos.com/ 或 SimpleJTA http://simplejta.sourceforge.net/ 完全在任何容器之外。

    有关独立 JTA 管理器的更多信息: What is a good open source Java SE JTA TransactionManager implementation?

    还可以将流行的 JPA 实现用作独立的,并与独立的 JTA 结合使用(您所要求的)。这是 Atomikos 和 Hibernate 的示例 http://www.atomikos.com/Documentation/HibernateThreeStandalone

    但这不是使用此类技术的好方法,您有任何机会和时间 - 使用应用服务器迁移到普通的三层架构。

    【讨论】:

    • @jmkam:我不了解 OP,但我认为这个答案值得赏金,尤其是在独立环境中使用 Hibernate + JTA 的示例,它也可以在 Java 中使用EE。也感谢 Andrei 的回答,但由于它专门研究 Spring 而 OP 在标签或问题中没有它,我会选择这个。
    【解决方案2】:

    也可以在 Spring 应用程序的上下文中使用 JTA。

    此外,您可以在没有任何框架的情况下在您自己的应用程序的上下文中使用它,但这非常复杂,因为您必须控制注入的内容/时间/位置以及被调用方法的返回方式(有或没有异常) )。但是,当然,这实际上取决于您想从 JTA 中使用什么:事务传播或只是在同一个 JTA 事务中使用不同的数据库。

    所以,如果您不想使用应用程序容器 (Java EE),我的建议是使用 Spring。

    【讨论】:

    • 您能否提供有关您的提案的更多详细信息,例如教程或示例?
    • 我对 Spring 的提议?只需在互联网上搜索“spring jta”,您就会找到许多示例。例如检查Spring's article on JTA
    • @Geziefer 并且因为您已经有 Java EE 的经验:您只需配置事务管理器,并告诉您的 EntityManagers 它们是 JTA(不是本地资源),并且它们是由 Spring 注入的每个位置,他们将自动加入 JTA 事务。注释与 Java EE 中的注释非常相似,但只有用于事务传播的注释不同。 (与默认情况下的 EJB 相比,您可能必须使用 @Transactional 注释公共方法)
    • @AndreiI 在寻找您的帖子之前,我正在查看 Spring 文章!但是你能给出更多关于 Spring+JTA+EclipseLink 的更具体和最新的例子吗?
    • @jmkam 所有这些都是不同的组件,您可以在 Spring 应用程序中将它们粘合在一起。因此,只需搜索“JTA+Spring”和“EclipseLink+Spring”,您就会找到足够多的有关如何配置 Spring 的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2011-12-10
    相关资源
    最近更新 更多