应用程序服务器中的 Web Service 业务活动支持
借助应用程序服务器中的 Web Service 业务活动 (WS-BA) 支持,不同系统上的 Web Service 可以对耦合程度比原子事务松散的活动进行协调。这类活动可能很难或完全不可能以原子方式进行回滚,因此在发生错误时需要一个补偿过程。
- WS-BA 是为业务活动定义协议的特定协调类型。规范包括:
- Web Service 协调 (WS-COOR) 指定 CoordinationContext 和注册服务,参与者 Web Service 可以使用他们来参与特定协调类型提供的协议。规范包括:
- Web Services 协调 V1.0
- Web Service 协调 V1.1
- Web Service 协调 V1.2
除了支持 WS-BA 互操作性协议之外,应用程序服务器还提供了用于创建业务活动和补偿处理程序的编程接口。借助此编程接口,您可以指定补偿数据并检查或改变业务活动的状态。
对于除 Web Service 以外的应用程序,如果他们只涉及 WebSphere® Application Server 之间的通信,那么您还可以将此补偿设施与这些应用程序配合使用。有关更多信息,请参阅相关主题。
可配置 WS-BusinessActivity 协议的策略。您可以配置客户机是否传播以及服务器是否接收 WS-BA 上下文。要确保客户机在进行出站服务请求时始终发送 WS-BusinessActivity 上下文,您必须使一个策略集与该客户机相关联,并且该策略集必须包括 WS-Transaction 策略类型,而此策略类型的 WS-BusinessActivity 设置必须为 Mandatory。另外,如果您知道客户机始终调用包含 WS-BusinessActivity BAAtomicOutcomeAssertion 策略类型属性的远程端点,那么可以将客户机配置为应用提供程序的 WS-Policy 配置,以使客户机自动沿用提供程序的必需策略。
要确保 Web Service 提供程序接收到的任何请求都包含 WS-BusinessActivity 上下文,必须使一个策略集与该提供程序相关联,并且该策略集必须包括 WS-Transaction 策略类型,而此策略类型的 WS-BusinessActivity 设置必须为 Mandatory。
要确保客户机或提供程序从不使用 WS-BusinessActivity 上下文,必须使一个策略集与客户机或提供程序相关联,并且该策略集包括 WS-Transaction 策略类型,而此策略类型的 WS-BusinessActivity 设置必须为 Never。您可以将此配置用于您不希望 Web Service 请求在客户机与提供程序之间创建紧密耦合的环境,例如,当企业之间存在请求时可以使用此配置。
如果没有与客户机或提供程序相关联的策略集,或者策略集未包括 WS-Transaction 策略类型,那么将使用缺省的 WS-Transaction 行为。
应用程序开发
不需要对 Web Service 应用程序完成特定的开发任务即可使用 WS-BA。
对于 JAX-RPC 应用程序,配置为在 BusinessActivity 作用域下运行的任何 Enterprise JavaBeans (EJB) 组件在发出出站 JAX-RPC Web Service 请求时都会自动传播该作用域。JAX-RPC 运行时支持 WS-BA 1.0。
对于 JAX-WS 应用程序,请通过执行下列操作来启用 WS-BA 支持:创建策略集、将 WS-Transaction 策略类型添加到策略集、(可选)配置策略类型并将策略集附加到 WS-BA 通信中将涉及的应用程序或客户机。对于 WS-BA,JAX-WS 运行时支持 WS-BA 1.0、WS-BA 1.1、WS-BA 1.2 和 WS-Policy 声明。
当 JAX-WS 运行时接收到入站请求时,WS-Transaction 1.0、WS-Transaction 1.1 和 WS-Transaction 1.2 规范级别均受支持。发送出站 JAX-WS 请求时,只能使用一个规范级别。如果目标 Web Service 的 Web 服务描述语言 (WSDL) 或者客户机的 WS-Transaction 策略类型中提供了 WS-Transaction WS-Policy 声明,那么将使用适用于客户机和目标 Web Service 的规范级别。例如,如果目标 Web Service 的主管环境只支持 WS-Transaction 1.0,那么将使用 WS-BA 1.0。如果这两个规范级别都不适用,或者未提供 WS-Transaction WS-Policy 声明,那么将使用事务服务设置中设置的缺省 WS-Transaction 规范级别。
- 如果客户机不考虑提供程序的策略,那么该客户机不会发送任何 Web Service 原子事务 (WS-AT) 或 WS-BA 上下文。此行为相当于 WS-Transaction 策略配置设置为 Never。
- 如果客户机考虑提供程序的策略,那么当提供程序的策略包括 WS-AT 或 WS-BA 声明时,该客户机将发送 WS-AT 或 WS-BA 上下文。此行为相当于 WS-Transaction 策略配置设置为 Supports。
- 服务器不接收任何 WS-AT 或 WS-BA 上下文。此行为相当于 WS-Transaction 策略配置设置为 Never。
WS-Transaction 策略声明
如果为提供程序的 WS-BusinessActivity 协议配置策略,那么这将影响为该策略类型的相关联 Web Service 生成的任何 WSDL 中包含的声明。用于描述使用了 WS-BusinessActivity 的客户机或提供程序的补偿需求的 WS-Policy 声明是 BAAtomicOutcomeAssertion。如果 WS-Transaction 策略类型的 WS-BusinessActivity 设置为 Mandatory 或 Supports,那么该策略声明将包括在 WSDL 中。
另外,应用程序服务器还可以解析、理解和应用它所解析的 WSDL 中的此类声明。
下面是一个 WSDL 示例。此示例中的 WS-BusinessActivity BAAtomicOutcomeAssertion 指出,调用端点时,请求消息必须包含 WS-BA 上下文,并且该上下文必须采用 WS-Transaction 1.0 或 1.1 格式。共有两个名称空间以及两个声明(各与一个 WS-Transaction 规范级别相对应),他们使用 WS-Policy ExactlyOne 运算符来指出客户机必须选择所要使用的规范级别。
<wsdl:definitions targetNamespace="bank.example.com"
xmlns:tns="bank.example.com"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsat11="http://docs.oasis-open.org/ws-tx/wsba/2006/06"
xmlns:wsat10="http://schemas.xmlsoap.org/ws/2004/10/wsba"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsp:Policy wsu:Id="BAPolicy">
<wsp:ExactlyOne>
<wsat11:BAAtomicOutcomeAssertion />
<wsat10:BAAtomicOutcomeAssertion />
<!-- omitted assertions -->
</wsp:ExactlyOne />
</wsp:Policy>
<!-- omitted elements -->
<wsdl:binding name="BankBinding" type="tns:BankPortType">
<!-- omitted elements -->
<wsdl:operation name="TransferFunds">
<wsp:PolicyReference URI="#BAPolicy" wsdl:required="true"/>
<!-- omitted elements -->
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>