陈 龙 苏厚勤
(东华大学计算机科学与技术学院 上海 200051)
BPEL文档基于DAG自动生成框架的研究与实现
陈龙苏厚勤
(东华大学计算机科学与技术学院上海 200051)
摘要针对目前服务之间组合的复杂性,提出一种基于有向无环图的业务流程执行语言文档生成框架。通过对框架模型的解析,提出一种能够自动生成服务组合所需各种文档的改进框架及其算法,有效地隐藏了专业的业务流程执行语言知识和繁琐的服务组合流程。实践表明,该框架简单、易用,不仅能够清楚地反应服务组合之间的流程,而且还不需要BPEL专业方面的知识,减少了服务组合的工作量。
关键词业务流程执行语言Web服务服务组合有向非循环图
0引言
由于Web服务具有跨平台、跨语言和低耦合等应用特性,使得Web服务技术已经成为解决企业集成、组件复用问题的一种重要方法[1]。实际业务环境中,单个Web 服务的功能是特定的,为了满足快速发展的业务需求,需要对Web 服务进行组合。2002年7月在BEA、IBM和微软的努力下,发布了业务流程执行语言(BPEL)来解决Web 服务集成问题。在实践中一般使用BPEL设计器来编写BPEL文档。目前市场上有许多BPEL设计器,如Eclipse 的BPEL插件、Oracle的BPEL Process Manager以及Active Endpoints的 Active BPEL等[2]。这些设计器都是图形化操作,通过手工拖动组件设计业务流程,生成Web 服务组合需要的文档。但是使用这些BPEL设计器需要相关的Web服务和BPEL知识,并且创建组合服务的过程非常繁琐。目前针对Web服务组合建模并自动生成BPEL的研究已有一定的成果,如文献[3,4]采用的是Petri 网模型来对服务组合建模。文献[5]使用有限自动机来对服务组合建模。但是这两种建模方式可读性比较差。有向图模型的建模过程简单并且模型流程清楚。文献[2]给出了一种基于有向无环图的自动生成组合文档的原型框架,但是此原型框架没有控制流程且组合的活动不能并行执行。由于在BPEL2.0规范中有
1BPEL元模型
BPEL是一种使用XML编写的业务流程执行语言,主要用来对Web 服务进行编制,组合成大粒度的服务以满足复杂的业务需求[6]。BPEL定义了一些元素标签用来描述服务组合流程的消息流、控制流、数据流和伙伴会话的通道。消息流部分使用
图1 BPEL 2.0元模型的UML视图
2Web服务组合工作流建模
DAG模型的建模过程简单、描述内容丰富,广泛应用于描述业务流程,已成为流程工业系统建模的主要建模方法之一[8]。鉴于DAG建模的简单性,采用DAG对服务组合工作流进行建模,并称这种模型为服务组合DAG(SCDAG)。一个SCDAG主要由3部分组成:开始和结束节点、伙伴节点以及节点之间的连接。
2.1开始节点和结束节点
开始节点是流程的开始,用来接收整个流程的输入参数,并说明开始调用流程,对应BPEL文档中的
图2 SCDAG模型图
2.2伙伴节点
伙伴节点和BPEL文档中的
2.3连接
连接是用来连接节点之间的弧,并且弧是有方向的。弧的方向表示活动调用的顺序,并且也表示一种依赖关系,只有当该节点父节点全部执行完,该节点才能被调用。一般在连接中会传递一些服务调用的变量参数和一些条件选择信息。节点之间是通过连接串连一起的,节点间是选择执行还是并行执行都可以通过连接来传递。SCDAG中有3种类型的连接,分别是顺序连接、并行连接和带有条件选择的连接。顺序连接只是表明节点之间的依赖关系。并行连接和条件选择连接除了有依赖关系还有其他特性。并行连接表明有唯一相同父节点的节点可以并行执行,如图3所示的ⓐ节点有两个并行执行节点©和。条件选择连接和高级语言中的选择判断语句相似,只有条件满足时,被指向的分支才能够执行。其中顺序连接和并行连接使用实线有向弧表示,在代码生成时,通过模型上下文来区分是哪种连接。条件选择连接使用虚线有向弧表示,如图2所示。
图3 SCDAG并行模型图
3Web服务组合文档的生成
Web服务组合时会涉及到3个文档,分别是Web服务描述语言WSDL(Web Services Description Language)文档、BPEL文档、Deploy发布文档。其中WSDL是Web服务的描述文档,为用户提供详细的接口说明书。BPEL文档是描述Web服务组合之间业务流程的文档。Deploy发布文档用来发布新集成的服务。由于这3个文档都使用XML语言描述,可以采用开源的XML解析框架DOM4J来生成和解析这些XML文档。其中WSDL文档和Deploy文档的结构比较固定且内容简单,容易生成,这里不再赘述。
3.1生成BPEL文档算法选择
对于有向无环图的遍历方法,主要有广度优先遍历和深度优先遍历。但是在SCDAG模型中,节点之间是有依赖的。如图2所示,c节点指向e节点,那么e节点就依赖c节点。如果想要遍历e节点,必须当e的前驱节点c、d、b都被执行后才能遍历e节点。所以一般的广度和深度优先遍历不能满足对SCDGA模型的遍历。对于这种有依赖关系的遍历,可以采用基于一种依赖的遍历方法,具体在3.3节予以描述。
3.2并行和条件选择设计
BPEL使用
在SCDGA中,使用条件选择连接控制活动分支的选择。每一个条件选择连接都有一个判断条件,当条件为真时,则会执行该分支。
3.3整体设计和算法实现
如果把BPEL文档中的服务之间调用看成一个整体,那么BPEL文档结构是比较固定的,可以采用生成器模式来设计。图4是框架的整体实现,BpelBulider定义了BPEL文档主要结构的接口,BpelBuliderImpl是接口实现。Edge表示连接,Vertex表示伙伴节点,Graph表示SCDAG模型。
图4 框架实现类视图
在对SCDAG模型进行遍历生成BPEL文档前,应该保证SCDAG是一个无环的并且没有孤立节点的有向图,这两点也比较容易实现。在DAG中,若从节点i到节点j有一条有向路径,那么就说节点j依赖节点i,i是j的入度节点,j是i的出度节点。在对DAG进行依赖遍历时,如果遍历i节点,必须把i的依赖节点全部遍历后才能遍历i节点。由于BPEL标签可以嵌套,是有层次结构的,那么在生成BPEL标签时也是分层次。如果节点i有一个出度节点j,那么节点i和节点j生成的BPEL标签是同一层次;如果节点i有多个出度,那么出度节点的生成标签在i后面的
算法1依赖遍历算法
输入参数v表示当前要遍历的节点,f是节点v的一个入度节点,e当前XML标签。
void genBpel(v,f, e)
{
if(v的入度节点还有没访问的) return;
v.visit = true;
//标记当前节点已访问
type = 节点f到节点v的连接类型;
if(v有多个入度节点)
{
commFather=lastCommonFather(v);
//算法下面给出
e = 获取节点commFather对应同一层级的XML标签;
}
if(type == IF连接)
e = 生成BPEL的IF标签;
else If(type == Flow类型连接)
e = 生成BPEL的Flow标签;
生成节点v的活动调用标签invoke;
For(v的出度节点v1…vn)
{
生成节点v到出度节点vi的参数赋值标签Assign;
genBpel(vi,v,e);
} }
算法2最近公共父节点算法
在调用算法前,先把v的入度节点放入集合set中。对DAG进行深度优先遍历,如果节点在set集合中则返回,当递归节点w的出度节点有返回多个不同的值时,则说明要找的节点分布在以w出度节点为根子图中,这时递归函数返回w。输入参数root为DAG根节点S。
Node lastCommonFather(root)
{
If(root == null) return null;
If(root 在集合set中)
{
return root;
}
node = v;
int cnt = 0;
for(root出度节点child1…childn)
{
nodei = lastCommonFather(childi);
if(nodei != null&& node !=nodei)
{
cnt ++;
//简单记录nodei是否多于2个
node = nodei;
}
}
If(cnt >=2) return root;
Else if(cnt == 1) return node;
Else return null;
}
4原型系统搭建及验证
用户通过使用UML建模工具Enterprise Architect建立服务组合流程,并生成相应的XML文档,系统对XML文档解析建立SCDAG模型。然后系统再读取伙伴服务的WSDL文档,提取相关信息生成组合服务的WSDL文档,结合SCDAG模型生成BPEL文档和服务发布文档。把生成的文档放入BPEL引擎中进行发布。系统使用的是Apache 基金下的开源项目Apache ODE作为BPEL执行引擎。
图5 服务组合工作流程图
当把生成的文档在ODE引擎中发布后,可以调用新的组合服务。使用SoapUI对组合服务进行测试,图6是调用组合服务的往返soap消息,其中左边是发送的soap消息,右边是返回的soap消息。
图6 服务调用时的往返SOAP消息
5结语
针对目前服务之间组合的复杂性,提出了一种基于DGA的BPEL文档生成框架。通过对框架模型的解析,能够自动生成服务组合时所需要的各种文档,有效地隐藏了专业的BPEL知识和繁琐的服务组合流程。实践表明,该框架简单易用,不仅能够清楚地反应服务组合之间的流程而且还不需要BPEL专业方面的知识,减少了服务组合的工作量。
实验验证表明该框架是可行的,但是该框架还不够完善。虽然框架解决了伙伴服务的并行调用,但是没有把融入并行处理中。框架还应该增加对BPEL的故障异常处理的支持。
参考文献
[1] 岳昆,王晓玲,周傲英.Web服务核心支撑技术:研究综述[J].软件学报,2004,15(3):428-442.
[2] 崔福东,乔彦友,常原飞.基于BPEL的Web服务快速组合框架[J].计算机工程,2010,36(7):262-264.
[3] 刘贤,李建华,李向,等.基于扩展同步Petri网的BPEL建模[J].计算机工程,2011,37(2):57-60.
[4] 杜彦华,范玉顺,李喜彤.基于模块化可达图的服务组合验证及BPEL代码生成[J].软件学报,2010,21(8):1810-1819.
[5] 于守健,李卫民,吴国文,等.BPEL中基于有限状态自动机的Web服务自动组合[J].小型微型计算机系统,2007,28(4):742-747.
[6] 丁兆青,董传良.基于SOA的分布式应用集成研究[J].计算机工程,2007(10):246-248.
[7] 铁威,黄志球,王进.基于BPEL的RESTful Web服务异步交互及组合研究[J].计算机工程与科学,2013,35(4):29-36.
[8] 韩中,高建民,陈富民,等.面向对象的流程工业系统有向无环图建模[J].计算机工程,2009,35(8):23-25.
RESEARCH AND IMPLEMENTATION OF DAG-BASED AUTOMATIC BPEL DOCUMENT GENERATION FRAMEWORK
Chen LongSu Houqin
(SchoolofComputerScienceandTechnology,DonghuaUniversity,Shanghai200051,China)
AbstractWe proposed a DAG-based framework of Business Process Execution Language document generation for the complexities of compositions among current services. By resolving the framework model, we presented an improved framework, which can automatically generate various documents required for service compositions, and its algorithm, the professional knowledge of Business Process Execution Language and complex service composition processes are effectively hidden. Practice indicated that the framework was simple and easy to apply, the process among service compositions could be clearly reflected, and there was no need of professional knowledge of Business Process Execution Language as well, this reduced the work quantity for service compositions.
KeywordsBusiness Process Execution Language (BPEL)Web serviceService compositionDirected acyclic graph(DAG)
收稿日期:2014-11-14。陈龙,硕士生,主研领域:Web服务。苏厚勤,教授级高工。
中图分类号TP393
文献标识码A
DOI:10.3969/j.issn.1000-386x.2016.05.022