Java事务APIJava Transaction API,简称JTA )是一个Java企业版应用程序接口,在Java环境中,允许完成跨越多个XA资源的分布式事务。JTA是在Java社区过程下制定的规范,编号JSR 907。JTA提供:

  • 划分事务边界
  • X/Open XA API允许资源参与到事务中。

X/Open XA体系结构

编辑

在X/Open XA的体系结构中,事务管理器或事务处理监控器 (TP monitor)协调 资源跨越多个资源,如数据库和消息队列的事务。每一个资源都有自己的管理器。资源管理器通常拥有自己的用于操纵资源的API,例如关系型数据库使用的JDBC。 此外,资源适配器允许事务管理器协调该资源管理器和其他资源管理器之间的分布式事务。最后,与事务管理器通讯的应用程序开始,提交,或回滚事务。应用程序同样需要使用资源自己的API与不同的资源通讯,修改资源。

JTA对X/Open XA体系结构的实现

编辑

JTA API包括两个Java包下的类:

JTA是以X/Open XA体系结构为基础设计的,但他定义了两种不同的事务边界划分的API。应用服务器,如EJB服务器,与应用组件区别对待。JTA提供了一个接口,javax.transaction.TransactionManager,这是供应用服务器自己进行开始,提交或回滚事务使用悳,同时还提供了另外一个接口javax.transaction.UserTransaction,这是供一般客户代码,如Java Servlet或是EJB管理事务使用的。

为了通过事务管理器管理,JTA架构要求每一个资源管理器必须实现javax.transaction.xa.XAResource接口,如前面所述,每一个资源会有一个自己的特定的API,例如:

Java事务API

编辑

Java事务API由三个部分组成:

  • UserTransaction - 高层的应用事务划分接口,供客户程序使用
  • TransactionManager - 高层的事务管理器接口,供应用服务器使用
  • XAResource,X/Open XA协议的标准Java映射,供事务性资源管理器使用。

UserTransaction接口

编辑

javax.transaction.UserTransaction接口给应用程序提供了编程控制事务边界的能力。该接口可以供Java客户端程序或EJB使用。

UserTransaction的begin方法开始一个全局事务,并将该事务与调用线程关联。事务到线程的管理是由事务管理器完成的,对应用程序透明的。

对嵌套事务的支持不是必须的。如果调用线程的上下文已经与事务关联,并且事务管理器的实现并不支持嵌套的事务,UserTransaction的begin方法调用时将抛出NotSupportedException。

底层的事务管理器的实现负责提供不同应用程序间事务上下文的传播,事务管理器位于客户端和服务器计算机上。 传播的事务上下文的格式由客户端和服务器计算机协商确定。例如,如果事务管理器是JTS规范的实现,将使用CORBA OTS 1.1规范中描述的事务上下文传播格式。事务上下文的传播对于应用程序来说是透明的。

EJB服务器对UserTransaction的支持

编辑

EJB服务器需要支持UserTransaction接口,以供Bean管理事务的EJB使用。通过EJBContext的getUserTransaction方法,EJB构件可以获取到UserTransaction接口。这样,EJB应用程序不需要与事务管理器直接交互,就可以划分事务边界。取而代之的是EJB依赖于EJB服务器提供EJB规范中定义的所有事务处理。(EJB服务器和事务管理器之间的交互对于应用是透明。实现事务管理的责任是在EJB容器和服务的提供商。[1]

下面的例子说明了Bean管理事务的会话Bean如何使用UserTransaction:

// 在会话Bean的setSessionContext方法中,
// 将Bean的上下文存放到一个实例变量中

this.ctx = sessionContext;

// 在Bean业务逻辑中
UserTransaction utx = ctx.getUserTransaction();

// 开始一个事务
utx.begin();

// 做一些事情

// 提交
utx.commit();

从JNDI获取UserTransaction

编辑

如果环境中安装了JTA的实现,应可以从java:comp/UserTransaction获取UserTransaction。

Java标准版对UserTransaction的支持

编辑

要使用JTA或UserTransaction提供的功能,应用服务器并不是必需的。[2] 现存在独立的JTA实现,这样,在普通的Java应用程序中都可以利用JTA/XA带来的可靠性。特别是在与类似Spring工具一同使用的时候,这为开发可靠的Java应用程序提供了不同的范式。

开源的JTA实现

编辑

到2010年4月为止,JTA的开源实现有:

以上所有事务管理器可以在J2SE环境中使用。

参见

编辑

参考文献

编辑
  1. ^ JSR 220: Enterprise JavaBeans,Version 3.0, EJB 3.0 Expert Group, Sun Microsystems, 2006[永久失效連結]
  2. ^ J2EE Without the Application Server, Guy Pardon, O'Reilly Media, 2006. [2010-04-07]. (原始内容存档于2018-05-05). 

外部链接

编辑

📚 Artikel Terkait di Wikipedia

Jakarta EE

Java服务器页面(Java Server Pages) JSTL - Java服务器页面标准标签库(Java Server Pages Standard Tag Library) JTA - Java事务API(Java Transaction API) JavaMail Servlet - Java Servlet

Kafka

Connect连接到外部系统(用于数据输入/输出),并提供了Kafka Streams——一个Java流式处理库。 该设计受事务日志(英语:Transaction log)的影响较大。 Kafka最初是由领英开发,并随后于2011年初开源,并于2012年10月23日由Apache

JCP

JCP(Java Community Process)成立于1998年,是使有兴趣的各方参与定义Java的特征和未来版本的正式过程。 JCP使用JSR(Java规范请求,Java Specification Requests)作为正式规范文档,描述被提议加入到Java体系中的的规范和技术。

JTA

JTA可以指: 日本越洋航空(Japan Transocean Air),日本的一家航空公司。 Java事务API(Java Transaction API),Java平台上的处理事务的应用程序接口。

Java事务服务

Java事务服务(Java Transaction Service,简称JTS)是构建事务管理器的规范,将事务管理器映射到对象管理组织 (OMG)的基于CORBA体系架构的对象事务服务(OTS)上, 它使用IIOP在在多个JTS事务管理器之间传播事务。 Java Java事务API 对象事务服务 参见Sun公司的JTS描述。

ACID

ISBN 7-5053-7827-9.  [1] 交易並行控制 ISO/IEC 10026-1:1992(页面存档备份,存于互联网档案馆)(ISO文件,需訂購) 关系型数据库 InnoDB PostgreSQL 最终一致性 CAP定理 并发控制 Java事务API OSI模型 二阶段提交 增刪查改(CRUD)

Apache Axis2

Apache Axis Web服務 Java Web 服務開發架構 - web services framework XML 網路服務介面 - RPC/web services framework Web 服務引用架構 - Java API for invoking Web services

Elasticsearch

多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。 Elasticsearch使用Lucene,并试图通过JSON和Java API提供其所有特性。它支持facetting和percolating,如果新文档与注册查询匹配,这对于通知非常有用。