<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Java%E4%BA%8B%E5%8A%A1API</id>
	<title>Java事务API - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Java%E4%BA%8B%E5%8A%A1API"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Java%E4%BA%8B%E5%8A%A1API&amp;action=history"/>
	<updated>2026-06-27T22:01:05Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Java%E4%BA%8B%E5%8A%A1API&amp;diff=652172&amp;oldid=prev</id>
		<title>imported&gt;TendouAris：​/* growthexperiments-addlink-summary-summary:2|0|0 */</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Java%E4%BA%8B%E5%8A%A1API&amp;diff=652172&amp;oldid=prev"/>
		<updated>2025-12-20T04:06:59Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;growthexperiments-addlink-summary-summary:2|0|0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Java事务API&amp;#039;&amp;#039;&amp;#039;（&amp;#039;&amp;#039;&amp;#039;Java Transaction API&amp;#039;&amp;#039;&amp;#039;，简称&amp;#039;&amp;#039;&amp;#039;JTA&amp;#039;&amp;#039;&amp;#039; ）是一个[[Java EE|Java企业版]]的[[应用程序接口]]，在[[Java]]环境中，允许完成跨越多个[[X/Open XA|XA]]资源的分布式事务。JTA是在[[JCP|Java社区过程]]下制定的规范，编号JSR 907。JTA提供：&lt;br /&gt;
