【问题标题】:use JTA transaction or not?是否使用 JTA 事务?
【发布时间】:2011-06-10 05:45:14
【问题描述】:

我正在开发一个部署在 JBoss 应用服务器上的 J2EE 应用程序。 该应用程序由一个 EJB 2.x 组件和一个 Web 组件组成,运行在本地计算机或远程服务器上。数据库是 Oracle 或 SQL Server,并且不在分布式环境中。

我正在使用 Hibernate 3.6(JPA 2.0 实现)进行交易。我应该使用作为容器管理事务的 JTA 还是过度使用它?

目前我正在使用 JTA,结果它运行良好,但有一些小问题,我不知道它是否与事务管理有关。使用本地事务管理会更容易或更可靠吗?

【问题讨论】:

  • 感谢您的评论。那么如果我同时使用 EJB 2.x 和 JPA,我应该使用什么事务管理器呢?对于 Spring-Roo 应用程序,默认值为 org.springframework.orm.jpa.JpaTransactionManager 但我想我应该使用其他东西。

标签: transactions jakarta-ee ejb jta


【解决方案1】:

始终建议将 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?

我确实想知道您为什么将 EJB 2 与 JPA 2.0 结合使用。 EJB 3.1 将是一个更合乎逻辑的选择。 EJB 2 已完全弃用(将在 Java EE 7 中删除)。

【讨论】:

  • 谢谢你。我目前处于项目的迁移阶段,因此我需要 EJB 2 和 JPA 2 都运行良好,以便能够测试更改不会影响我的项目过去的行为。最终,我的项目将完全迁移到 JPA 2。
  • 不客气。请注意,最强大的组合是 EJB 3.1 + JPA 2。这两者相得益彰。
【解决方案2】:

我建议使用 XA 事务,即使应用程序当前只访问一个资源(数据库)。共鸣:

1) 将来,如果应用程序决定在当前数据库之外包含一些其他事务资源,它会发现更容易,因为 XA 事务管理已经到位,然后可以将多个事务资源组合成一个交易。

2) 由于您目前只有一个事务资源,因此与本地事务相比,我认为使用 XA 不会影响性能。原因是 XA/JTA 事务管理器已经对单一事务资源的情况进行了某种优化(他们称之为单阶段优化)。

希望对您有所帮助。

尼丁

【讨论】:

  • YAGNI,永远不应该根据投机需求来构建东西。如果明确需要 XA,请使用它。不要这样做,因为你可能需要它。
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 2011-12-10
  • 2011-12-07
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 2012-05-24
相关资源
最近更新 更多