JTA与本地交易有什么区别?


84

JTA和本地交易有什么区别?

一个显示何时使用JTA以及何时使用本地事务的示例很好。

Answers:


136

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

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

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

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

最后,EJB和Spring之类的技术通过提供,甚至使JTA更加易于使用declarative transactions。在大多数情况下,建议使用它们,因为它们更容易,更清洁且更不易出错。EJB和Spring都可以在幕后使用JTA。


5
+1用于解释JTA使用(EJB,Spring等)的历史和发展。
马可(Marco)

4

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

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


1

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


-1

J2EE应用程序通过2个规范
JTA ---> Java Transaction API包含了suppoart fot DT。高层实现,并且始终启用
JTS ---> Java Transaction Service。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.