Web Service 原子事务概述

应用程序服务器中的 Web Service 原子事务 (WS-AT) 支持为 Web Service 环境提供事务服务质量。分布式 Web Service 应用程序以及它们使用的资源可以参与分布式全局事务。现在,Liberty 中也支持 WS-AT。

Web Service 协议提供了定义 Web Service 应用程序的标准方法,不论使用哪种产品、平台或编程语言,应用程序都可以使用它来操作。WS-AT 支持是下列规范在应用程序服务器中的实现。这些规范定义了一组 Web Service,它们使 Web Service 应用程序可以参与分布在异构 Web Service 环境中的全局事务。

WS-AT 支持是互操作性协议,它没有为事务支持引入新的编程接口。全局事务定界由标准企业应用程序使用 Java™ 事务 API (JTA) UserTransaction 接口提供。如果在全局事务下运行的应用程序组件发出 Web Service 请求,那么 WS-AT CoordinationContext 将隐式传播到目标 Web Service,但是仅当如有关配置事务部署属性的主题中所述设置了相应的应用程序部署描述符时,才会进行这样的传播,

如果应用程序服务器是为包含 WS-AT Coordination 上下文的 Web Service 请求托管目标端点的系统,那么该应用程序服务器将在成为事务上下文(目标 Web Service 应用程序将在该上下文中运行)的目标运行时环境中自动建立下级 JTA 事务。

下图显示包含 WS-AT CoordinationContext 的 Web Service 请求在两个应用程序服务器之间共享的事务上下文。

图 1. 在两个应用程序服务器之间共享的事务上下文
原子事务包括应用程序服务器 1 上的 Web Service 客户机及其 XA 资源,以及应用程序服务器 2 上的 Web Service 应用程序及其 XA 资源。

缺省情况下,如果您启用 WS-AT 功能并在 Liberty 中的客户端开始事务,那么客户机事务中包含的所有 Web Service 操作都将会添加到全局事务。但是,如果您在当前全局事务的作用域以外运行任何代码,请将 UOWManager 与类型 UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION 配合使用。这样做可以起到暂挂和恢复该代码片段周围的全局事务的效果。

表 1. 用于确定是否能够在 Liberty 中将 WS-AT 全局事务用于出站客户机的条件
WS-AT 功能是否已启用 事务是否存在 WSDL 中是否存在策略断言 WS-AT 全局事务是否已启用
No No No No
No No 否,同时 Liberty 抛出异常
No No No
No 否,同时 Liberty 抛出异常
No No No
No 是 (wsp: Optional="false") 否,同时 Liberty 抛出异常
是 (wsp: Optional="true") No
No
表 2. 用于确定是否能够在 Liberty 中将 WS-AT 全局事务用于入站服务器的条件
WS-AT 功能是否已启用 SOAP 头中是否存在协调上下文 WSDL 中是否存在策略断言 WS-AT 全局事务是否已启用
No No No No
No No No
No No 否,同时 Liberty 抛出异常
No 否,同时 Liberty 抛出异常
No No No
No 是 (wsp: Optional="false") 否,同时 Liberty 抛出异常
是 (wsp: Optional="true") No
No

应用程序设计

WS-AT 是两阶段落实事务协议,并且仅适合持续时间短的事务。

WS-AT 最适合将事务上下文分布在部署于单个企业内的 Web Service 之间。只有请求/响应消息交换模式才会传递事务上下文,这是因为事务的发起方(应用程序或容器)在请求完成事务之前必须确保该事务中运行的所有业务任务均已完成。单向请求所调用的 Web Service 从来不会在请求客户机的事务中运行。

服务故障对 WS-AT 事务的影响类似于 Enterprise JavaBeans (EJB) 应用程序异常对事务的影响,如 EJB 规范所述。即使请求者 WS-AT 事务中运行的服务返回了故障,应用程序服务器也不会自动将该事务标记为“仅回滚”。请求者的异常处理程序选择该事务能否继续进行并选择是否将该事务标记为“仅回滚”。如果请求者在应用程序服务器中运行,那么可以使用标准 JTA 或 EJB API 将该事务标记为“仅回滚”。生成故障的服务组件在返回故障前可以自行将该事务标记为“仅回滚”。如果服务组件的实现遇到系统异常,那么它通常会允许它的容器处理该异常。应用程序服务器容器在处理由服务实现生成的系统异常时,会自动将接收到的所有事务上下文标记为“仅回滚”。


用于指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwlp_dep_wsatoverview_lib
文件名:cwlp_dep_wsatoverview_lib.html