赵军富 谭跃生 王猛
摘 要: 当前工作流管理系统发展的瓶颈问题是其缺乏支持动态变化、不具有动态修改能力及自适应性。引入分布式数据管理语言作为工作流模型定义语言,来创建能够动态修改的工作流模型。设计并实现了一个动态自适应工作流引擎,该引擎在工作流执行过程中能够动态修改过程模型,允许对流程中的未执行节点进行动态的增加、删除和修改,给出了流程动态修改策略及自适应算法,解决工作流动态变化带来的正确性、一致性和自适应性的问题。
关键词: Active XML; 动态修改; 自适应; 工作流引擎
中图分类号: TN911?34; TP391 文献标识码: A 文章编号: 1004?373X(2017)22?0075?03
Abstract: Lack of dynamic change support, the dynamic modification ability and adaptation has become the current development bottleneck for the workflow management system. Therefore, the Active XML (distributed data management language) was taken as a workflow model definition language to create a workflow model supporting dynamic modification. A dynamic and adaptive workflow engine was designed and implemented, which can not only dynamically modify the process model in the workflow execution, but also allow it to add, delete and modify the non?execution nodes dynamically. The dynamic modification strategy in flow path and adaptive algorithm are presented to solve the problems of correctness, consistency and adaptability caused by the dynamic change of workflow.
Keywords: Active XML; dynamic modification; self?adaptation; workflow engine
0 引 言
随着工作流管理系统在企业中应用的不斷深入,企业对工作流管理系统提出更高的需求。工作流管理系统无法事先确定所有的流程,往往在流程的执行过程中并不是一成不变,导致工作流系统出现“死锁”现象[1]。设计具有实时的动态修改和自适应性的工作流引擎,解决当前工作流发展的瓶颈,成为当前工作流管理系统研究的热点。
本文首先分析了动态修改和自适应工作流动态性的内在实质和外在表现,引入分布式数据管理语言(Active XML)作为工作流模型定义语言,创建能够进行动态修改的工作流模型。设计具有自适应性的工作流引擎框架[2],然后给出流程的动态修改规则及动态修改算法,并在动态修改后如何保证工作流系统运行的数据一致性和正确性问题进行讨论。
1 动态自适应工作流分析
工作流的动态性主要表现在工作流定义阶段可以动态修改预先定义的流程,在工作流运行阶段,能够动态修改过程模型和实例。能够对流程中状态为未执行的节点进行动态的增加、删除和修改。同时,能够对一个实例的具体活动的属性及状态的动态进行修改。
因此,能够动态修改和具有自适应的工作流必须支持如下三个功能[3]:
(1) 对工作流的过程定义能够动态进行编制和修改;
(2) 能够给出工作流对过程和活动的动态修改规则;
(3) 给出对流程动态修改算法,来保证工作流系统的数据一致性和正确性问题。
2 可动态修改的自适应工作流模型
工作流模型是工作流管理系统的核心,工作流模型是由流程中的相关过程和活动构成,下面给出工作流模型[4]及相关定义[5]:
定义1(工作流):是一个由一系列的相关过程组成的集合,过程与过程之间可能是相互独立,也可能存在着数据或控制的关联。工作流可表示为:WF=(P1,P2,…,Pm,R(s))(m≥1)。其中,P={P1,P2,…,Pm}为工作流过程的集合;R(s)=(R1,R1,…,Rn)(n≥1)是工作流过程之间关联规则集合。
定义2(工作流过程):是一个由一系列工作流的活动组成有序集合。一个工作流过程包含了过程运行中涉及到的所有数据和相关规则。工作流过程可表示为:P=(A1,A2,…,Aj,Rules),其中A1,A2,…,Aj是组成该过程的活动集合,Rules代表组成该过程的活动之间的关联规则的集合。
定义3(工作流活动):可以表示为一个六元组Activity =(A_Id,A_Name,A_T,A_Data,A_State,A_Attribute)。其中:A_Id表示活动标号;A_Name表示活动名称;A_T (逻辑表达式)表示该活动完成的一个具体的动作;A_Data 表示与该活动有关的一组输入/输出数据;A_State表示活动的状态[4];A_Attribute 表示该活动在执行时的行为属性。
如图1所示,工作流模型[6]主要是由过程和活动构成的,为了能够创建具有动态修改和自适应能力的工作流实例,工作流模型必须将工作流过程定义中的过程、活动和相关规则进行抽象描述。endprint
同时,工作流模型必须具有能够在定义阶段表示不确定的过程或活动;能够允许在运行阶段修改预先定义的流程。
3 基于AXML动态自适应工作流引擎的设计
本工作流管理系统以AXML作为过程定义语言,来建立工作流引擎。对于AXML文档的解析由于篇幅所限在此就不做太详细的叙述。工作流引擎首先将工作流模型进行解析,解析后在数据库中采用存储有向图的方法来对模型信息(过程、活动)进行实时存储,每个模型文档只需解析一次。同时对流程的动态修改信息在数据库中进行适时更新和记录,如图2所示为可动态修改的自适应工作流引擎框架[3]。
由图2可知,在自适应工作流引擎框架中,解析器首先在工作流模型文档库中查找要进行解析的过程模型,由Dom解析器和XML绑定技术根据模型具体信息解析出其中的“活动”、“ 关联规则”、“相关数据”分别存入对应的数据表。
分配器[7]是对活动的属性、状态、关联规则的管理,首先根据工作流实例的ID,以该实例中的活动为依据进行任务分配,生成工作列表,并将第一个活动状态置“就绪”。
路由选择器是对过程的相关数据和关联规则进行管理,根据过程与过程之间关联规则、过程执行结构(顺序、并行、循环、选择),控制活动的执行顺序。任务分配器和路由选择器必须支持动态修改,既要保持维护工作流数据的一致性,又要保持工作流控制的一致性。
4 流程动态修改规则及算法
4.1 动态修改规则
流程动态一般在工作流定义阶段和流程运行阶段进行修改。对于一个给定的工作流定义来讲,在过程定义阶段的修改[4]可以使用未知的活动X来代替该流程的动态性和不确定性,如图3所示。在流程的执行期间,假设未知的活动为X,X 将随着工作流执行中的一些结果逐渐明确,逐渐明确X的内部具体含义(如空节点或一组活动节点)。确保自适应工作流模型在定义阶段能够准确对过程和活动的状态变化进行修改。
处于运行阶段的工作流,要对流程进行动态修改,需要进行一系列的相关操作才可以完成。比如,要在正在运行的流程当中插入一个新的活动,并且在这个新活动插入后,保证修改后的工作流过程与已执行的工作流实例之间具有前后连续性。由于流程处于运行状态,所以要完成动态修改涉及到几个关键步骤:首先,对流程进行暂停执行;其次,对活动或关联规则修改;然后,对正确性和一致性验证;最后,对流程进行恢复执行。图4给出插入一个活动的具体动态修改流程图。
流程暂停执行是指当工作流引擎执行过程中接到一个修改操作的消息时,引擎首先需要对该流程中正在运行的活动的状态置为暂停并挂起,然后才可以对活动或过程进行修改;对于插入的新活动需要描述出该活动的相应属性内容或流程关联规则,方可完成流程的动态修改;工作流修改后在引擎执行前需要对正确性和一致性验证(对正确性和一致性验证在下节讲解);最后在保证流程的正确性和一致性没有问题的情况下,继续恢复流程的启动。
4.2 流程正确性和一致性验证
在工作流的动态修改中,不但要保证过程与过程间的数据一致性,而且还应保证流程的正确性。本文使用事务的特点,在过程的动态修改中,各相关过程要么全部执行,要么一点都不执行。
流程正确性和一致性验证必须考虑以下几方面问题[8]:
(1) 新活动的插入是否会影响到原流程的运行状态,包括已执行部分被撤销的活动、重新插入的活动开始继续向后执行、向前回退到某个活动以及向后跳到其他活动执行[9]。
(2) 新插入活动与原先的活动间存在的数据关联和控制关联,这些关联关系是什么,这些必须有相应的关联规则进行约束。
(3) 动态修改后的工作流必须对其进行验证,是否破坏了数据一致性和控制的一致性。下面通过动态修改算法来保证动态修改后的流程的正确性和一致性。
4.3 动态修改算法
为了确保流程的正确性和一致性,防止错误的修改,本文只对流程中插入新增节点的操作进行算法[1]实现,对于修改和删除节点算法不做讲解。
流程插入节点算法及步骤:
(1) 定义函数AddNode(int NodeId,NodeProperty),其中NodeId为当前节点的Id,NodeProperty为新增节点属性。
(2) 读取当前要修改流程信息,根据NodeId找到当前运行节点及其下一个节点NextId。
(3) 调用AddNode函数生成一个新节点,由NodeProperty信息为该节点的各个属性赋值。同时,将NextId赋值给该节点的孩子节点。
(4) 将步骤(2)中获得的节点的孩子节点NextId的属性赋值为步骤(3)中新生成的节点NodeId。
(5) 将动态修改信息在工作流模型数据库中进行适时更新和记录。
假设节点A的输出连接到节点B,即A,B处于顺序关系。在A,B两节点之间插入一个新节点C所需要做的操作包括:记录A的输出(A节點的属性);修改C的输入连接为A的转出;修改A的输出连接指向C。使节点C的输出作为节点B的输入,节点A,C,B处于顺序关系。
5 结 论
本文首先利用Active XML的动态特性建立可动态修改自适应工作流模型,根据工作流在流程和活动方面的修改建立可支持动态修改的工作流引擎,给出了流程动态修改的策略、流程动态修改算法、流程正确性和一致性验证方法。工作流动态修改过程中出现异常如何处理,是笔者下一步的研究工作。
参考文献
[1] REICHERT M, DADAM P. ADEPT flex?supporting dynamic changes of workflow without losing control [J]. Journal of intelligent information system, 2013(10): 93?129.endprint
[2] HSIEH Fu?Shiung, LIN Jim?Bon. A self?adaptation scheme for workflow management in multi?agent systems [J]. Journal of intell manuf, 2016, 27: 131?148.
[3] 郭玉彬,蔡泽野,林泽伟,等.轻量级动态工作流引擎的设计与实现[J].计算机工程与设计,2014,35(3):1105?1109.
[4] CAO Jian, YAO Yan, WANG Yi. Mining change operations for workflow platform as a service [J]. World wide Web, 2015, 18: 1071?1092.
[5] LIU Ji, PACITTI Esther, VALDURIEZ Patrick. Marta Mattoso: a survey of data?intensive scientific workflow management [J]. Journal of grid computing, 2015, 13: 457?493.
[6] 杨磊,吴哲辉,吴振寰.基于面向对象Petri网的组织间工作流建模[J].计算机应用与软件,2014,31(8):59?62.
[7] 余阳,王颍,刘醒梅,等.基于社会关系的工作流任务分派策略研究[J].软件学报,2015,26(3):562?573.
[8] KIM Kyong Ju, YUN Won Gun, LEE Ju?hyun, et al. Schedule compression in tunneling projects by adjusting workflow variability [J]. KSCE journal of civil engineering, 2014, 18(6): 1625?1631.
[9] KAMMER P J. Techniques for supporting dynamic and adaptive workflow [J]. Computer supported cooperative work, 2014, 9(3/4): 269?292.endprint