一种基于令牌的支持并发侧面编程的bpel扩展实现方法

文档序号:6639083阅读:163来源:国知局
一种基于令牌的支持并发侧面编程的bpel扩展实现方法
【专利摘要】本发明公开了一种基于令牌的支持并发侧面编程的BPEL扩展实现方法,业务流程执行语言BPEL是一个面向过程的支持Web服务集成的编程语言,它有很多诸如并发分支(flow),控制连接(link),事件处理(event handler),异步调用等支持并发编程的特性。然而,目前大多数面向侧面编程(AOP)的BPEL扩展方法在侧面定义中缺乏对并发的支持,导致涉及并发控制的侧面不能方便而简洁的表达。本发明专利申请提出了一种基于令牌的支持并发侧面编程的BPEL的扩展实现方法,主要包括:1)一个基于令牌的支持并发的侧面编程语言模型,侧面与原程序并发执行,通过获取和释放令牌完成同步;2)一个基于Petri网的侧面定义合法性验证算法;3)一个基于ODE的支持侧面动态编织的BPEL执行引擎。
【专利说明】一种基于令牌的支持并发侧面编程的BPEL扩展实现方法

【技术领域】
[0001] 本发明涉及对BPEL面向侧面编程的扩展实现,特别是涉及侧面与BPEL原工作流 的并发与协作能力,为此提出了一种新的面向侧面编程语言模型,并扩展了ODE引擎加以 实现。

【背景技术】
[0002] BPEL(业务流程执行语言)是由OASIS提出的Web服务集成的标准执行语言。是 一个面向过程的支持Web服务集成的编程语言,该语言已经被Oracle,IBM,Apache等广泛 支持以搭建面向服务的体系结构(SOA)。一方面与其它面向过程(POP)和面向对象(OOP) 的编程语言类似,BPEL中诸如调试,日志,安全,商业规则等非功能性需求不能很好地从 主要功能分离出来。面向侧面软件开发(AOSD)是众所周知的解决方法。另一方面BPEL 语言中诸多如并发分支(flow),控制连接(link),事件处理(eventhandler),异步调用 (asynchronousinvoke)等支持并发编程的特性,要求其面向侧面的扩展需要有相应地并 发的支持,从而简洁有效的表达涉及并发控制的侧面。
[0003] 目前面向侧面编程语言模型主要包括pointcut-advice模型,历史敏感的侧 面模型(EAOP),支持并发的侧面模型(CEAOP),区间侧面模型(regionaspect)。所述 pointcut-advice模型允许侧面在一组通过逻辑关系,通配,正则表达式选出来的原程序中 的操作(pointcut)之前、之后执行,或者取代原来操作的执行。该模型为传统的AOP语言 模型被广泛应用。所述历史敏感的侧面模型考虑历史执行信息,将操作抽象为事件,允许侧 面在一系列事件即一个执行轨迹之后执行。所述支持并发的侧面模型是历史敏感的侧面模 型的提升,它修改了编织策略,允许侧面从原程序中分离出来与原程序并发执行。所述区间 侧面模型提出Regioncut机制将两行以上的代码包装在一起形成一个区间,从而可以选择 一段连续的代码作为插入点。
[0004] 目前BPEL面向侧面的扩展主要有A04BPEL和Padus两种。A04BPEL采用动态编 织方式将传统的pointcut-advice模型应用于BPEL语言上,侧面能够在BPEL的一个活动 (activity)之前、之后执行,或者取代原来活动的执行。Padus采用静态编织的方式将历史 敏感的侧面模型应用于BPEL语言上,允许在原工作流中添加任意的合法BPEL元素。
[0005] 纵观上述面向侧面的语言模型以及BPEL面向侧面的扩展,均不能完全满足BPEL 侧面与原程序的并发协同执行需求。所述并发协同执行需求包括三点:
[0006] 1、侧面应当能够与源程序和其他侧面并发执行。
[0007] 2、侧面能够以开发者的意愿在原程序中的某一点之前与原程序合并。
[0008] 3、侧面能够和源程序协同合作。
[0009] 为此,我们提出了一种基于令牌的支持并发侧面编程的BPEL扩展实现方法。


【发明内容】

