引言
JTA(java Transaction API)答应应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序的JTA支持极大地增强了数据访问能力。
本文的目的是要提供一个关于的Java事务处理API(JTA)的高级的概述,以及与分布式事务相关的内容。一个事务处理定义了一个工作逻辑单元,要么彻底成功要么不产生任何结果。 一个分布式事务处理只是一个在两个或更多网络资源上访问和更新数据的事务处理,因此它在那些资源之间必然是等价的。在本文中,我们主要关心的是如何处理关系数据库系统。
我们要讨论的分布式事务处理(DTP)模型中包含的组件是:
应用程序
应用程序服务器
事务治理程序
资源适配器
资源治理程序
在以后的内容中,我们将描述这些组件以及它们与JTA和数据库访问的关系。
访问数据库
最好把分布式事务处理中包含的组件看作是独立的过程,而不是考虑它们在一个特定的电脑中的位置。这些组件中的一些可以保存在单机中,或者也可在好几台机器之间分布。 下面例子中的图表可以显示在一台特定的电脑上的组件,但是这些操作之间的关系是必须首要考虑的。
最简单的例子:用于本地数据库事务处理的应用程序
关系数据库访问的最简单的形式仅仅包括应用程序、资源治理程序和资源适配器。应用程序只不过是发送请求到数据库并且从数据库中获取数据的最终用户访问点
我们讨论的资源治理程序是一个关系数据库治理系统(RDBMS),比如Oracle或者SQL Server。所有的实际数据库治理都是由这个组件处理的。
资源适配器是外部空间之间的通信管道组件,或者是请求翻译器,在本例中,是应用程序和资源治理程序。在我们的讨论中,这是一个JDBC驱动程序。
下面的描述是资源治理程序本地事务处理的一个描述,也就是说,一个事务处理被被限制在一个特定的企业数据库。
应用程序发送一个用于JDBC驱动程序数据的请求,然后翻译这个请求并把它通过网络发送到数据库中。 数据库把数据发送回驱动程序,然后把翻译的结果发送回应用程序,如下图所示:
这个例子说明了在一个简化的系统中的基本的信息流;然而,今天的企业使用的应用程序服务器都添加了其他的组件到这个过程处理中。
应用程序服务器
应用程序服务器是事务处理操作的另一个组件。应用程序服务器处理大部分的应用程序操作并且获得最终用户应用程序的一些负载。基于前面的例子,我们可以看出应用程序服务器在事务处理上添加了另一个操作层:
到目前为止,我们的例子说明了单个的本地事务处理,并且描述了分布式事务处理模型的五个组件中的四个。第五个组件,事务治理程序只有当事务将要被分配的时候才会开始被考虑。
分布式事务处理和事务治理程序
像我们前面所提到的,一个分布式事务处理是一个在两个或更多网络资源上访问和更新数据的事务处理。
这些资源可以由好几个位于一个单独服务器上的不同的关系型数据库治理系统组成,比如说Oracle、SQL Server和Sybase;它们也可以包含存在于若干不同的服务器上的同一种数据库的若干个实例。在任何情况下,一个分布式事务处理包括各种的资源治理程序之间的协同作用。这个协同作用是事务治理函数。
事务治理程序负责作出要么提交(commit)要么退回(rollback)任何分布式事务处理的决定。一个提交决定应该导致一个成功的事务处理;而退回操作则是保持数据库中的数据不变。 JTA指定一个分布式事务处理中的事务治理程序和另一个组件之间的标准Java接口:应用程序,应用程序服务器和资源治理程序。 这个关系被显示在下面的图表中:
在事务治理程序四周的数字框框相应于JTA的三个接口部分:
1—UserTransaction—javax.transaction.UserTransaction接口提供能够编程地控制事务处理范围的应用程序。 javax.transaction.UserTransaction方法开启一个全局事务并且使用调用线程与事务处理关联。
2—Transaction Manager—javax.transaction.TransactionManager接口答应应用程序服务器来控制代表正在治理的应用程序的事务范围。
3—XAResource—javax.transaction.xa.XAResource接口是一个基于X/Open CAE Specification的行业标准XA接口的Java映射。