一种基于历史路径的工作流实例迁移方法

时间:2022-08-12 02:03:13

一种基于历史路径的工作流实例迁移方法

摘要:工作流变更中一个重要问题就是工作流实例的迁移问题。该文根据工作流实例执行的历史路径和节点路由表提出了一个新的迁移策略,减少了一些不必要的回滚和迁移,并对每个节点都确定了相应了迁移动作。

关键字:迁移;历史路径;动态动作流

中图分类号:TP311文献表示码:A文章编号:1009-3044(2009)33-9597-02

Work Flow Instance Migration Approach Based on History Route

JING Chao, HOU Xiu-ping, HAO Shuai

(College of Computer and Engineering, Changchun University of Technology, Changchun 130012, China)

Abstract: One of the most crucial issues in workflow alteration is the transfer of workflow instance. This paper puts forward a brand-new transfer strategy based on historical path and node-route table of workflow instance which avoids unnecessary rollback and transfer while confirms corresponding transfer activities.

Key words: transfer; history route; dynamic workflow

随着工作流技术实际应用的不断深入,人们对其提出了更多的功能要求。在现实需求中,一个工作流在运行中很有可能发生变化,这就要求工作流模型有自适应变化的能力,并且正在运行的工作流实例往往需要尽早地按照新的工作流过程模型继续执行,并保持已做工作的最大化[1]。在研究工作流动态性的过程中,研究人员先后提出过许多方法来解决相关问题。文献[2]提出了变更区域的概念,但没有给出变更区域的自动识别方法。文献[3]基于工作流网的概念,提出了自动计算变更区域的方法,保证了动态变更区域以外的实例能够正确迁移,然而这是一个充分不必要条件,计算过程也过于复杂。文献[4]提出了继承保留规则的方法,然而这是一个预防性的问题处理方法,仅适合与变更前后的工作流模型存在父类与子类继承关系的情况。本文引入了执行路径来判断工作流实例的执行状态,提出了一种基于状态的工作流实例迁移检测和调整算法,且由该算法自动生成的迁移规则总能保证实例的回退工作尽可能少。

1 工作流模型定义

定义1 工作流模型定义,为一个三元组W=(ID,X,F),其中:ID为工作流版本号标识。X为节点集合。F=N×N为控制流关系。

定义2 节点定义,为一个三元组N=(ID ,Name,ExecuteCode),其中id为节点的序号,Name为活动节点的名字。ExecuteCode为当前节点要执行的方法。

定义3 工作流实例定义,为一个三元组Istance=(ID,W,H),其中id为工作流实例唯一标识,W为实例运行的工作流模型,H表示当前工作流实例已经执行过的活动节点的集合。

2 迁移算法设计

2.1 相关规则定义

定义4 偏序关系定义,设集合X为工作流活动图上节点集合。关系R为集合X上任务节点执行的先后顺序,用"

定义5 节点操作方法定义,对于工作流模型中的节点N0,定义如下操作函数。

Succ(N0,W) = {N1| N0< N1,并且对于任意的节点N2∈X,(N0< N2∩N2< N1) = false,N0,N1,N2∈X.其中X为工作流W中的节点集合},求出节点X的直接后继节点集合。

Prec (N0,W) = { N1| N1< N0,并且对于任意的节点N2∈X, (N1< N2∩N2< N0) = false, N0,N1,N2∈X.其中X为工作流W中的节点集合.},求得节点X的直接前驱节点集合。

Succ*( N0,W) = { N1| N0< N1, N0,N1∈X.其中X为工作流W中的节点集合},求出节点X的所有后继节点集合。

