通过使用此支持,可以构建 J2EE 应用程序来将一组更改集中到一个事务或单个工作单元中,以便全部完成一个事务中的所有更改或全部回滚这些更改。这使得应用程序能够在符合 J2EE 的应用程序服务器(例如,WebSphere® Application Server)中运行,从而以协调方式访问 IMS 事务和数据。全局事务管理可确保 IMS 中数据的完整性。
当对受保护资源进行更改时,您一定想确保正确执行了更改。例如,假定您是一个银行客户,想要将资金从储蓄帐户转帐至支出帐户。并且希望确保从储蓄帐户扣除资金的同时就将资金添加到支出帐户中。您不希望此事务只完成一部分,即,从储蓄帐户中扣除了资金,但资金未添加到支出帐户中。
再举一个例子,您需要购买一张从旧金山飞往巴黎的机票,但是没有直达班机。除非您能够同时预订到从旧金山飞往芝加哥再从芝加哥飞往巴黎的机票,否则将无法飞往巴黎。也就是说,由于只能订到部分行程的机票,对您来说没什么用处,因此您将“回滚”飞往巴黎的决定。
在这两个示例中,都需要完成几个较小的事务才能完成整个事务。如果这些小事务中的任何一个出现问题,您就不想落实整个事务,例如,转帐或飞往巴黎。而是想回滚整个事务的每个步骤,以便不落实任何一个小事务。为了成功地转帐或飞往巴黎,您想对各个小事务进行统一管理和协调,以便完成整个事务。
为了确保经过协调的事务处理,J2EE 平台(它由 J2EE 应用程序服务器、J2EE 应用程序组件和 J2EE 连接器体系结构资源适配器组成)提供了一种分布式事务处理环境,在这种环境中,将透明地管理事务,并且会以一种协调方式在多个平台之间更新和恢复资源。
符合 J2EE 的应用程序服务器(例如,WebSphere Application Server)将 Java™ 事务管理器(也称为外部协调程序)和资源适配器(例如,IMS TM 资源适配器)配合使用,与应用程序组件(例如,Java servlet 或 Enterprise Java Bean(EJB))和资源管理器(例如,IMS 或 DB2®)通信,从而协调事务。
如果事务管理器协调的是一个事务,则将该事务视为全局事务。如果一个事务管理器与多个资源管理器协同工作来协调一个事务,则外部协调程序将使用两阶段落实协议。
在前面的银行示例中,您想将资金从储蓄帐户转帐至支出帐户。如果储蓄帐户信息与支出帐户信息位于不同的资源管理器上(例如,储蓄帐户位于 IMS 上,而支出帐户位于 DB2 上),则应用程序服务器(WebSphere Application Server)中的事务管理器将使用两阶段落实处理来透明地协调 IMS 与 DB2 之间的更改。更具体地说,事务管理器将与 IMS 资源适配器协同工作来协调 IMS 中的更改。
IMS TM 资源适配器设计为与 J2EE 平台中的 Java 事务管理器、z/OS® 的资源恢复服务(RRS)以及 IMS Connect 一起工作,以对 IMS 和其他受保护资源进行一致更改。
为了参与对 IMS 的两阶段落实处理,IMS TM 资源适配器使用 IMS OTMA 同步级别同步点协议。当远程应用程序请求更改时,为了参与全局事务与两阶段落实处理,IMS 使用 z/OS 上的 RRS。
从 IMS 的角度来说,RRS 相当于一个“外部协调程序”或同步点管理器,用来协调资源的更新和恢复。IMS TM 资源适配器和 IMS Connect 通过与在应用程序服务器上运行的 Java 事务管理器和 z/OS 上的 RRS 进行交互,以允许 J2EE 平台上运行的全局事务参与对主机上运行的 IMS 进行的协调更新。
当将 J2EE 应用程序设置为参与全局事务时,必须选择可用于 IMS Connector for Java 与 IMS Connect 之间进行通信的两种通信协议的其中一种。IMS Connector for Java 和 IMS Connect 支持的两种通信协议是 TCP/IP 和“本地选项”。
在全局事务作用域中,J2EE 应用程序组件可以通过与 IMS Connect 建立 TCP/IP 连接来访问 IMS 事务。在底层,IMS TM 资源适配器使用 X/Open(XA)协议与 Java 事务管理器交互来管理全局事务和两阶段落实处理。XA 协议定义了一组接口和交互,用来描述 Java 事务管理器与资源管理器在分布式事务处理环境中如何进行交互。IMS TM 资源适配器与 IMS Connect 使用的都是 XA 协议,并与 IMS 和 z/OS 上的资源恢复服务(RRS)协同工作来进行一致更改。
限制:必须使 RRS 与 IMS Connect 在同一 MVS™ 系统上运行。
要对 IMS Connect 设置 RRS,请参阅 IMS Connect Guide and Reference(SC27-0946)。有关用于全局事务与两阶段落实处理的 TCP/IP 通信协议的详细信息,请参阅平台注意事项和通信协议注意事项和两阶段落实环境注意事项。
如果 J2EE 应用程序组件在 WebSphere Application Server for z/OS 上运行,则可以使用“本地选项”来提交 IMS 事务消息,并且参与全局事务处理。此事务处理由 z/OS 上的资源恢复服务(RRS)以及 WebSphere Application Server for z/OS 来协调。IMS Connector for Java 符合 RRS 的要求,专门设计为与 RRS 协同工作,以便 WebSphere 中的 Java 事务管理器与作为资源管理器的 IMS 可以一起工作来对多个受保护资源进行一致更改。当运行使用“本地选项”的全局事务时,IMS TM 资源适配器不使用 XA 协议。
有关用于全局事务与两阶段落实处理的“本地选项”通信协议的信息,请参阅平台注意事项和通信协议注意事项、两阶段落实先决条件和两阶段落实环境注意事项。
本地事务
“J2EE 连接体系结构”定义 javax.resource.cci.LocalTransaction 接口,以允许资源管理器而不是事务管理器在本地协调事务。但是,IMS TM 资源适配器仅支持使用事务管理器进行事务协调。因此,IMS Connector for Java 不支持 javax.resource.cci.LocalTransaction 接口。如果您调用 IMSConnection.getLocalTransaction() 方法,则将抛出 NotSupportedException。要将事务支持与 IMS TM 资源适配器配合使用,需要使用 JTA 事务接口,或者在应用程序的部署描述符中设置适当的事务属性。有关更多信息,请参阅在应用程序中使用全局事务支持。
一阶段落实处理
IMS TM 资源适配器支持事务管理器执行一阶段落实优化。因此,如果事务作用域内的所有更改都属于同一个 IMS 资源,则事务管理器可以执行一阶段落实优化,以便事务管理器直接将第二阶段的落实请求发送至资源管理器用于落实更改,而不需要发送第一阶段的准备请求。
非全局事务处理
如果应用程序中未使用全局事务处理(例如,当事务属性设置为 TX_NOTSUPPORTED 时),则所有非全局事务处理都将使用“同步返回”(OTMA SyncLevel=None)。当落实了 IMS 事务时,就已将输出返回到客户机。
全局事务作用域中的对话式事务处理
IMS 使用对话式程序来将处理分成一系列互相关联的“客户机到程序”以及“程序到客户机”的交互,也称为循环。每个循环就是一种类型的 IMS 对话式事务。当一个事务包含多个部分时,就要使用对话式处理。将单独落实或回滚组成一个大型事务的每一部分。
有关使用全局事务支持的更多信息,请参阅位于以下网址的 IMS TM 资源适配器 Web 页面: www.ibm.com/ims,并访问 Support 页上的 Hints and Tips。