16.1.1. reply元素
当制订了同步交换的时候,哪里有receive 元素, 哪里就有 reply 元素。reply 元素负责建立细节,关于返回响应消息到所要求的客户端伙伴服务。由于这个元素与它相应的receive 元素的相同的partnerLink 元素关联,它重复了许多同样的属性(表16.3)。
表16.3. reply 元素属性
属性 描述
partnerLink 建立在receive元素中的相同的partnerLink 元素。
portType 显示在receive元素中的相同的portType 元素。
operation 来自于receive元素中的相同的operation 元素。
variable 流程服务的variable 元素拥有返回到伙伴服务的消息。
messageExchange WS-BPEL 2.0规范被提议增加了这个可选属性。它允许明确地与消息活动 关联的reply元素能够接收消息(比如receive元素)。
示例16.9. reply 元素与先前显示的 receive 元素可能的配对
<reply partnerLink=“client”
portType=“tns:TimesheetSubmissionInterface”
operation=“Submit”
variable=“TimesheetSubmissionResponse”/>
16.1.1. switch、case及otherwise元素
这三个结构化的活动元素允许我们增加条件化的逻辑到我们的流程定义中,与在传统编程语言中使用的所熟悉的select case/case else 结构相类似。switch 元素建立了条件逻辑的工作范围,在其中多个case 结构能够嵌套,以检查使用condition 属性的各种条件。当condition 属性解析为“true”的时候,定义在相应case 结构中的活动就被执行。
otherwise 元素能够被添加作为switch 结构末尾的catch all。当所有前述的case 条件失败时,otherwise 结构中的活动就被执行。
示例16.10. case 元素的框架,在其中condition 属性使用getVariableData函数来对 EmployeeResponseMessage 的变量内容和0值作比较
<switch>
<case condition=
“getVariableData('EmployeeResponseMessage',
'ResponseParameter')=0”>
...
</case>
<otherwise>
...
</otherwise>
</switch>
注意
在WS-BPEL2.0中提议了将switch、case、与 otherwise 元素替换为if、elseif、与 else 元素。
16.1.2. assign、copy、from及to元素
这组元素只是提供给我们在进程变量之间复制值的能力,它允许我们贯穿整个进程来传送数据,因为信息会在进程的执行过程中接收和修改。
示例16.11. 在该 assign 结构中, TimesheetSubmissionFailedMessage 变量的内容被复制到两个不同的消息变量中
<assign>
<copy>
<from variable=“TimesheetSubmissionFailedMessage”/>
<to variable=“EmployeeNotificationMessage”/>
</copy>
<copy>
<from variable=“TimesheetSubmissionFailedMessage”/>
<to variable=“ManagerNotificationMessage”/>
</copy>
</assign>
注意 copy 结构可以处理各种数据传输函数(例如,只有部分消息能够被抽取和复制到变量中)。 from 与 to 元素同样也可以包含可选的 part 与 query 属性,允许引用变量的特定的部分或特定的值。
16.1.3. faultHandlers、catch及catchAll元素
这个结构包含多个catch 元素,每个都提供活动为特定类型的错误条件进行异常处理。故障会通过接收WSDL定义的故障消息来生成,或者它们可以通过使用throw元素被明确触发。faultHandlers 结构可以由catchAll 元素构成(或终止)以提供缺省的错误处理活动。
示例16.12. faultHandlers 结构包含catch 与 catchAll 子结构
<faultHandlers>
<catch faultName=“SomethingBadHappened”
faultVariable=“TimesheetFault”>
...
</catch>
<catchAll>
...
</catchAll>
</faultHandlers>
16.1.4. 其他WS-BPEL元素
下列表格提供了对WS-BPEL语言其他相关部分的简要描述。
表16.4. 快速参考表提供了对附加WS-BPEL元素的简短描述 (按照字母顺序排列)
元素
描述
compensationHandler
WS-BPEL流程定义能够定义出补偿流程,当确定的条件发生时加入一系列的活动以证明补偿的正当性。这些活动就被保留在compensationHandler结构中。(更多关于补偿的信息,参见第6章中的业务活动一节。)
correlationSets
WS-BPEL使用这个元素来实现相关性,主要和进程实例的消息关联。消息可以属于多个correlationSets。更进一步,消息属性可以在WSDL文档中定义。
empty
这个简单的元素允许你声明在特定的条件下没有活动应该发生。
eventHandlers
eventHandlers 元素使得进程响应处理逻辑执行过程中的事件。这个结构可以包含onMessage 和 onAlarm 子元素,在特定类型的消息到达时触发处理活动(分别在预定义的一段时间后,或者在指定的日期和时间)
exit
参见下面的 terminate 元素描述。
flow
flow 结构允许你定义一系列会并发产生并需要在所有都结束执行后完成的活动。在flow 结构中的活动之间的从属关系使用子元素link来定义。
pick
与 eventHandlers 元素类似,这个结构也能够包含子元素onMessage 和 onAlarm ,但更多地用于响应针对进程执行挂起的外部事件。
scope
在流程定义中的部分逻辑能够被细分到使用这个结构的范围中。它允许你定义variables、faultHandlers、correlationSets、compensationHandler以及eventHandlers元素定位到这个范围。
terminate
该元素有效地终止进程实例。WS-BPEL 2.0规范建议这个元素重命名为exit。
throw
WS-BPEL支持众多的故障条件。使用 throw 元素允许你明确地触发故障状态以响应特定的条件。
wait
wait 元素能够被设置成在进程中引入有意识的延迟。它的值可以是指定时间或是预定义的日期。
while
这个有用的元素允许你定义循环。它包含了condition 属性,与case 元素一起,只要在“true”的时候,它会继续执行在while结构中的活动。