轻量级动态工作流引擎的设计与实现

发表时间:2021/5/19   来源:《基层建设》2020年第35期   作者:李星利
[导读] 摘要:研究工作流动态性的实现技术,设计并实现了一个动态工作流引擎,称LWDWE(1ight-weightdynamicwork—flowengine),该引擎允许应用系统在工作流执行过程中动态修改过程模型和实例,允许对过程实例中的未执行结点进行动态的增加、删除和修改,并允许将某过程实例的执行升级为模型的新版本,为后续实例使用。
        杭州安恒信息
        摘要:研究工作流动态性的实现技术,设计并实现了一个动态工作流引擎,称LWDWE(1ight-weightdynamicwork—flowengine),该引擎允许应用系统在工作流执行过程中动态修改过程模型和实例,允许对过程实例中的未执行结点进行动态的增加、删除和修改,并允许将某过程实例的执行升级为模型的新版本,为后续实例使用。给出一个应用案例以验证该引擎的可用性。
        关键词:动态工作流;轻量级;执行引擎;工作流模板;工作流实例
        1 引言
        动态工作流技术是专门为企业适应复杂多变的市场而提出来,近年来已成工作流领域的研究热点。很多工作流厂商和学者对这一技术进行了很多研究和实现,例如,FangRu等]研究过程模型的动态性问题,定义了5种过程模型的变更模式,当流程发生变更时,综合利用这5种模式进行流程变更。北京航空航天大学的孙海龙教授团队设计并实现了一个支持动态演化的组合服务执行引擎,用于可信软件的动态演化,其组合服务运行实例迁移算法,其核心算法LiveMig是组合服务运行实例算法。南京大学吕建教授团队研究了过程以及服务组合的动态演化问题,提出了一种基于柔性迁移技术的过程动态演化方法,并给出支持自适应性的可变过程模型及其实现。
        本文研究动态工作流引擎的设计与实现,提出一种轻量级动态工作流引擎的框架结构,称为LWDWE(1ightweightdynamicworkflowengine)。该引擎借用Petri网的思想,将模型看作静态结构,将过程实例看作托肯(token)所代表的系统状态下~系列变迁(transition)的发生。由此可将工作流模型与实例完全分开,方便对过程修改的支持和实例的动态迁移。LWDWE支持基于过程和基于活动的两种动态修改策略,本文首先给出LWDWE支持的工作流模型、架构和接口设计和调度机制,然后给出流程的动态修
        改策略及过程动态修改算法。最后,给出利用Spring和Hibernate开源框架实现的原型系统,并通过一个应用实例证明了引擎设计的可用性。
        2轻量级动态工作流引擎的分析与设计
        jBPM是当前流行的工作流执行引擎,它使用用JPDL(jBPMprocessdefinitionlanguage)语言描述基本的工作流程。借鉴JPDI思想,LWDWE将工作流中各元素抽象为控制节点和业务节点两类,控制节点是工作流中用来控制流程流转的节点,业务节点是流程中需要参与者或者第三方应用程序参与的节点。而流程是由两种节点组合起来,完成某种应用功能的执行步骤序列。
        3流程动态修改策略及算法
        3.1动态修改策略
        流程动态修改一般将其分为过程级修改和活动级修改两类。其中过程级修改指流程实例运行时对流程模板的修改。而活动级修改指对流程实例中未运行活动的临时修改,比如修改活动属性,这种修改只针对具体的流程实例,不改变流程模板。LWDWE对这两种动态修改都提供支持。对于过程级修改,目前动态工作流系统一般采取重新启动、继续执行和转换3种策略]。其中,转换策略是指将正运行的过程实例迁移到新的工作流程模板上运行,这种策略不需要重启流程,放弃实例已完成部的执行结果,使得流程实例能够跟上模板变化,具备灵活性,但其实现相对困难。
        本文利用流程模板的版本区别实现过程实例的转换策略。即将对流程模板的修改用不同版本记录。过程实例需要流转副下一结点时,依据条件选择使用原版本的过程模板还是转换到最新版本的过程模板继续后续部分的执行。由于动态转换时流程实例中的已经产生了部分流程数据,为避免与新定义模板的活动产生数据冲突,本引擎给出如下的规定:
        假设M为旧的过程模型,z为过程实例x在旧的过程模型中已经执行的活动序列。