&lt;br /&gt;
* 划分事务边界&lt;br /&gt;
* X/Open XA API允许资源参与到事务中。&lt;br /&gt;
&lt;br /&gt;
== X/Open XA体系结构==&lt;br /&gt;
在X/Open XA的体系结构中，事务管理器或[[事务处理监控器]] （TP monitor）协调 资源跨越多个资源，如数据库和[[消息队列]]的事务。每一个资源都有自己的管理器。资源管理器通常拥有自己的用于操纵资源的API，例如关系型数据库使用的[[Java 数据库连接|JDBC]]。 此外，资源适配器允许事务管理器协调该资源管理器和其他资源管理器之间的分布式事务。最后，与事务管理器通讯的应用程序开始，提交，或回滚事务。应用程序同样需要使用资源自己的API与不同的资源通讯，修改资源。&lt;br /&gt;
&lt;br /&gt;
== JTA对X/Open XA体系结构的实现 ==&lt;br /&gt;
JTA API包括两个Java包下的类：&lt;br /&gt;
* {{Javadoc:EE|package=javax.transaction|javax/transaction}}&lt;br /&gt;
* {{Javadoc:EE|package=javax.transaction.xa|javax/transaction/xa}}&lt;br /&gt;
&lt;br /&gt;
JTA是以X/Open XA体系结构为基础设计的，但他定义了两种不同的事务边界划分的API。应用服务器,如[[EJB]]服务器，与应用组件区别对待。JTA提供了一个接口，{{Javadoc:EE|package=javax.transaction|javax/transaction|TransactionManager}}，这是供应用服务器自己进行开始，提交或回滚事务使用悳，同时还提供了另外一个接口{{Javadoc:EE|package=javax.transaction|javax/transaction|UserTransaction}}，这是供一般客户代码，如[[Java Servlet]]或是EJB管理事务使用的。&lt;br /&gt;
&lt;br /&gt;
为了通过事务管理器管理，JTA架构要求每一个资源管理器必须实现{{Javadoc:EE|package=javax.transaction.xa|javax/transaction/xa|XAResource}}接口，如前面所述，每一个资源会有一个自己的特定的API，例如：&lt;br /&gt;
* 关系型数据库使用[[Java数据库连接|JDBC]]&lt;br /&gt;
* 消息服务使用[[Java消息服务|JMS]]&lt;br /&gt;
* 一般的企业信息系统（EIS）的资源使用[[J2EE连接器架构]]。&lt;br /&gt;
&lt;br /&gt;
== Java事务API ==&lt;br /&gt;
Java事务API由三个部分组成：&lt;br /&gt;
*UserTransaction - 高层的应用事务划分接口，供客户程序使用&lt;br /&gt;
*TransactionManager - 高层的事务管理器接口，供应用服务器使用&lt;br /&gt;
*XAResource，X/Open XA协议的标准Java映射，供事务性资源管理器使用。&lt;br /&gt;
&lt;br /&gt;
=== UserTransaction接口 ===&lt;br /&gt;
&lt;br /&gt;
javax.transaction.UserTransaction接口给应用程序提供了编程控制事务边界的能力。该接口可以供Java客户端程序或EJB使用。&lt;br /&gt;
&lt;br /&gt;
UserTransaction的begin方法开始一个全局事务，并将该事务与调用线程关联。事务到线程的管理是由事务管理器完成的，对应用程序透明的。&lt;br /&gt;
&lt;br /&gt;
对嵌套事务的支持不是必须的。如果调用线程的上下文已经与事务关联，并且事务管理器的实现并不支持嵌套的事务，UserTransaction的begin方法调用时将抛出NotSupportedException。&lt;br /&gt;
&lt;br /&gt;
底层的事务管理器的实现负责提供不同应用程序间事务上下文的传播，事务管理器位于客户端和服务器计算机上。&lt;br /&gt;
传播的事务上下文的格式由客户端和服务器计算机协商确定。例如，如果事务管理器是JTS规范的实现，将使用CORBA OTS 1.1规范中描述的事务上下文传播格式。事务上下文的传播对于应用程序来说是透明的。&lt;br /&gt;
&lt;br /&gt;
== EJB服务器对UserTransaction的支持 ==&lt;br /&gt;
&lt;br /&gt;
，[[EJB]]服务器需要支持UserTransaction接口，以供Bean管理事务的EJB使用。通过EJBContext的getUserTransaction方法，EJB构件可以获取到UserTransaction接口。这样，EJB应用程序不需要与事务管理器直接交互，就可以划分事务边界。取而代之的是EJB依赖于EJB服务器提供EJB规范中定义的所有事务处理。（EJB服务器和事务管理器之间的交互对于应用是透明。实现事务管理的责任是在EJB容器和服务的提供商。&amp;lt;ref&amp;gt;[http://cds-esd.sun.com/ESD24/JSCDL/ejb/3.0-fr/ejb-3_0-fr-spec-ejbcore.pdf?AuthParam=1269290256_bf79870723e592b88232b28f0bc403bc&amp;amp;TicketId=B%2Fw2nRyGS1lMTR1LO1BbkAHl&amp;amp;GroupName=CDS&amp;amp;FilePath=/ESD24/JSCDL/ejb/3.0-fr/ejb-3_0-fr-spec-ejbcore.pdf&amp;amp;File=ejb-3_0-fr-spec-ejbcore.pdf JSR 220: Enterprise JavaBeans,Version 3.0, EJB 3.0 Expert Group, Sun Microsystems, 2006]{{dead link|date=2017年11月 |bot=InternetArchiveBot |fix-attempted=yes }}&amp;lt;/ref&amp;gt;）&lt;br /&gt;
&lt;br /&gt;
下面的例子说明了Bean管理事务的会话Bean如何使用UserTransaction：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// 在会话Bean的setSessionContext方法中,&lt;br /&gt;
// 将Bean的上下文存放到一个实例变量中&lt;br /&gt;
&lt;br /&gt;
this.ctx = sessionContext;&lt;br /&gt;
&lt;br /&gt;
// 在Bean业务逻辑中&lt;br /&gt;
UserTransaction utx = ctx.getUserTransaction();&lt;br /&gt;
&lt;br /&gt;
// 开始一个事务&lt;br /&gt;
utx.begin();&lt;br /&gt;
&lt;br /&gt;
// 做一些事情&lt;br /&gt;
&lt;br /&gt;
// 提交&lt;br /&gt;
utx.commit();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 从JNDI获取UserTransaction ==&lt;br /&gt;
&lt;br /&gt;
如果环境中安装了JTA的实现，应可以从&amp;lt;code&amp;gt;java:comp/UserTransaction&amp;lt;/code&amp;gt;获取UserTransaction。&lt;br /&gt;
&lt;br /&gt;
== Java标准版对UserTransaction的支持 ==&lt;br /&gt;
&lt;br /&gt;
要使用JTA或UserTransaction提供的功能，应用服务器并不是必需的。&amp;lt;ref&amp;gt;{{Cite web |url=http://www.onjava.com/pub/a/onjava/2006/02/08/j2ee-without-application-server.html |title=J2EE Without the Application Server, Guy Pardon, O&amp;#039;Reilly Media, 2006 |access-date=2010-04-07 |archive-date=2018-05-05 |archive-url=https://web.archive.org/web/20180505092237/http://www.onjava.com/pub/a/onjava/2006/02/08/j2ee-without-application-server.html |dead-url=no }}&amp;lt;/ref&amp;gt; 现存在独立的JTA实现，这样，在普通的Java应用程序中都可以利用JTA/XA带来的可靠性。特别是在与类似[[Spring Framework|Spring]]工具一同使用的时候，这为开发可靠的Java应用程序提供了不同的范式。&lt;br /&gt;
&lt;br /&gt;
== 开源的JTA实现 ==&lt;br /&gt;
到2010年4月为止，JTA的开源实现有：&lt;br /&gt;
* [https://web.archive.org/web/20100414140721/http://docs.codehaus.org/display/BTM/Home Bittronix Transaction Manager]&lt;br /&gt;
* [http://www.atomikos.com/Main/TransactionsEssentials Atomikos Transactions Essentials] {{Wayback|url=http://www.atomikos.com/Main/TransactionsEssentials |date=20210110211116 }}&lt;br /&gt;
* [http://www.jboss.org/jbosstm JBossTM] {{Wayback|url=http://www.jboss.org/jbosstm |date=20131007070447 }} （以前称作Arjuna）&lt;br /&gt;
&lt;br /&gt;
以上所有事务管理器可以在J2SE环境中使用。&lt;br /&gt;
&lt;br /&gt;
== 参见 ==&lt;br /&gt;
* [[Java事务服务]]&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== 外部链接 ==&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/javaee/jta/index.html JTA specifications] {{Wayback|url=http://www.oracle.com/technetwork/java/javaee/jta/index.html |date=20190110153226 }}&lt;br /&gt;
* [https://web.archive.org/web/20060212144010/http://jcp.org/en/jsr/detail?id=907 JSR 907]&lt;br /&gt;
* [http://www.atomikos.com/Main/TransactionsEssentials Atomikos open source JTA implementation - for JTA in J2SE] {{Wayback|url=http://www.atomikos.com/Main/TransactionsEssentials |date=20210110211116 }}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Java Transaction Api}}&lt;br /&gt;
[[分类:Java]]&lt;br /&gt;
[[分类:应用程序接口]]&lt;/div&gt;</summary>
		<author><name>imported&gt;TendouAris</name></author>
	</entry>
</feed>