2014-07-17 44 views
3

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

我的问题是我应该如何继续?经过几个小时的谷歌搜索,我明白我可能无法使用没有任何应用服务器容器的JTA实现,这是真的吗?

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

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

任何类型的建议,链接和指导将是非常有益的。我对此很陌生,因此如果我误解了任何内容,请接受任何不便。谢谢。

回答

0

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

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

+0

您能提供一些关于您的建议的更多细节,例如:一个教程或例子? –

+0

我的建议与春季?只需在因特网上搜索“spring jta”,就会发现很多例子。例如,查看[JTA上的Spring文章](http://spring.io/blog/2011/08/15/configuring-spring-and-jta-without-full-java-ee/)。 –

+0

@Geziefer,因为你已经有了Java EE的经验:你只需配置事务管理器,并告诉你的EntityManagers他们是JTA(而不是资源本地),并且他们每一个被Spring注入的地方都会自动加入JTA交易。注释与Java EE中的注释非常相似,但只有事务传播的注释才不同。(也许你必须使用'@ Transactional'注释公共方法,与EJB相比,这是默认的) –

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和休眠的示例 http://www.atomikos.com/Documentation/HibernateThreeStandalone

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

+0

@jmkam:我不知道OP,但我认为这个答案值得赏赐,尤其是在独立环境中使用Hibernate + JTA的例子,这个例子也可以在Java EE中使用。同样感谢Andrei的回答,但是因为它专注于Spring并且OP没有在标签或问题中使用它,所以我会选择这个。 –

相关问题