JTA和本地交易有什么区别?
显示何时使用JTA以及何时使用本地事务的示例非常棒。
答案 0 :(得分:131)
JTA
是用于管理Java事务的通用API。它允许您以资源中立的方式启动,提交和回滚事务。事务状态通常存储在TLS(线程本地存储)中,并且可以传播到调用堆栈中的其他方法,而不需要传递一些显式的上下文对象。交易资源可以加入正在进行的交易。如果有多个资源参与此类事务,则其中至少有一个必须是所谓的XA资源。
resource local transaction
是您使用自己的特定API对特定单个资源进行的事务。这样的事务通常不会传播到调用堆栈中的其他方法,并且您需要传递一些显式的上下文对象。在大多数资源本地事务中,不可能有多个资源参与同一事务。
您将在Java SE中使用资源本地事务,例如低级JDBC代码。这里的上下文对象由java.sql.Connection
的实例表示。资源本地事务的其他示例是开发人员在2002年左右创建企业应用程序。由于事务管理器(由JTA使用)是昂贵的,封闭的源代码和在那个时代设置的复杂事物,人们选择更便宜,更容易获得资源本地变体。 / p>
基本上每个其他场景都会使用JTA事务。非常简单,小型,免费和开源的服务器,如TomEE(25MB)或GlassFish(35MB),开箱即用的JTA支持。没有什么可以设置的,他们只是工作。
最后,像EJB和Spring这样的技术通过提供declarative transactions
使JTA更容易使用。在大多数情况下,建议使用它们,因为它们更容易,更清洁,更不容易出错。 EJB和Spring都可以使用JTA。
答案 1 :(得分:3)
对于Java SE应用程序,Transaction-type应设置为“RESOURCE_LOCAL”,对于Java EE应用程序,应设置为“JTA”。 “RESOURCE_LOCAL”可能在部署在Tomcat上的某些Web应用程序上正常工作,但在glassfish环境下运行应用程序时可能会出现问题。
如果您正在处理分布式事务,则必须使用“JTA”作为事务管理器。
答案 2 :(得分:1)
Java Transaction API(JTA)是Java Enterprise Edition(Java EE)API之一,允许在Java环境中跨多个XA资源完成分布式事务。
答案 3 :(得分:-1)
J2EE应用程序包括通过2个规范的suppoart fot DT JTA ---> Java Transaction API.highe级实现并始终启用 JTS ---> Java Transaction Service。