业务流程执行语言 (BPEL)入门简介

系统 2186 0

文章仅供大家参考,所有评论 , 错误报告 , 其他信息以及批评 , 请邮寄到 Jeffery.Lee AT gmail.com 或者访问我的个人blog同我交流 ( http://ibuddie.spaces.live.com/ ) 。本文遵从 GNU 的自由文档许可证 (Free Document License) 的条款,欢迎转载,如若修改、散布,请注明文章原始出处和来源。


业务流程执行语言入门简介

Jeffery Lee @SEU

业务流程执行语言 Business Process Execution Language, BPEL, 发音为 'bipple' 'bee-pell' ),也叫业务过程执行语言,是一种基于 XML 的,用来描写业务流程的编程语言,被描写的业务流程的每个单一步骤则由 Web 服务来实现。 BPEL 的目标是要实现业务流程定义格式的标准化,使得公司之间可以通过 Web 服务无缝的进行交互。

BPEL 是基于 Web 服务的,并且依赖于 WSDL 。一个 BPEL 流程可以发布为一个 WSDL 定义的服务,并像其它 Web 服务一样被调用。而且, BPEL 希望一个 Web 服务合成所包含的全部外部 Web 服务,都是用 WSDL 服务契约定义的,这令 BPEL 流程可以调用其它 BPEL 流程,甚至可以递归的调用自己。值得注意的是 BPEL 不直接支持人机对话, BPEL 所描写的过程仅与 Web 服务通信,而这些 Web 服务却可以提供与用户的信息交换,但它们不是用户本身。用 BPEL 编写的流程可以在任何支持 BEPL 规范的平台或产品上运行。

