技术开发 频道

基于WS-BPEL2.0的服务组合研究

    5. Activities
    BPEL中的活动包括基本活动(Basic activities)和结构化活动(Structured activities)。基本活动负责实现一定的原子功能,如赋值(Assign)、调用Web服务(Invoke)等。结构化活动对控制流逻辑进行编码,利用循环(While)、分支(Pick)等元素对基本活动进行组装整合,以实现系统所需的逻辑功能。
    每个活动都有两个可选的标准属性:

  • name。name用来提供活动的机器可处理名称。
  • suppressJoinFailure。表示在激活该活动失败时是否报错。

    name="NCName"?
    suppressJoinFailure="yes|no"?

    每个活动都有两个可选的标准元素:<source>和<targets>,这些元素用来建立链接间的同步关系。<source>子元素指的是从该行为有哪些<link>元素被发出,<target>是指该行为被哪些<link>所指向。一个行为内允许有多个<source>和多个<target>元素。这两个子元素可以用standard-elements代替。
  
<targets>?
   <joinCondition expressionLanguage="anyURI"?>?
      bool-expr
   </joinCondition>
   <target linkName="NCName" />+
</targets>
<sources>?
   <source linkName="NCName">+
      <transitionCondition expressionLanguage="anyURI"?>?
         bool-expr
      </transitionCondition>
   </source>
</sources>

    (1)基础活动

  • Invoke

    <invoke>活动被用来调用服务提供者提供的Web Services。调用可以是同步的(请求-响应),也可以是异步的(单向)。Invoke活动使用"partnerLink"来引用伙伴服务,通过"portType"和"operation"指定相应的WSDL接口和操作。以下是请求-响应操作的例子。
  
<invoke partnerLink="NCName"
   portType="QName"?
   operation="NCName"
   inputVariable="BPELVariableName"?
   outputVariable="BPELVariableName"?
   standard-attributes>
   standard-elements
   <correlations>?
      <correlation set="NCName" initiate="yes|join|no"?
         pattern="request|response|request-response"? />+
   </correlations>
   <catch faultName="QName"?
      faultVariable="BPELVariableName"?
      faultMessageType="QName"?
      faultElement="QName"?>*
      activity
   </catch>
   <catchAll>?
      activity
   </catchAll>
   <compensationHandler>?
      activity
   </compensationHandler>
   <toParts>?
      <toPart part="NCName" fromVariable="BPELVariableName" />+
   </toParts>
   <fromParts>?
      <fromPart part="NCName" toVariable="BPELVariableName" />+
   </fromParts>
</invoke>

  • Receive and Reply

    业务流程通过<receive>活动和相应的<reply>活动把服务提供给它的伙伴。<receive>活动指定了它期望从哪个伙伴那里接收,还指定了它期望伙伴调用的端口类型和操作。<reply>活动被用来发送对先前通过<receive>活动被接受的请求的响应。<receive>和<reply>活动中都通过"partnerLink"来引用预定义伙伴关系,而且需要设置"portType"和"operation"属性来声明流程实现的WSDL portType和操作。实例如下。
  
<receive partnerLink="NCName"
   portType="QName"?
   operation="NCName"
   variable="BPELVariableName"?
   createInstance="yes|no"?
   messageExchange="NCName"?
   standard-attributes>
   standard-elements
   <correlations>?
      <correlation set="NCName" initiate="yes|join|no"? />+
   </correlations>
   <fromParts>?
      <fromPart part="NCName" toVariable="BPELVariableName" />+
   </fromParts>
</receive>

  • Assign

    <assign>活动用来创建或修改variable内的数据。在业务流程中,经常需要变量variable间复制数据,比如用表达式构造和插入新数据。<assign>还可把endpoint references复制到partnerLinks,或把partnerLinks复制到endpoint references。语法格式如下所示。
  
<assign validate="yes|no"? standard-attributes>
   standard-elements
   (
   <copy keepSrcElementName="yes|no"? ignoreMissingFromData="yes|no"?>
      from-spec to-spec
   </copy>
   |
   <extensionAssignOperation>
      assign-element-of-other-namespace
   </extensionAssignOperation>
   )+
</assign>

  • Throw

    当业务流程需要显式地发出内部故障信号时可以使用<throw>活动。每个故障要有一个全局唯一的QName。<throw>活动必须为故障提供这样的名称,还可以可选地提供数据的变量,该变量提供有关故障的更多信息。故障处理程序可以使用这种数据,以分析和处理该故障,并添加进需要被发送到其它服务的所有故障消息。语法格式如下。
  
<throw faultName="QName" faultVariable="BPELVariableName"?
   standard-attributes>
   standard-elements
</throw>

  • Wait

    <wait>活动允许业务流程指定延迟时间的长短或到某个截止期限。实例如下。
  
<sequence>
   <wait>
      <until>'2002-12-24T18:00+01:00'</until>
   </wait>
   <invoke partnerLink="CallServer" portType="AutomaticPhoneCall"
      operation="TextToSpeech" inputVariable="seasonalGreeting" />
</sequence>

  • Empty

    在流程中,有时也会需要使用一些不执行任何任务的活动。比如在故障需要被捕获和取消时,<empty>活动被用于这个目的。<empty>的另一个用途是在一个<flow>中提供同步点。语法如下。
  
<empty standard-attributes>
   standard-elements
</empty>

  • ExtensionActivity

    BPEL流程定义能够包含之前规范未定义的新活动,通过<extensionActivity>声明,这个新活动被作为一个扩展活动。语法如下。
  
<extensionActivity>
   <anyElementQName standard-attributes>
      standard-elements
   </anyElementQName>
</extensionActivity>

  • Exit

    <exit>活动被用来立即终止活动实例,但所终止的运行活动不包含termination handling、fault handling或compensation behavior。语法如下。
  
<exit standard-attributes>
   standard-elements
</exit>

  • Rethrow

    <rethrow>活动被用在fault handler中重捕获已采集的故障信息,比如故障名、发生位置、故障数据等。它只能在fault handler(<catch>-<catchAll>)内部被使用。对故障数据的更改必须被<rethrow>忽略。例如,如果fault handler中的逻辑修改了故障数据,这时原始的故障数据可以通过调用<rethrow>被重新抛出,被修改的故障数据则是异于原始数据的。语法如下。
  
<rethrow standard-attributes>
   standard-elements
</rethrow>

0
相关文章