3

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

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

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

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

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

4

2 回答 2

1

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

有关独立 JTA 管理器的更多信息: 什么是好的开源 Java SE JTA TransactionManager 实现?

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

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

于 2014-07-27T09:32:05.060 回答
0

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

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

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

于 2014-07-25T11:55:28.137 回答