BPEL是基于Web服务的,并且依赖于WSDL。一个BPEL流程可以发布为一个WSDL定义的服务,并像其它Web服务一样被调用。而且,BPEL希望一个Web服务合成所包含的全部外部Web服务,都是用WSDL服务契约定义的,这令BPEL流程可以调用其它BPEL流程,甚至可以递归的调用自己。值得注意的是BPEL不直接支持人机对话,BPEL所描写的过程仅与Web服务通信,而这些Web服务却可以提供与用户的信息交换,但它们不是用户本身。用BPEL编写的流程可以在任何支持BEPL规范的平台或产品上运行。
BPEL支持两类不同类型的业务流程
BPEL全称为WS-BPEL,WS-BPEL原名BPEL4WS,最初是在2002年7月随同BPEL4WS1.0规范的发布而出现的,它是IBM、Microsoft和BEA合作的成果。业务处理执行语言结合并且替换了IBM的WebServices Flow Language (WSFL)和微软公司的XLANG规范。
随着SAP和Siebel Systems等其它贡献者的加入,BPEL4WS规范的1.1版于2003年5月发布。该版本获得了较多的关注与厂商的支持,这导致产生大量的商业上遵循BPEL4WS的可用编排引擎。OASIS随后宣布将语言本身重新命名为Web服务业务流程执行语言(WS-BPEL),并于2007年4月12日正式发布WS-BPEL2.0规范,将其作为一个官方的、开放的标准。
BPEL现已成为被业界广泛认可和接受的进行Web服务编排的事实标准。
BPEL是建立在Web services技术之上的,因此与WSDL、XML、SOAP和UDDI等标准密切相关。下图展示了Web services技术中众多标准之间的关系。
BPEL流程模型是在WSDL定义的服务模型之上的一层。一个业务流程定义了一个流程实例和它的伙伴之间的交互。
为了定义一个业务流程,BPEL引入了一些新的XML元素,例如
下图展示了BPEL流程定义和WSDL文件之间的映射关系。
更多映射细节还需要查看BPEL规范。
BPEL支持两类任务或者说是行为:基本任务(basic tasks)和结构化任务(structured tasks)。
基本任务是指由业务流程的一个基本的步骤,任务内不会嵌套其它任务;而结构化任务从外部看是一个步骤而从内部看却有若干个步骤。
基本任务包括:
结构化任务包括:
以上是是BPEL4WS1.1中常见的任务,在最新发布的WS-BPEL2.0有较大的改变。支持更多新的任务或行为(if-then-else, repeatUntil, validate, forEach, extensionActivity)
关于WS-BPEL2.0,OASIS提供了webinars(web based seminar )推荐大家载下来看看
http://www.oasis-open.org/events/webinars/
BPEL支持四种表达式
BPEL同时支持一些操作符,如简单的算术运算(加、减、乘)、简单的比较运算(等于、不等于、小于、大于、小于等于、大于等于)、布尔运算(and和or运算)以及对xml格式的操作符。现有的BPEL可以通过外部的表达式语言来描述、计算表达式,这通过process的expressionLanguage属性进行表达式语言指定,现在只能指定为XPath1.0
WS-BPEL变量标识流程中交换的特定数据。BPEL流程在收到一个消息后,会为相应的变量赋值,以便后续请求能够访问。BPEL支持的变量类型包括三种:
1. 由WSDL文件所定义的消息类型(message type);
2. 由XML Schema所定义的简单类型(simple type);
3. 由XML Schema所定义的元素(element).
每一个变量都从属于所在的作用域(scope)之内。
作用域 (scope)是用来表示流程中的一个区域。如前所述,某个作用域内的变量只在该作用域内有效,但BPEL还扩展了作用域的功能,具体体现在如下几个方面:
错误处理(Fault Handler)
当一个行为出错的时候,会抛出一个错误消息。该消息首先会被自身的错误处理器(如果有的话)所处理。错误处理器会尝试三种解决方案:
事件处理(Event Handler)
BPEL中定义了两类事件:一类是“消息事件”,即从外部传来的消息;另一类是由于达到了用户定义的时间点而发出的警告。事件处理机制从作用域的一开始就激活,一直等待事件的到来而执行内部行为,也会随着作用域的结束而结束。
补偿服务(Compensation Handler)
补偿处理是为了将流程的状态回滚,回到跟进入作用域前一样。所需要做的就是将该作用域内已执行部分采用其它行为进行撤销,通常是调用一个效果相反的服务。
错误及补偿处理程序与OOP语言(如Java)中的catch子句类似。如果执行了某个抛出任务,就会触发错误及补偿处理程序。
BPEL核心组件有三部分组成
BPEL设计工具
大多基于Eclipse实现。
业务流模板
业务流模板遵守BPEL规范。它在设计阶段有BPEL设计工具生成,运行阶段由BPEL引擎执行。
BPEL引擎
执行任何与BPEL标准相符的业务流模板,主要功能包括调用Web服务,数据内容映射,错误处理,事务支持,安全等等。通常BPEL引擎与应用服务器集成在一起。
在一个典型的BPEL应用场景中,一家公司的业务分析将使用BPEL设计工具(GUI)来定义一个业务流程。一旦流程定义完毕,设计工具将在后台生成包含业务流程逻辑的业务逻辑模板。运行时,该流程模板将被BPEL引擎所执行。
Active BPEL Designer, Active BPEL Engine http://www.active-endpoints.com/products/index.html
BPWS4J, WBI Server Foundation
http://www.alphaworks.ibm.com/tech/bpws4j http://www-306.ibm.com/software/integration/wbisf/
Oracle BPEL Process Manager
http://www.oracle.com/technology/products/ias/bpel/index.html
Bexee
http://bexee.sourceforge.net
Cape Clear Orchestrator
http://www.capeclear.com/technology/bpel/index.shtml
Parasoft BPEL Maestro
http://www.parasoft.com/jsp/products/home.jsp?product=BPEL