当前位置: 首页 > news >正文

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

文章仅供大家参考,所有评论, 错误报告, 其他信息以及批评, 请邮寄到 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-BPELWS-BPEL原名BPEL4WS,最初是在20027月随同BPEL4WS1.0规范的发布而出现的,它是IBMMicrosoftBEA合作的成果。业务处理执行语言结合并且替换了IBMWebServices Flow Language (WSFL)和微软公司的XLANG规范。

随着SAPSiebel Systems等其它贡献者的加入,BPEL4WS规范的1.1版于20035月发布。该版本获得了较多的关注与厂商的支持,这导致产生大量的商业上遵循BPEL4WS的可用编排引擎。OASIS随后宣布将语言本身重新命名为Web服务业务流程执行语言(WS-BPEL),并于2007412日正式发布WS-BPEL2.0规范,将其作为一个官方的、开放的标准。

BPEL现已成为被业界广泛认可和接受的进行Web服务编排的事实标准。

BPEL与其它Web服务技术的关系

BPEL是建立在Web services技术之上的,因此与WSDLXMLSOAPUDDI等标准密切相关。下图展示了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]--><!--[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]--><!--[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, numberboolean格式。

BPEL同时支持一些操作符,如简单的算术运算(加、减、乘)、简单的比较运算(等于、不等于、小于、大于、小于等于、大于等于)、布尔运算(andor运算)以及对xml格式的操作符。现有的BPEL可以通过外部的表达式语言来描述、计算表达式,这通过processexpressionLanguage属性进行表达式语言指定,现在只能指定为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]--><!--[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

相关文章:

  • 基于数传电台的多主通讯系统的实现
  • Oracle中Decode()函数使用技巧
  • PLC无线通讯方案详解GRM110
  • 围绕EMF探索(5)之深入Validation框架
  • 2018 年 5 月 1 日西安 1374 架无人机编队表演出现失误的原因是什么?
  • GNSS原理及技术(三)——差分定位技术
  • DBC文件
  • C语言切割多层字符串(strtok_r strtok使用方法)
  • 如何组织论文
  • QT使用MySQL报错:QSqlDatabase: QMYSQL driver not loaded
  • Qt 的Sqlite 在成功打开后报错
  • 项目开发中源代码树的组织
  • qt 在sqlite inster 数据时候报错
  • 制作一颗菜单树
  • 关于数据库主键和外键(终于弄懂啦)
  • Create React App 使用
  • CSS 提示工具(Tooltip)
  • FastReport在线报表设计器工作原理
  • jdbc就是这么简单
  • JS函数式编程 数组部分风格 ES6版
  • leetcode讲解--894. All Possible Full Binary Trees
  • Odoo domain写法及运用
  • spring cloud gateway 源码解析(4)跨域问题处理
  • springMvc学习笔记(2)
  • Vue ES6 Jade Scss Webpack Gulp
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 判断客户端类型,Android,iOS,PC
  • 前端存储 - localStorage
  • 如何选择开源的机器学习框架?
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 微信支付JSAPI,实测!终极方案
  • 学习HTTP相关知识笔记
  • 学习JavaScript数据结构与算法 — 树
  • 怎样选择前端框架
  • 智能网联汽车信息安全
  • 如何在招聘中考核.NET架构师
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #AngularJS#$sce.trustAsResourceUrl
  • $forceUpdate()函数
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (MATLAB)第五章-矩阵运算
  • (二)Linux——Linux常用指令
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • ***利用Ms05002溢出找“肉鸡
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core Swagger 过滤部分Api
  • .net mvc部分视图
  • .NET6 命令行启动及发布单个Exe文件
  • .NET连接MongoDB数据库实例教程
  • .NET企业级应用架构设计系列之应用服务器
  • .NET中使用Redis (二)