BPEL:Business Process Execution Language,业务流程执行语言。
BPEL是专为整合Web Services而指定的一项规范标准。
BPEL的作用是将一组现有的服务组合起来,从而定义一个新的Web服务。BPEL是一种实现此种组合的语言,组合服务的接口被描述为WSDL portType集合。
BPEL可以将服务进行编排、协调、组合,从而实现面向服务的体系结构(SOA)。
BPEL活动:
一个BPEL流程由多个步骤组成,每个步骤称为“活动”(Activity)。BPEL支持基元活动(Basic Activity)和结构活动(Structure Activity)。
基元活动是与外界进行交互最简单的形式,主要包括如下:
流程用于和外界进行交互的基元活动:<invoke>、<receive>、<reply>
<receive>:接受请求,接收是整个BPEL的起点,一旦BPEL引擎从客户端接收到请求消息,它将会启动一个BPEL流程。
<reply>:生成同步操作的响应,是整个BPEL的终点,BPEL流程将会把响应结果返回给服务请求者。
流程用于传输数据的基元活动:<assign>
<assign>:赋值,可以把数据从一个变量复制到另一个变量,也可以使用表达式来构造和插入新数据。
<invoke>:调用其它Web服务
<assige>赋值和<invoke>调用经常是一前一后的两个任务。这是因为在调用合作伙伴的服务时,需要先给合作伙伴的接口的输入变量赋值,然后再调用服务。
<invoke>调用活动是BPEL中最重要的活动,其它所有的活动都是为了辅助整个活动,它将会调用合作伙伴的服务,得到返回结果。
<throw>:发出故障信号,抛出相关的故障和异常
<wait>:使流程等待一段时间或者到达某个截止期限后再执行
<terminate>:用于终止整个流程,放弃所有流程实例的执行
<empty>:该活动不执行任何动作,是个空活动,目的是为了结构的完整性
<compensate>:通过该活动做一些补偿动作,通常需要和scope联合使用。只能从故障处理程序或另一个补偿处理活动中调用这个活动。补偿处理程序只能被调用一次。
为了组合基元活动,BPEL支持几个结构活动,其中最常见的如下:
<sequence>:表示两个活动是按顺序一前一后地进行,前面的活动不完成,后面的活动不开始。当sequence中最后一个活动完成后,该sequence活动也就完成了。
<flow>:表示两个或多个活动可以并行。
<switch>:用于实现分支,该活动中可以根据不同的行为分成几个活动分支,分支条件一般用布尔表达式描述。当被选中的分支里的活动完成之后,switch活动也就完成了。
<while>:用于定义循环,while活动支持指定在while里的活动的反复执行,活动重复至给出的while条件的布尔表达式值为false
<pick>:选择多个路径之一。pick活动等待一组事件中的一个事件的发生,然后执行与发生的事件关联的活动。事件的发生是相互排斥的,只有一个分支能够被选择,当pick活动接受处理一个事件后,pick将不再接受其它事件。
<scope>:scope活动为嵌套在其中的活动提供故障处理功能和补偿处理功能。
在BPEL中,与业务流程交互的服务被模拟成伙伴,每个伙伴由partnerLinkType来描述。每个BPEL业务使用<partnerLink>定义伙伴链接,使用<variable>声明变量。
通常,对那些持续时间较长的操作使用异步Web服务,对在相对较短时间内返回结果的操作使用同步Web服务。如果使用异步服务,则BPEL流程也通常是异步的。