如何将JPA和JTA与事务管理器一起使用?

时间:2014-07-17 14:28:58

标签: java-ee jpa eclipselink jta bitronix

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

我的问题是我该怎么办?经过几个小时的谷歌搜索后,我可能无法在没有任何应用服务器容器的情况下使用JTA实现,这是真的吗?

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

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

任何建议,链接和指南都会非常有用。我对此有点新意,如果我误解了任何事情,请接受任何不便。感谢。

2 个答案:

答案 0 :(得分: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

但这不是使用此类技术的好方法,而且您有任何机会和时间 - 使用应用程序服务器转移到正常的三层体系结构。

答案 1 :(得分:0)

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

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

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