MN为修订后的过程模型,为活动序列z在MN中的投影,若满足:(M≠MN)A(z一),则允许动态转换。其中条件(M:/:MN)表示新过程模板对旧过程模板进行了修改,并不等价于旧过程模型。而(z一)保证已经执行过的活动序列在新的过程模型未发生变化。
        3.2动态修改算法
        (1)为防止错误的修改,本文将过程修改看作对过程模板进行增加或删除结点的操作。插入或删除的结点t简化为一个业务结点或一个split-join结构包含的所有结点。简化的目的是简化模型检查和正确性判定。对任意位置、任意结构结点的插入,需要复杂的模型检查与正确性判定算法支持,而这不是本文研究内容。
        (2)读取当前绑定的流程模板信息;根据Nodeld找到当前正在运行的节点;根据当前运行节点找到其下一个节点的Id,将其赋给Nextld变量。
        (3)调用addElement函数生成一个新节点,并将Property信息赋给该节点的各个属性。同时将Nextld赋值给该节点的孩子节点Transition中的to属性。
        (4)将步骤(2)中获得的节点的孩子节点Transition的属性赋值为步骤(3)中新生成的节点的Id。
        (5)返回修改后的流程模板信息。
        (6)根据修改后的流程模板信息生成新的流程模板PD’,将新的流程模板的版本加上1,同时将新的流程模板发布到数据库中。
        (7)向正在运行的流程实例发送版本更新信息。假设A的转出连接弧指向B,即A、B处于顺序关系。在A、B两结点之间插入一个新结点C的工作包括:记录A的转出连接弧(A结点的Transition属性);修改C的转出连接弧等于A的转出连接弧;修改A的转出连接弧指向c。删除结点的操作与之相类似,假设结点A、B、C处于顺序关系,删除B结点的操作即是将A的转出连接弧指向B的转出连接弧的过程。
        算法1是LWDWE中所使用的插入结点的昝。限于篇幅,本文略去了删除结点的算法。
        在一个过程实例执行时,用户可动态修改该本实例的执行。这种修改可以是增加或删除一个业务结点、修改某个结点的属性等。LWDWE中,这些修改的实现通过将过程模板复制到本实例中,并切断模板与实例之间的联系来实现。即只允许用户的操作对本过程实例起作用,而屏蔽掉它对过程模板的影响。在一个动态修改过的过程实例完成后,用户也可选择“升级”操作,从该实例中抽取过程模板并发布出去,供以后的过程实例调用。
        4结束语
        本文设计并实现了一种动态轻量级工作流引擎LWDWE。在架构方面,使用总线型的引擎架构;在工作流模型上,给出了一种工作流实现模型和节点的调度机制。对动态修改策略进行改进并支持流程实例的动态修改。论文首先给出系统支持的工作流模型和引擎调度机制,给出引擎的架构及关键实现算法,并通过实例证明了该引擎的可用性。本论文仅实现了对动态工作流的支持,未深入考虑动态流程的正确性问题,设计并实现流程模型及实例的正确性验证算法是本作者下一步的工作。
        参考文献:
        [1]欧盛芬,阳亦斌,杨将,何见坤.基于Activiti工作流引擎的电务生产管理平台设计与实现[J].铁路通信信号工程技术,2020,17(06):50-55.
        [2]张雷,刘晓东,路晶.基于闭环工作流引擎的通用航空安全管理信息系统的设计与实现[J].中国民航飞行学院学报,2019,30(03):35-38.
        [3]郭玉彬,蔡泽野,林泽伟,徐银鹏.轻量级动态工作流引擎的设计与实现[J].计算机工程与设计,2014,35(03):1105-1109.
 
 
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: