Java 教程:理解 JTS
什么是 JTS?
JTS
是一个 组件事务监视器(component transaction monitor)。这是什么意思?我们将介
绍事务处理监视器(TPM)这个概念,TPM 是一个程序,它代表应用程序协调分布式事务
的执行。TPM 与数据库出现的时间长短差不多;
在 60 年代后期,IBM
首先开发了 CICS,
至今人们仍在使用。经典的(
或者说 程序化)TPM 管理被程序化定义为针对事务性资源(比
如数据库)
的操作序列的事务。随着分布式对象协议,如 CORBA、DCOM
和 RMI 的出现,
人们希望看到事务更面向对象的前景。将事务性语义告知面向对象的组件要求对 TPM 模
型进行扩展 ― 在这个模型中事务是按照事务性对象的调用方法定义的。JTS 只是一个组
件事务监视器(
有时也称为 对象事务监视器(object transaction monitor))
,或称为 CTM。
JTS
和 J2EE
的事务支持设计受 CORBA 对象事务服务(CORBA Object Transaction
Service,OTS)的影响很大。实际上,JTS
实现 OTS
并充当 Java
事务 API(Java Transaction
API)―
一种用来定义事务边界的低级 API ―
和 OTS
之间的接口。使用 OTS 代替创建一
个新对象事务协议遵循了现有标准,并使 J2EE
和 CORBA 能够互相兼容。
乍一看,从程序化事务监视器到 CTM 的转变好像只是术语名称改变了一下。然而,
差别不止这一点。当 CTM 中的事务提交或回滚时,与事务相关的对象所做的全部更改都
一起被提交或取消。但 CTM 怎么知道对象在事务期间做了什么事?
象 EJB 组件之类的事
务性组件并没有 commit()
或 rollback() 方法,它们也没向事务监视器注册自己做了什么事。
那么 J2EE 组件执行的操作如何变成事务的一部分呢?
透明的资源征用
当应用程序状态被组件操纵时,它仍然存储在事务性资源管理器(例如,数据库和消
息队列服务器)
中,这些事务性资源管理器可以注册为分布式事务中的资源管理器。在第 1
部分中,我们讨论了如何在单个事务中征用多个资源管理器,事务管理器如何协调这些
资源管理器。资源管理器知道如何把应用程序状态中的变化与特定的事务关联起来。
但这只是把问题的焦点从组件转移到了资源管理器 ― 容器如何断定什么资源与该事
务有关,可以供它征用?
请考虑下面的代码,在典型的 EJB
会话 bean 中您可能会发现这
样的代码:
清单 1. bean 管理的事务的透明资源征用
1 InitialContext ic = new InitialContext();
2 UserTransaction ut = ejbContext.getUserTransaction();
3 ut.begin();