BPEL研究(1):BPEL语言的基本特点

来源:互联网 发布:chart.js饼图显示数值 编辑:程序博客网 时间:2024/04/30 00:52
面向 Web 服务的业务流程执行语言(BPEL BPEL4WS)是一种使用 Web 服务定义和执行业务流程的语言。BPEL 使您可以通过组合、编排和协调 Web 服务自上而下地实现面向服务的体系结构 (SOA)。BPEL 提供了一种相对简单易懂的方法,可将多个 Web 服务组合到一个新的复合服务(称作业务流程)中。
(1)、BPEL规范
Web 服务的业务流程执行语言(Business Process Execution Language for Web Services,BPEL4WS)规范,其定位是成为整合方面的 Web 服务标准。您可以创建能够完成 Web 服务调用、抛出故障或终止一个流程等工作的不同活动,然后将它们连接起来,从而创建出复杂的流程。这些活动可以嵌套到结构化活动中,结构化活动定义了其中的活动的运行方式,如串列或并行还是取决于某些条件。它从本质上来说是IBM的WSFL和Microsoft的XLANG的结合物,目前已经成为业界标准。WSFL 支持图形化的流程,而XLANG在结构化构造方面有独到的方法,而BPEL4WS正是吸取了两者的优点,同时摒弃了一些复杂繁琐的部分,形成了一种较为自然的描述商业活动的抽象高级语言。
(2)、BPEL语言特点
BPEL4WS语言从诞生到现在还不到一年的时间,我们可以说它是一门新的语言,但是它又不完全独立于现在已经存在的各种编程语言,从各方面进行总结,可以得出以下三个突出的特点:
〈一〉 BPEL4WS并不"新":
   为什么说它并不新呢?这主要是因为光就BPEL4WS语言本身的语法结构以及编程的思想来说,它是被广大程序员所熟悉的(当然,你得熟悉XML语言和基本的程序设计思想,还有就是得有分布式系统的概念,如DCOM,CORBA等)。BPEL4WS的文法是完全基于XML规范的,如果不考虑它的程序语言特性,大家完全可以把它理解为普通的XML文档规范,也就是说可以把BPEL4WS中的所有节点对应到一个虚拟的DTD文件中。如果不考虑它的程序特性,大家在编写BPEL文件的时候就只是按照这个DTD所定义的规范在编写普通的XML文件罢了。BPEL4WS主要基于以下几个XML规范的,WSDL 1.1、XML Schema 1.0 和XPath1.0。WSDL消息和XML Schema类型定义提供了BPEL4WS流程所需要的所有数据模型,所有需要的外部资源和伙伴都被描述为WSDL服务。
   如果对BPEL4WS语言的语法做较深入的研究,你就会发现它其实只是对原有编程语言思想的继承和发展。
(1)、关于继承,BPEL4WS语言拥有传统编程语言的一些基本特性,如:
赋值操作(由对〈assign〉的操作完成);
循环操作(由〈while〉操作完成);
选择操作(由〈switch〉和〈case〉操作完成);
远程调用操作(由〈invoke〉操作完成);
错误捕捉操作(由〈catchfault〉和〈catchall〉操作完成);
错误抛出操作(由〈throw〉操作完成)
Java,C#语言中的try操作(由〈scope〉操作完成)
(2)、关于发展,BPEL4WS语言是一门结合了商业处理特点的语言;
由于BPEL4WS语言是专为商业流程的执行所服务的,因此它也就自然而然的具有一门商业处理语言的特点,这体现在以下几个方面:
²提供了对于远程调用(〈invoke〉)的同步和异步处理;
这主要是由商业处理的特点决定的,就拿民航订票来说吧,当你向民航订票系统的订票Web Service发出订票请求后,你不可能期望马上得到结果(同步),因为民航系统必须要首先要进行复杂的身份识别以确定你的系统是否有预订机票的权限,接着还要查询航班情况以确定是否你定的航班还有空座,然后才会给你答复,而你不可能一直等待得到答复,就算你愿意你的服务器恐怕也受不了这个负担。因此你必须选择异步方式,也就是发出请求后继续执行其他的操作,在这一点上有一点类似于TCP/IP协议和UDP协议的关系。 
²提供了并行的操作(由〈flow〉操作支持); 
对于普通的程序设计语言来说,并行的概念只是用于表面。打个比方,也许有人会说,利用windows系统(或者unix, linux系统)的多任务执行能力,我可以让一个程序一边在后台执行计算而前台却进行复杂的人机交互工作,这不也是一种并行吗。的确,这也是一种并行,但它只是cpu级别的并行,而BPEL4WS语言所体现的并行性是一种更广范围的并行,是基于INTERNET的并行,在某些方面,类似于传统的并行处理系统(利用机群进行大规模复杂并行计算)。通过BPEL4WS,可以同时调用位于不同地方(不同城市甚至是国家)的Web Services进行处理(如计算,订货等)。 
²提供了补偿的操作(由〈compensate〉操作支持); 
任何程序的执行都可能会出错,而后果也是不同的。有的操作出错并不会产生什么直接的后果,而有的操作出错的结果就必须被纠正,也就是必须执行一些补偿的操作。比如拿民航订票来说吧,假如顾客A在系统中预订一张机票,当民航系统的Web Services完成所有订票操作后,提交给顾客A请求确认时,顾客A由于其他原因取消了订票操作或者系统出现故障,那么就必须要执行补偿操作,取消所有已执行的操作,恢复数据库信息。从某个方面来说,这很类似于DBMS中的ROLLBACK操作,只不过在数据库系统中是微观执行的,而在BPEL4WS中是宏观执行的。 
〈二〉 BPEL4WS并不"可执行":
BPEL4WS
虽然定义为一门商业执行语言,但实际上它并不执行商业流程中的任何细节,也就是说它一点也不涉及到商业数据的存储和处理。BPEL4WS语言从本质上来说应该是一门描述性语言,它只是描述了什么时候?以什么顺序?到哪儿?去调用那些Web服务?怎样组织这些调用?罢了。因此,在BPEL4WS中并没有出现复杂的数据结构和数据类型,也没有关于数据存储和持久化的操作,唯一涉及显式数据操作的地方就是〈Assign〉的使用了,但数据只是一些临时数据,一旦商业处理的流程结束,这些数据也就消失了,这些数据就好像是传统程序语言中的变量一样,但又没有那么复杂的数据类型。说BPEL4WS语言是商业流程执行语言是因为从宏观上看,所有的操作都由BPEL4WS来完成,而其背后的操作,如Web服务的调用等是不可见的,也就是说是不透明的。这就好比软件测试中的黑盒测试一样,用户只看到了自己应该看到的用户接口,而不用去关心这些功能到底是怎样实现的。
〈三〉 BPEL4WS是真正的分布式系统:
随着INTERNET的迅速发展,在分布式技术领域也不断涌现出新技术新思想。SOAP,XML以及基于它们的Web Services,这些新技术的出现为新的分布式处理模型提供了坚实的基础,而BPEL4WS的诞生,才是分布式技术的真正升华。比起传统的分布式系统来说,利用BPEL4WS实现的分布式系统具有更高的灵活性,这主要体现在以下几个方面:
1〉各个节点机可以为异构系统;
2〉可以在运行时动态选择节点机进行处理;
3〉可以采用各种通信协议进行通信,只要符合SOAP协议。
==============================================================
WS-BPEL 2.0规范参见http://www.oasis-open.org