【问题标题】:What is the difference between JTA and a local transaction?JTA 和本地事务有什么区别?
【发布时间】:2012-03-04 05:58:58
【问题描述】:

JTA 和本地事务有什么区别?

显示何时使用 JTA 以及何时使用本地事务的示例会很棒。

【问题讨论】:

    标签: jta


    【解决方案1】:

    JTA 是用于管理 Java 事务的通用 API。它允许您以资源中立的方式启动、提交和回滚事务。事务状态通常存储在 TLS(线程本地存储)中,并且可以传播到调用堆栈中的其他方法,而无需传递一些显式的上下文对象。事务资源可以加入正在进行的事务。如果有多个资源参与此类事务,则其中至少一个必须是所谓的 XA 资源。

    resource local transaction 是一个事务,您使用特定的单一资源使用其自己的特定 API。这样的事务通常不会传播到调用堆栈中的其他方法,并且您需要传递一些显式的上下文对象。在大多数资源本地事务中,不可能有多个资源参与同一个事务。

    您将在例如 Java SE 中的低级 JDBC 代码中使用资源本地事务。这里上下文对象由java.sql.Connection 的实例表示。资源本地事务的其他例子是开发人员在 2002 年左右创建企业应用程序。由于事务管理器(由 JTA 使用)在那个时代是昂贵的、封闭的源代码和复杂的设置,人们选择了更便宜、更容易获得资源本地变体。

    您基本上会在所有其他场景中使用 JTA 事务。非常简单、小型、免费和开源的服务器,如 TomEE (25MB) 或 GlassFish (35MB),具有开箱即用的 JTA 支持。无需设置任何东西,它们就可以工作。

    最后,通过提供declarative transactions,EJB 和 Spring 等技术甚至使 JTA 更易于使用。在大多数情况下,建议使用它们,因为它们更容易、更干净且不易出错。 EJB 和 Spring 都可以在后台使用 JTA。

    【讨论】:

    • +1 用于解释 JTA 用途(EJB、Spring 等)的历史和发展。
    • 不明白这里的单线程和调用堆栈到底是什么意思。 JTA 应该用在分布式系统中
    【解决方案2】:

    Java SE 应用程序的事务类型应设置为“RESOURCE_LOCAL”,Java EE 应用程序应设置为“JTA”。 “RESOURCE_LOCAL”可能在某些部署在 Tomcat 上的 Web 应用程序上运行良好,但在 glassfish 环境下运行应用程序时可能会导致问题。

    如果您正在处理分布式事务,则必须使用“JTA”作为您的事务管理器。

    【讨论】:

      【解决方案3】:

      Java Transaction API (JTA) 是 Java Enterprise Edition (Java EE) API 之一,允许在 Java 环境中跨多个 XA 资源完成分布式事务。

      【讨论】:

        【解决方案4】:

        J2EE 应用程序通过 2 个规范包括对 DT 的支持
        JTA--->Java Transaction API.highe-level 实现并始终启用
        JTS--->Java 事务服务。

        【讨论】:

          猜你喜欢
          • 2015-03-03
          • 1970-01-01
          • 2015-05-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多