BPEL 支持两类不同类型的业务流程

  • <!--[if !supportLists]--> 可执行流程 :定义了要执行的各项具体任务,以及完成业务流程所需要调用的各个服务,它们遵循编排规范,可以被一个编排引擎所执行。( orchestration

  • <!--[if !supportLists]--> 抽象流程 :详细说明了双方或多方的公共消息交换,但没有定义流程流的内部行为细节,不可执行。( choreography

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 服务技术的关系

BPEL 是建立在 Web services 技术之上的,因此与 WSDL XML SOAP UDDI 等标准密切相关。下图展示了 Web services 技术中众多标准之间的关系。

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:228.75pt; height:159.75pt'> <v:imagedata src="file:///E:\TEMP\msohtml1\01\clip_image001.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--> 业务流程执行语言 (BPEL)入门简介 <!--[endif]-->

BPEL 流程模型是在 WSDL 定义的服务模型之上的一层。一个业务流程定义了一个流程实例和它的伙伴之间的交互。

为了定义一个业务流程, BPEL 引入了一些新的 XML 元素,例如

  • Partners: 业务事务中的参与者( actors

  • Containers: 组成业务流程中的某一状态的一组消息

  • Operations: 所需 Web 服务的类型

  • Port types: operations 所要求的相关 Web 服务的关系

下图展示了 BPEL 流程定义和 WSDL 文件之间的映射关系。

<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" style='width:336pt;height:252pt'> <v:imagedata src="file:///E:\TEMP\msohtml1\01\clip_image003.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--> 业务流程执行语言 (BPEL)入门简介 <!--[endif]-->

更多映射细节还需要查看 BPEL 规范。

BPEL 包含的范围

  • 处理活动的顺序,特别是网络服务互操作。 

  • 消息和处理实例之间的关系。

  • 在发生错误和例外情况下的恢复行为。 

  • 处理角色之间的基于网络服务关系的双面性。

BPEL 语言支持的两类任务

BPEL 支持两类任务或者说是行为: 基本任务( basic tasks 结构化任务 ( structured tasks )

基本任务是指由业务流程的一个基本的步骤,任务内不会嵌套其它任务;而结构化任务从外部看是一个步骤而从内部看却有若干个步骤。

基本任务包括:

  • Invoke 任务——允许业务流程在某一个 Web 服务提供的 portType 上调用单向的( one-way )或请求 / 响应( request/respose )操作。

  • Receive 任务——允许业务流程停下来等待消息到来。

  • Reply 任务——允许业务流程对收到的消息发送一个回复消息。

  • Wait 任务——通知流程等待一段时间。

  • Assign 任务——把数据从一处复制到另一处。

  • Throw 任务——表明发生了某个错误。

  • Terminate 任务——终止整个编排实例。

结构化任务包括:

  • Sequence 任务——定义一个有序的任务序列

  • Switch 任务——根据条件选择某一分支

  • Pick 任务——停下并等待某一适当消息的到来,或者等到超时继续前进。只要多个触发器中的一个发生,就执行相应的活动,任务便结束了。

  • While 任务——定义循环执行,直至满足某一个条件的一组任务。

  • Flow 任务——表明一组应并行执行的步骤(可以通过建立连接来定义一个特定流程的执行序列)

以上是是 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 支持四种表达式

  • 布尔表达式。

  • 持续时间表达式。

  • 截止时间表达式。

  • 普通表达式,可以归结为 XML Schema 中所定义的 string, number boolean 格式。

BPEL 同时支持一些操作符,如简单的算术运算 ( 加、减、乘 ) 、简单的比较运算 ( 等于、不等于、小于、大于、小于等于、大于等于 ) 、布尔运算 (and or 运算 ) 以及对 xml 格式的操作符。现有的 BPEL 可以通过外部的表达式语言来描述、计算表达式,这通过 process expressionLanguage 属性进行表达式语言指定,现在只能指定为 XPath1.0

BPEL 中的变量

WS-BPEL 变量标识流程中交换的特定数据。BPEL流程在收到一个消息后,会为相应的变量赋值,以便后续请求能够访问。 BPEL 支持的变量类型包括三种 :

1. WSDL 文件所定义的消息类型 (message type);

2. XML Schema 所定义的简单类型 (simple type);

3. XML Schema 所定义的元素 (element).

每一个变量都从属于所在的作用域 (scope) 之内。

BPEL 中的作用域

作用域 (scope) 是用来表示流程中的一个区域。如前所述,某个作用域内的变量只在该作用域内有效,但 BPEL 还扩展了作用域的功能,具体体现在如下几个方面 :

错误处理( Fault Handler

当一个行为出错的时候,会抛出一个错误消息。该消息首先会被自身的错误处理器 ( 如果有的话 ) 所处理。错误处理器会尝试三种解决方案 :

  • <!--[if !supportLists]--> <!--[endif]--> 分析该错误信息,并根据指定规则找到对应的合适的行为进行处理;

  • <!--[if !supportLists]--> 使用一个 rethrow 行为,向外再次抛出一个错误;

  • <!--[if !supportLists]--> 强制终止该流程的执行。

事件处理( Event Handler

BPEL 中定义了两类事件:一类是“消息事件”,即从外部传来的消息;另一类是由于达到了用户定义的时间点而发出的警告。事件处理机制从作用域的一开始就激活,一直等待事件的到来而执行内部行为,也会随着作用域的结束而结束。

补偿服务( Compensation Handler

补偿处理是为了将流程的状态回滚,回到跟进入作用域前一样。所需要做的就是将该作用域内已执行部分采用其它行为进行撤销,通常是调用一个效果相反的服务。

错误及补偿处理程序与 OOP 语言(如 Java )中的 catch 子句类似。如果执行了某个抛出任务,就会触发错误及补偿处理程序。

BPEL 组件架构

BPEL 核心组件有三部分组成

  • <!--[if !supportLists]--> BPEL 设计工具( BPEL Designer

  • <!--[if !supportLists]--> 业务流模板( Process flow template

  • <!--[if !supportLists]--> BPEL 引擎( BPEL Engine

BPEL 设计工具

大多基于 Eclipse 实现。

业务流模板

业务流模板遵守 BPEL 规范。它在设计阶段有 BPEL 设计工具生成,运行阶段由 BPEL 引擎执行。


BPEL 引擎


执行任何与 BPEL 标准相符的业务流模板,主要功能包括调用 Web 服务,数据内容映射,错误处理,事务支持,安全等等。通常 BPEL 引擎与应用服务器集成在一起。

在一个典型的 BPEL 应用场景中,一家公司的业务分析将使用 BPEL 设计工具( GUI )来定义一个业务流程。一旦流程定义完毕,设计工具将在后台生成包含业务流程逻辑的业务逻辑模板。运行时,该流程模板将被 BPEL 引擎所执行。

<!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75" style='width:416.25pt; height:263.25pt'> <v:imagedata src="file:///E:\TEMP\msohtml1\01\clip_image005.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--> 业务流程执行语言 (BPEL)入门简介 <!--[endif]-->

常见的 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

业务流程执行语言 (BPEL)入门简介


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论