我正在开发一个部署在JBoss应用服务器上的J2EE应用程序。该应用程序由一个EJB2.x组件和一个web组件组成,运行在本地计算机或远程服务器上。数据库是Oracle或SQL Server,并且不在分布式环境中。
我使用Hibernate 3.6 (JPA 2.0实现)进行事务处理。我应该使用JTA,它是容器管理的事务,还是使用它过于夸张了?
目前我正在使用JTA,事实证明它运行得很好,但有一些小问题,我不知道它是否与事务管理相关。使用本地事务管理会更容易还是更可靠?
发布于 2011-01-22 23:04:41
JTA事务总是比其他类型的事务API更受推荐,特别是当您引用的本地事务仍然是JPA API的一部分时。请注意,您不能说“JTA与资源本地事务”,因为JTA实际上管理资源本地事务。
Gavin King (Hibernate的创建者)曾在一次采访中表示,这种特定于JPA的API是一个错误,应该首选更灵活的JTA API。特别是在使用声明性事务时,JTA是非常轻量级的。单词overkill实际上更适用于使用JPA原生事务API,而不是使用JTA。
关于使用XA还是使用JTA的资源本地事务之间的选择,有一些需要说明的问题。有关更多细节,请参阅我的答案:JTA or LOCAL transactions in JPA2+Hibernate 3.6.0?
我想知道您为什么要将EJB2与JPA2.0结合使用。在这里,EJB 3.1将是一个更符合逻辑的选择。EJB 2已完全弃用(将在JavaEE7中修剪)。
发布于 2011-07-30 02:57:19
我建议使用XA事务,即使应用程序当前只访问一种资源(数据库)。原因:
1)将来,如果应用程序决定包含除当前数据库之外的其他事务资源,它将发现更容易,因为XA事务管理已经就位,然后可以将多个事务资源组合到单个事务中。
2)由于您目前只有一个事务资源,我认为与本地事务相比,使用XA不会影响性能。原因是XA/JTA事务管理器已经对单个事务资源的情况进行了某种优化(他们称之为单阶段优化)。
希望这能有所帮助。
Nitin
https://stackoverflow.com/questions/4709864
复制相似问题