Prec*(N0,W) = { N1| N1

定义6 工作流实例的操作方法

RoolBack(W0,N0,id),在工作流模型W0 中将当前工作流实例回滚到活动节点N0,并修改相应信息(如H)。

Transfer(id,W),把工作流实例迁移到工作流模型W上运行。首先对当前的工作流实例持久化,把运行期的数据存储到磁盘中,然后在新的模型中实例化一个新的工作流作流实例,反序列化原实例的数据,并把相关数据信息给新实例赋值。

Start(id),开始执行工作流实例

Suspend(id),挂起当前工作流实例

Resume(id),重新启动挂起的工作流实例

2.2 工作流实例迁移算法

我们目前把所有工作的流的活动节点都定义为原子节点,一个节点可以是几个节点组成的节点组,该文暂时不考虑一个节点组修改的情况。

当工作流模型发生变更时,该文基于历史路径提出了一种工作流实例迁移算法,算法思想为:根据原工作流模型和新工作流模型的节点集合数量来判断新的工作流模型是增加节点,删除节点还是替换节点。然后根据当前工作流实例执行的历史路径信息H,得到当前工作流实例正在执行的节点,判断如果模型的更改对当前实例没有影响,当前实例不用迁移,还在原来的模型上运行即可。如果模型的更改对当前实例有影响,则当前实例根据不同的情况修改信息后,迁移到新的工作流模型上运行。

用W0(0,X0,F0)和W1(1,X1,F1)分别表示新旧工作流过程模型,Istance(0,W0,H)表示工作流当前实例。定义两个节点变量Node Nc,Nc为变化的活动节点,Nn = H.Last; Nn 为工作流实例正在执行的当前活动节点。算法实现如下

如果Count(X0)>Count(X1)||(Count(X0)=Count(X1) && F0 != F1) //删除节点或替换节点

Nc = X0 C (X1∩X0);

Case : Nn ∈ Prec*( Nc) // 当Nn 是Nc的前驱节点

Do{ Suspend(id);Transfer(id,W1);Resume(id)}

Case : Nn ∈ Succ*( Nc) // 当Nn 是Nc的后继节点

If(Nc∩H ==Nul ) Go Ahead;//工作流模型变化对当前实例没有影响,继续运行

Else:{ Node Pre = Prec( Nc) ∩ H//在执行路径上找到Nc 的前驱节点

Do{ Suspend(id);RoolBack(W0,Pre, id); Transfer(id,W1);Resume(id)}

Default: Go Ahead ;

如果Count(X0)

Nc = X1- X0;

Case : Nn ∈ Prec*( Nc) // 当Nn 是Nc的前驱节点

Do{ Suspend(id);Transfer(id,W1); Resume(id); }

Case : Nn ∈ Succ*( Nc) // 当Nn 是Nc的后继节点

Node Pre = Prec( Nc) ∩ H//在执行路径上找到Nc 的前驱节点

If(Pre ==Null ) Go Ahead;

Else : Do {Suspend(id); RoolBack(W0,Pre, id);Transfer(id,W1);Resume(id);}

其它: Go Ahead // 算法结束

3 应用实例

对于一个手机生产的流程,手机出来的产品有两种,一种是普通手机,这种手机只有普通的操作系统,支持手机的正常操作功能。第二种手机添加了电子书阅读功能。这两种手机产品都是合理的。则整个手机生产的过程处理流程简化为工作流模型如图1所示。其中N1.装配机器外壳N2.装配操作系统N3.增加电子书软件(可选装配)N4.组装机器。

由于市场需求的需要,客户需要有手机同时具备电子书和Mp3功能,只具有单一阅读电子书功能的产品将停产。则流程中增加了Mp3播放一个流程项。新的过程流程变更为工作流模型如图2所示,其中N1.装配机器外壳N2.装配操作系统N3.增加电子书软件(可选装配)N4.增加Mp3软件(可选装配)N5.组装机器。

原工作流模型和新的工作流模型分别表示为W0(0, X0,F0) ,W1(0,X1,F1)

根据Count(X1) >Count(X0),可以判断出新的工作流模型是在原模型上增加节点。可以得到变化节点Nc = N4(增加Mp3软件),变化节点的前驱节点集合Prec*(Nc)={N1,N2,N3}。变化节点的后继结点结合Succ*(Nc)={N5},对于实例Instance(0,W0,H)中的H信息,找到H中的最后一个活动节点N0, N0即为当前工作流实例正在执行的活动节点。

1) 当H={启动,N1}时,N0=N,实例不用迁移,继续运行。

2) 当H={启动,N1,N2}时,N0=N2,实例不用迁移,继续运行。

3) 当H={启动,N1,N2,N3}时,N0=N3,实例不用迁移,继续运行。

4) 当H={启动,N1,N2,N5}时,N0=N5,模型变更对工作流实例没有影响,实例不用迁移,继续运行。实例结束后运行的路径为{启动,N1,N2,N5,结束}

5) 当H={启动,N1,N2,N3,N5}时,N0=N5,模型更改对工作流实例有影响,先将运行中的工作流实例回滚到N3节点,迁移到新的工作流模型中再继续执行。这时实例结束后运行的路径为{启动,N1,N2,N3,N4,N5,结束}

该文基于工作流实例历史路径的信息提出来一个工作流实例的迁移方法,该方法可以有效的避免不必要的回滚和迁移,提高了工作流实例的运行效率。该文的研究仅仅把工作流改变节点抽象为原子节点来研究的,对于节点组的迁移算法情况,将是该文以后研究的方向和重点。

参考文献:

[1] 魏登萍,姜新文.工作流演进变化中迁移策略的自动生成[J].计算机应用,2006,26(4):995-997.

[2] ELLISC,KEDDARAK,ROZENBERGG.Dynamic change within workflow systems[C]//Proceedings of ACM Conference on Organizational Computing Systems.New York:ACM Press 1995:10-21.

[3] VAN NDE RAALST W M P.Exterminating the dynamic change bug: a concrete approach to support workflow change[J].Information Systems Frontiers,2001,3(3):297-317.

[4] VAN NDE RAALST W M P,BASTENT T.Inheritance of workflow: an approach to tackling problems related to changes[J].The oretical Computer Science,2002,270(1/2):125-203.

上一篇:基于传感网的电缆监测系统实现 下一篇:局域网管理系统的设计