[0010] 发明目的:BPEL面向侧面编程(AOP)的扩展缺乏对并发的支持,这导致涉及并发 控制的侧面不能方便简洁的表达出来。本发明基于此问题提出了一种基于令牌的支持并发 侧面编程的BPEL扩展实现方法。
[0011] 技术方案:一种基于令牌的支持并发侧面编程的BPEL扩展实现方法,包括如下部 分:
[0012] 1) 一种基于令牌的支持并发的侧面编程语言模型;
[0013] 2) -个基于Petri网的侧面定义合法性验证算法;
[0014] 3) -个基于ODE的支持侧面动态编织的BPEL执行引擎。
[0015] 基于令牌的支持并发的侧面编程语言模型,区别于传统AOP语言模型的以操作 (方法调用,对类成员的访问)作为插入点(joinpoint)定义的最小单元。所述模型将操 作的前置条件和后置条件作为插入点定义的最小单元。用一个四元组(Pre,Post,T,N)来 定义一个侧面。其中Pre为前置条件,Post为后置条件,T为advice是BPEL中的一组活 动,N为skip或proceed表明是否要执行原工作流中相关的活动。T与BPEL工作流并发 执行,通过获取前置条件令牌和释放后置条件令牌完成同步。前置条件规定了T开始运行 的时机,后置条件则规定了T合并到原程序的条件。将工作流建模为Petri网,当原工作流 Pre中所有的库所都曾经有过令牌,T开始运行;Post后的变迀需要T执行结束释放额外的 令牌才能继续执行。该语言模型的语义由Petri网变迀的偏序关系形式化定义。从而达到 支持BPEL面向侧面的扩展并发和协作需求。
[0016] 所述语言模型中不是任意的前置条件和后置条件的组合都是合法的。侧面的协同 合作不能与原程序中的依赖关系产生冲突。为此侧面的定义需要满足相关的约束规则,所 述约束规则主要有四个,所述验证算法根据这四个约束设计和实现。
[0017] 所述约束规则包括:
[0018] 规则1 :一个侧面CTA= (Pre,Post,T,proceed/skip)涉及的活动不能穿梭于正 常流程,事件处理,出错处理和补偿处理之间。
[0019] 规则2 :-个侧面CTA= (Pre,Post,T,proceed/skip)涉及的活动不能穿梭于循 环内外。
[0020] 规则3 :-个侧面CTA= (Pre,Post,T,proceed/skip)不能与原程序的依赖关系 产生冲突。
[0021] 规则4 :一个侧面CTA= (Pre,Post,T,skip),前置条件Pre与后置条件Post代表 的必须是一个区间。
[0022] 所述基于ODE的支持侧面动态编织的BPEL执行引擎对现用的BPEL执行引擎ODE 的扩展,该引擎引入Aspect编译器对侧面进行编译。引入Aspect运行环境,控制原程序与 侧面的执行。从而实现侧面于原程序的协同合作。
[0023] 所述编译器编译输入为侧面文件(.aspect),及相关WSDL文件,所述WSDL文件为 侧面中所调用Web服务描述文件。编辑器首先根据输入验证侧面定义以及侧面内BPEL活 动定义是否合法。如果合法则将侧面文件编译为OAspectJava对象存取。OAspect包含相 应的OAdivce,OPrecondition,OPostcondition,skip等对象和属性。OAdvice继承了ODE 引擎中(Process描述侧面活动。
[0024] 引入Aspect运行环境,所述Aspect运行环境包含了aspect部署模块,工作流状 态监控模块,Aspect同步运行管理模块。所述aspect部署模块用于部署侧面;所述工作流 状态监控模块通过ODE提供的BPEL运行时事件监听器监控BPEL工作流实例(Process的 运行状态;所述Aspect同步运行管理模块在侧面OAspect前置条件满足时阻塞侧面后置条 件相对应活动的执行,并执行侧面相应活动,在侧面活动执行完成后,取消阻塞之前阻塞活 动,使其继续执行。若侧面OAspect的skip属性为true(默认为false),则需要跳过执行 在前置条件和后置条件之间的活动,从而实现侧面于原程序的协同合作。
[0025] 有益效果:与现有技术相比,本发明提供的基于令牌的支持并发侧面编程的BPEL 扩展实现方法,支持BPEL面向侧面编程的侧面与原工作流的并发和协作能力。

【专利附图】

【附图说明】
[0026] 图1为BPEL工作流中基本活动的Petri网语义;
[0027] 图2为BPEL工作流中结构化活动的Petri网语义;
[0028] 图3为基于偏序关系的支持并发的面向侧面编程语言模型的Petri网语义;
[0029] 图4为在BPEL工作流中加入典型的侧面的Petri网语义;
[0030] 图5为基于Petri网的侧面定义合法性验证算法;
[0031] 图6为基于ODE的支持侧面动态编织的BPEL执行引擎的框架;
[0032] 图7为旅行代理服务使用案例及其三个侧面的需求;
[0033] 图8为侧面XML描述表示语法;
[0034] 图9为旅行代理服务三个侧面需求的侧面定义。

【具体实施方式】
[0035] 下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明 而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价 形式的修改均落于本申请所附权利要求所限定的范围。
[0036] 1、基于令牌的支持并发的侧面编程语言模型
[0037] 为了更好地描述和验证BPEL面向侧面编程的语言模型,我们将BPEL工作流建模 为Petri网。在BPEL中一个操作为一个活动(activity),活动有两种类型,基本活动和结 构化活动,基本活动代表了原子操作,如:invoke,调用一个web服务;receive:接收消息; reply:发送消息;assign:给变量赋值。结构化活动用于组合其他的活动,如:sequence,定 义一个顺序结构;if,定义一个分支结构;while,定义一个循环结构;flow,定义一个并发 结构。图1显示了基础活动的Petri网语义,左边(虚线部分)显示的是基于BPEL的死锁 路径消除(DPE)而跳过活动X的语义,右边(实现部分)显示的是活动X正常流程下的语 义。其中rx( "ready")表示活动X开始运行的状态,fx( "finish")表示活动X运行结束 的状态,其他库所和变迀描述活动X的内部转换。结构化活动将其他活动以一定的依赖关 系进行组合,其Petri网语义主要描述了活间的依赖关系,如图2所示。
[0038] 从图1和图2中我们可以看出基础活动和结构化活动均有!^ "ready")和 fx( "finish")这两个库所表示一个活动的开始和结束状态。每个活动的rx( "ready")和 fx( "finish")库所就是基于令牌的支持并发的侧面编程语言模型的插入点。
[0039] 用四元组CTA= (Pre,Post,T,N)来定义一个侧面。所述四元组的语义由Petri 网变迀的偏序关系形式化定义。CTA中N为proceed的语义是:
[0040] ¥pGPre?t=l(p)T
[0041] ¥pGPostrT 0(p)
[0042] 其中一("happenedbefore")规定了变迀之间的偏序关系。I(p)代表库所p的 唯一输入变迀,O(P)代表库所P的唯一的输出变迀。图3显示了有两个前置条件和两个后 置条件情况下的切面Petri网语义,在Petri网中一0 -表示"happenedbefore"关系。 CTA中N为skip的语义与之类似,区别在于,活动T要取代前置条件和后置条件之间的活 动执行。它有非常严格的约束来确保"前置条件和后置条件之间的活动"是有意义的。CTA =(Pre,Post,T,proceed)同样也有相应的约束。
[0043] 当原工作流Pre中所有的库所都曾经有过令牌,T开始运行;Post后的变迀需要T 执行结束释放额外的令牌才能继续执行。从而达到支持BPEL面向侧面的扩展并发和协作 需求。
[0044] 图4描述了典型的侧面描述和其的Petri网语义,从图4中,我们可以看出,该语 言模型不仅可以描述传统的before,after,around侧面,如图4-a,4_b,4_c所示;还可以 描述任意区间(如图4-d),协同合作侧面(如图4-e),并发侧面(如图4-f)。
[0045] 2、验证算法
[0046] 在所述语言模型中不是任意的前置条件和后置条件的组合都是合法的。侧面的协 同合作不能与原程序中的依赖关系产生冲突。为此侧面的定义需要满足相关的约束。所述 约束规则包括:
[0047] 规则1 :一个侧面CTA= (Pre,Post,T,proceed/skip)涉及的活动不能穿梭于正 常流程,事件处理,出错处理和补偿处理之间。
[0048] 规则2 :-个侧面CTA= (Pre,Post,T,proceed/skip)涉及的活动不能穿梭于循 环内外。
[0049] 规则3 :-个侧面CTA= (Pre,Post,T,proceed/skip)不能与原程序的依赖关系 产生冲突。
[0050] 规则4 : 一个侧面CTA= (Pre,Post,T,skip),前置条件Pre与后置条件Post代 表的必须是一个区间。
[0051] 根据这四个约束规则设计和实现一个验证算法。所述验证算法如图5所示。
[0052] 规则1,2规定了一个侧面的界限。规则3, 4则规定了CTA的语义是有意义的。
[0053] 将所述规则1,2转换为寻找Pre和Post涉及的活动的结构化活动,并确保Pre和 Post的相关活动没有分布在结构化活动内,正常流程,事件处理,出错处理和补偿处理和循 环内外。如图5步骤1-5所述。
[0054] 将所述规则3转换为检测原工作流对应的Petri网添加侧面Petri网语义后的 Petri网是否有环路。如图5步骤11-13所述。
[0055] 将所述规则4装换为检测Pre和Post是否各自代表一个活动A,B。并且这两 个活动为同一个活动,或者包含A的结构化活动和包含B的结构化活动相同并且是一个 sequence。如图5步骤6-10所述。
[0056] 3、执行引擎
[0057] 所述基于ODE的支持侧面动态编织的BPEL执行引擎对现用的BPEL执行引擎ODE 的扩展框架如图6所示,灰色部分显示为原ODE引擎框架,黑色部分显示了扩展的部分。引 入Aspect编译器对侧面进行编译。所述编译器编译输入为侧面文件(.aspect),及相关 WSDL文件,所述WSDL文件为侧面中所调用Web服务描述文件。编辑器首先根据输入验证侧 面定义以及侧面内BPEL活动定义定义是否合法。如果合法则将侧面文件编译为OAspect Java对象存取。OAspect包含相应的OAdivce,OPreCondition,OPostCondition,skip等 对象和属性。OAdvice继承了ODE引擎中(Process描述侧面活动。
[0058] 引入Aspect运行环境,所述Aspect运行环境包含了aspect部署模块,工作流状 态监控模块,Aspect同步运行管理模块。所述aspect部署模块用于部署侧面;所述工作流 状态监控模块通过ODE提供的BPEL运行时事件监听器监控BPEL工作流实例(Process的 运行状态;所述Aspect同步运行管理模块在侧面OAspect前置条件满足时阻塞侧面后置条 件相对应活动的执行,并执行侧面相应活动,在侧面活动执行完成后,取消阻塞之前阻塞活 动,使其继续执行。若侧面OAspect的skip属性为true(默认为false),则需要跳过执行 在前置条件和后置条件之间的活动,从而实现侧面于原程序的协同合作。
[0059] 4、使用案例
[0060] 图7描述一个用旅行代理的服务BPEL工作流程及其三个侧面需求。上述语言模 型的4元组由XML描述表示。其XML语法规范及其说明如图8所示。
[0061] 所述旅行代理服务工作流程为:当travel收到一个来自用户的请求后,它首先调 用一个web服务获取用户信息。然后初始化flight和hotel两个并发的任务。这两个任 务均完成搜索,选择,和预定这三个流程。最终,旅行代理服务将结果返还给用户。
[0062] 所述侧面需求Rl以日志为例,我们需要记录飞机搜索的结果。其实我们只需要在 searchFlight之后执行日志记录操作,并不关心日志记录操作是否在selectFlight之前 完成。它可以与searchFlight之后的操作并发执行。这样的日志服务应当具备于源程序 的并发执行能力。不同的日志服务之间同样不应该优先后执行顺序。该侧面定义如图9(a) 所示。
[0063] 所述侧面需求R2以添加商业规则"根据请求信息给用户回复附加一些广告"为 例。这意味着当程序开始后我们需要调用一个广告生成服务,该广告生成服务需要在回复 给用户之前完成并于源程序合并。该侧面定义的如图9(b)所示。
[0064] 所述侧面需求R3以添加商业规则"将搜索到的旅馆以到机场的远近排序供用户 选择"为例,在searchFlight之后程序才能得到机场的位置信息,所以旅馆排序服务需要在 searchFlight和searchHotel之后开始,并在selectHotel之前完成。这样的需求使得原 先没有控制依赖关系的flight和hotel两个子任务需要和旅馆排序服务协同合作。该侧 面定义的如图9(c)所示。
[0065] 将所述3个侧面部署到扩展的BPEL引擎上。调用原BPEL工作流,其运行结果符 合预期设想。
【权利要求】
1. 一种基于令牌的支持并发侧面编程的BPEL扩展实现方法,其特征在于,主要包括如 下几个部分: 1) 一种基于令牌的支持并发的侧面编程语言模型; 2) -个基于Petri网的侧面定义合法性验证算法; 3) -个基于ODE的支持侧面动态编织的BPEL执行引擎; 其中,所述基于令牌的支持并发的侧面编程语言模型,将操作的前置条件和后置条件 作为插入点定义的最小单元;用一个四元组(Pre,Post,T,N)来定义一个侧面;其中Pre为 前置条件,Post为后置条件,T为advice是BPEL中的一组活动,N为skip或proceed表明 是否要执行原工作流中相关的活动; 所述基于Petri网的侧面定义合法性验证算法通过四个约束规则实现; 所述基于ODE的支持侧面动态编织的BPEL执行引擎,对现用的BPEL执行引擎ODE的 扩展,该引擎引入Aspect编译器对侧面进行编译;引入Aspect运行环境,控制原工作流与 侧面的执行;从而实现侧面于原程序的协同合作。
2. 如权利要求1所述的基于令牌的支持并发侧面编程的BPEL扩展实现方法,其特征 在于,所述基于令牌的支持并发的侧面编程语言模型中,T与BPEL工作流并发执行,通过获 取前置条件令牌和释放后置条件令牌完成同步;前置条件规定了活动T的开始运行时机, 后置条件则规定了活动T合并到原程序的条件。将工作流建模为Petri网,当原工作流Pre 中所有的库所都曾经有过令牌,T开始运行;Post后的变迀需要T执行结束释放额外的令牌 才能继续执行。该语言模型的语义由Petri网变迀的偏序关系形式化定义;从而达到支持 BPEL面向侧面的扩展并发和协作需求。
3. 如权利要求1所述的基于令牌的支持并发侧面编程的BPEL扩展实现方法,其特征在 于,所述四个约束规则包括: 规则1 :一个侧面CTA= (Pre,Post,T,proceed/skip)涉及的活动不能穿梭于正常流 程,事件处理,出错处理和补偿处理之间; 规则2 :-个侧面CTA= (Pre,Post,T,proceed/skip)涉及的活动不能穿梭于循环内 外; 规则3 :-个侧面CTA= (Pre,Post,T,proceed/skip)不能与原程序的依赖关系产生 冲突; 规则4 :一个侧面CTA= (Pre,Post,T,skip),前置条件Pre与后置条件Post代表的必 须是一个区间。
4. 如权利要求1所述的基于令牌的支持并发侧面编程的BPEL扩展实现方法,其特征在 于,所述基于ODE的支持侧面动态编织的BPEL执行引擎中: 所述Aspect编译器输入为侧面文件(.aspect),及相关WSDL文件,所述WSDL文件为侧 面中所调用Web服务描述文件;编辑器首先根据输入验证侧面定义以及侧面内BPEL活动定 义是否合法;如果合法则将侧面文件编译为OAspectJava对象存取; 所述Aspect运行环境包含了aspect部署模块,工作流状态监控模块,Aspect同步运 行管理模块;所述aspect部署模块用于部署侧面;所述工作流状态监控模块通过ODE提供 的BPEL运行时事件监听器监控BPEL工作流实例(Process的运行状态;所述Aspect同步 运行管理模块在侧面OAspect前置条件满足时阻塞侧面后置条件相对应活动的执行,并执 行侧面相应活动,在侧面活动执行完成后,取消阻塞之前阻塞活动,使其继续执行;若侧面OAspect的skip属性为true(默认为false),则需要跳过执行在前置条件和后置条件之间 的活动,从而实现侧面于原程序的协同合作。
【文档编号】G06F9/38GK104516719SQ201410784693
【公开日】2015年4月15日 申请日期:2014年12月16日 优先权日:2014年12月16日
【发明者】吕建, 徐锋, 袁明珠 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1