6. Scopes
<scope>(作用域)提供影响其所包含活动的执行特性的上下文定义。这些上下文可以声明variables、partner links、message exchanges、correlation sets、event handlers、fault handlers、compensation handler和termination handler。当"root"的内容由<process>构造所提供时,上下文能够被嵌套分层。
尽管<process>和<scope>元素共享语法结构,有着相同的语义,但有如下不同:
- <process>结构不是一个活动;因此<scope>的标准属性和元素不适用于<process>结构;
- <process>结构中不包含compensation handler和termination handler;
- isolated attribute(隔离属性)不适用于<process>结构。
每个<scope>都有一个定义了正常行为的主活动(primary activity)。这个主活动可以是一个有着任意深度的多嵌套结构的复杂活动。语法结构如下。
<scope isolated="yes|no"? exitOnStandardFault="yes|no"?
standard-attributes>
standard-elements
<variables>?
...
</variables>
<partnerLinks>?
...
</partnerLinks>
<messageExchanges>?
...
</messageExchanges>
<correlationSets>?
...
</correlationSets>
<eventHandlers>?
...
</eventHandlers>
<faultHandlers>?
...
</faultHandlers>
<compensationHandler>?
...
</compensationHandler>
<terminationHandler>?
...
</terminationHandler>
activity
</scope>
BPEL还扩展了作用域的功能,具体体现在如下几个方面。
- 错误处理(Fault Handlers)
当一个行为出错的时候,会抛出一个错误消息。该消息首先会被自身的错误处理器所处理,<faultHandlers>与特定的<scope>关联,用于捕获<scope>内产生的异常。当异常发生时,BPEL正常执行流结束,控制流转入<faultHandlers>内执行。
<faultHandlers>类似于try-cache结构,它包含多个catch元素,每个都提供活动为特定类型的错误条件进行异常处理。故障会通过接收WSDL定义的故障消息来生成,或者它们可以通过使用throw元素被明确触发。<faultHandlers>结构可以由catchAll元素构成(或终止)以提供默认的错误处理活动。
- 事件处理(Event Handlers)
BPEL中定义了两类事件,一类是“消息事件”,即从外部传来的消息;另一类是由于达到用户定义的时间点而发出的警告。事件处理机制从作用域的一开始就激活,一直等待事件的到来而执行内部行为,也会随着作用域的结束而结束。
- 补偿处理(Compensation Handlers)
补偿处理是为了将流程的状态回滚,回到与进入作用域前一样。所需要做的就是将该作用域内已执行部分采用其他行为进行撤销,通常是调用一个效果相反的服务。(注:由于本文的篇幅限制补偿专题涉及内容不在此累述,请参考WS-BPEL2.0规范相关内容。)
7. WS-BPEL Abstract Process
对Web Services来说,一个流程服务平台要能为服务通讯建模,同时还要克服WSDL“无状态”的天生缺陷,提供点对点的消息交互、支持同步和异步通信、支持状态的持久化、长运行流程,及支持多成员同时参与的模型。在BPEL中,服务相互之间进行消息通信,是为了公布自己的信息、获得其它成员的信息并调用其它服务,这些可以用“抽象流程”的概念来概括。抽象流程指定服务双方交互的消息交换序列,不公开服务内部行为;可执行流程是指可执行业务双方的实际交互。抽象流程隐藏了内部细节和复杂性,简单而易于理解,这使得通过改良抽象业务流程而得到完全可执行的复杂业务流程成为可能。BPEL支持使用抽象流程来描述业务抽象接口的功能,使得服务的动态绑定成为可能。在BPEL中,描述抽象流程的语言是用于描述可执行流程的语言的子集,从而可以在同一种流程语言中指定可执行流程及其抽象视图。
至此,已经基本介绍了WS-BPEL2.0的基础语法构造。鉴于篇幅限制,无法在本文中具体展开BPEL语言的每个细节,请参考OASIS的WS-BPEL2.0的规范和相关文档。