
_START_ARTICLE_
Java事务API
_START_SECTION_
X/Open XA体系结构
_START_PARAGRAPH_
在X/Open XA的体系结构中，事务管理器或事务处理监控器 （TP monitor）协调 资源跨越多个资源，如数据库和消息队列的事务。每一个资源都有自己的管理器。资源管理器通常拥有自己的用于操纵资源的API，例如关系型数据库使用的JDBC。 此外，资源适配器允许事务管理器协调该资源管理器和其他资源管理器之间的分布式事务。最后，与事务管理器通讯的应用程序开始，提交，或回滚事务。应用程序同样需要使用资源自己的API与不同的资源通讯，修改资源。
_START_SECTION_
UserTransaction接口
_START_PARAGRAPH_
javax.transaction.UserTransaction接口给应用程序提供了编程控制事务边界的能力。该接口可以供Java客户端程序或EJB使用。_NEWLINE_UserTransaction的begin方法开始一个全局事务，并将该事务与调用线程关联。事务到线程的管理是由事务管理器完成的，对应用程序透明的。_NEWLINE_对嵌套事务的支持不是必须的。如果调用线程的上下文已经与事务关联，并且事务管理器的实现并不支持嵌套的事务，UserTransaction的begin方法调用时将抛出NotSupportedException。_NEWLINE_底层的事务管理器的实现负责提供不同应用程序间事务上下文的传播，事务管理器位于客户端和服务器计算机上。_NEWLINE_传播的事务上下文的格式由客户端和服务器计算机协商确定。例如，如果事务管理器是JTS规范的实现，将使用CORBA OTS 1.1规范中描述的事务上下文传播格式。事务上下文的传播对于应用程序来说是透明的。
_START_SECTION_
EJB服务器对UserTransaction的支持
_START_PARAGRAPH_
，EJB服务器需要支持UserTransaction接口，以供Bean管理事务的EJB使用。通过EJBContext的getUserTransaction方法，EJB构件可以获取到UserTransaction接口。这样，EJB应用程序不需要与事务管理器直接交互，就可以划分事务边界。取而代之的是EJB依赖于EJB服务器提供EJB规范中定义的所有事务处理。（EJB服务器和事务管理器之间的交互对于应用是透明。实现事务管理的责任是在EJB容器和服务的提供商。）_NEWLINE_下面的例子说明了Bean管理事务的会话Bean如何使用UserTransaction：_NEWLINE_// 在会话Bean的setSessionContext方法中,// 将Bean的上下文存放到一个实例变量中this.ctx = sessionContext;// 在Bean业务逻辑中UserTransaction utx = ctx.getUserTransaction();// 开始一个事务utx.begin();// 做一些事情// 提交utx.commit();
_START_SECTION_
从JNDI获取UserTransaction
_START_PARAGRAPH_
如果环境中安装了JTA的实现，应可以从java:comp/UserTransaction获取UserTransaction。
_START_SECTION_
Java标准版对UserTransaction的支持
_START_PARAGRAPH_
要使用JTA或UserTransaction提供的功能，应用服务器并不是必需的。 现存在独立的JTA实现，这样，在普通的Java应用程序中都可以利用JTA/XA带来的可靠性。特别是在与类似Spring工具一同使用的时候，这为开发可靠的Java应用程序提供了不同的范式。