CN106528157B - 一种基于scxml标准的状态机工作流引擎 - Google Patents

一种基于scxml标准的状态机工作流引擎 Download PDF

Info

Publication number
CN106528157B
CN106528157B CN201611012097.3A CN201611012097A CN106528157B CN 106528157 B CN106528157 B CN 106528157B CN 201611012097 A CN201611012097 A CN 201611012097A CN 106528157 B CN106528157 B CN 106528157B
Authority
CN
China
Prior art keywords
state machine
event
workflow
instance
machine workflow
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201611012097.3A
Other languages
English (en)
Other versions
CN106528157A (zh
Inventor
余阳
郑强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Yat Sen University
Original Assignee
Sun Yat Sen University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Yat Sen University filed Critical Sun Yat Sen University
Priority to CN201611012097.3A priority Critical patent/CN106528157B/zh
Publication of CN106528157A publication Critical patent/CN106528157A/zh
Application granted granted Critical
Publication of CN106528157B publication Critical patent/CN106528157B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4498Finite state machines

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明涉及一种基于SCXML标准的状态机工作流引擎,包括流程解析器、任务分派器、实例管理器和多状态机事件转发器;其中流程解析器用于解析流程定义文件;任务分派器用于向相应的资源分派在流程定义文件中指定的任务;实例管理器用于管理所有的状态机工作流实例;多状态机事件转发器用于接收状态机工作流实例在运行过程中发送的事件,并通过查找源状态机工作流实例的状态机实例树将该事件传递至相应的状态机工作流实例。本发明所提供的工作流引擎不仅具有传统工作流引擎引擎的任务分派能力,而且具有转发事件的能力,提升了实例之间的异步性,使得它能够为复杂协作式流程提供运行时的支持。

Description

一种基于SCXML标准的状态机工作流引擎
技术领域
本发明涉及工作流和状态机领域,更具体地,涉及一种基于SCXML标准的状态机工作流引擎。
背景技术
工作流技术最早被应用在企业内部文档的传递,随着时代的发展,工作流技术在企业间的跨组织协作、电子商务、行政管理等方面得到了广泛的应用。近年来,互联网的蓬勃发展对如何使用工作流技术来解决具有一系列新特性的业务流程问题提出了新的考验。传统工作流引擎不支持网络社会中复杂的协作流程的执行。在此情况下,迫切需要一种能够支持复杂协作流程执行的工作流引擎。
有限状态机(FSM)广泛被用于数字电路设计、游戏开发、单片机开发,程序设计等相关领域,但是随着应用复杂性的提升,FSM也慢慢的暴露出了自身的缺点:一旦状态和转移数量增多,不可避免的会出现状态爆炸情况。为了解决这个问题,很多针对FSM的扩展方案被提出来,其中David Harel提的Statechart模型针对状态爆炸问题提出了层次、并发、通信等扩展,并且具有严格的形式化语义。因此,该模型被对象管理组织组织采纳成为统一建模语言中状态图的基本思想,同时也被万维网联盟接受成为了State Chart XML(SCXML)状态机规范。目前已知的状态机工作流引擎有,微软的WWF,OpenSymphony组织的OSWorkflow。这些引擎对子流程的支持程度不够,缺少流程实例之间信息的共享,导致其不能支持复杂协作式流程的执行。例如子流程的数目是动态确定的,子流程到达某一个状态的时候必须报告给父流程或者其他流程相应的信息,从而驱动父流程或者其他流程的执行等复杂协作式流程。SCXML丰富的表达能力和事件驱动的思想,为构建支持复杂协作式流程的工作流引擎提供了可能。
发明内容
本发明为解决以上现有技术的难题,通过扩展状态机的进入动作和转移动作而提供了一种基于SCXML标准的状态机工作流引擎。由于该引擎具备任务派发和事件转发能力,使得它能够为复杂协作式流程提供运行时的支持。
为实现以上发明目标,采用的技术方案是:
一种基于SCXML标准的状态机工作流引擎,包括流程解析器、任务分派器、实例管理器和多状态机事件转发器;
其中流程解析器用于解析流程定义文件;
任务分派器用于向相应的资源分派在流程定义文件中指定的任务;
实例管理器用于管理所有的状态机工作流实例;
多状态机事件转发器用于接收状态机工作流实例在运行过程中发送的事件,并通过查找源状态机工作流实例的状态机实例树将该事件传递至相应的状态机工作流实例。
优选地,所述流程定义文件中对任务的描述方式通过userTask节点定义,所述userTask节点表示如下:
<userTask name=" " assiginee="" role="" instancesExpr="" event="">
<form name="" src="">
</form>
</userTask>;
其中name表示任务的名字,assiginee指定了该任务的执行者,role表示只能执行该任务的角色,instanceExpr表示任务的数量,event表示任务完成之后发送给接收任务的状态机工作流实例的事件名,form表示动态表单,form节点中name表示表单名字,src表示表单路径。
优选地,所述多状态机事件转发器使用源状态机工作流实例所在的状态机实例树来传递事件,该状态机实例树的构建过程涉及到stateMachine节点,所述stateMachine节点表示如下:
<stateMachine src="" instances="">
<param name="" value=""></param>
<param name="" value=""></param>
</stateMachine>;
stateMachine节点用来启动新的状态机工作流实例,其中,src表示需要启动的新的状态机工作流实例的流程定义文件的路径,instances表示需要启动的新的状态机工作流实例的数量,param表示传递给需要启动的新的状态机工作流实例的参数;
启动新的状态机工作流实例的过程伴随着构建状态机实例树的过程,如下:
在启动新的状态机工作流实例时,调用流程解析器的解析方法根据stateMachine节点描述的src属性去获取流程定义文件,使用其返回的流程定义新建一个对应的状态机工作流实例,然后启动该状态机工作流实例;最后将该状态机工作流实例对应的ID插入到当前状态机工作流实例的状态机实例树,并且将对应的ID和状态机工作流实例插入到实例管理器里面。
优选地,所述状态机工作流实例向多状态机事件转发器发送事件时,是通过send节点向多状态机事件转发器发送事件的,send节点的描述如下:
<send event="" type="" mode="" targetName="" targetState="">
<param name="" value=""></param>
</send>;
send节点中的type,targetName,targetState, mode属性共同决定了目标状态机工作流实例的位置,param节点指定了该事件的参数;其中,event表示事件的名字;type表示目标状态机工作流实例的类型;targetName表示目标状态机工作流实例的名字;targetState表示目标状态机工作流实例当前所处的状态;param节点中name表示参数的名字,param节点中的value表示参数的值,send节点中可以有多个param节点,mode表示该事件的传播模式,所述的传播模式包括:
广播:表示传递给当前状态机工作流实例的状态机实例树上的所有节点;
多播:包括toOffspring、toChild、toSibling、toAncestor;其中,toOffspring表示传递给当前状态机工作流实例的所有子孙节点,toChild表示传递给当前状态机工作流实例的所有孩子节点,toSibling表示传递给当前状态机工作流实例的所有兄弟节点,toAncestor表示传递给当前状态机工作流实例的所有祖先节点;
组播:表示传递给状态机实例树中指定的一组状态机工作流实例;
单播:包括toParent,toParent表示传递给当前状态机工作流实例的父亲节点;
状态机工作流实例之间的通信的具体实现过程如下:状态机工作流实例向多状态机事件转发器发送相应的事件,多状态机事件转发器接收事件后通过查找源状态机工作流实例所在的状态机实例树将该事件传递至相应的状态机工作流实例。
与现有技术相比,本发明的有益效果是:
本发明所提供的工作流引擎不仅具有传统工作流引擎的任务分派能力,而且具有转发事件的能力,提升了实例之间的异步性,使得它能够为复杂协作式流程提供运行时的支持。
附图说明
图1为状态机工作流引擎的逻辑结构示意图。
图2为任务分派的顺序图。
图3为创建实例的顺序图。
图4为事件转发的顺序图。
图5为状态机工作流实例生成树示例图。
具体实施方式
附图仅用于示例性说明,不能理解为对本专利的限制;
以下结合附图和实施例对本发明做进一步的阐述。
实施例1
本发明的主要发明方案是提供一种状态机工作流引擎。
如图1所示,本发明所提供的状态机工作流引擎是基于SCXML标准构造而成的,其包括流程解析器、任务分派器、实例管理器和多状态机事件转发器;
其中流程解析器用于解析流程定义文件;
任务分派器用于向相应的资源分派在流程定义文件中指定的任务;
实例管理器用于管理所有的状态机工作流实例;
多状态机事件转发器用于接收状态机工作流实例在运行过程中发送的事件,并通过查找源状态机工作流实例的状态机实例树将该事件传递至相应的状态机工作流实例。
上述方案中,所述流程定义文件中对任务的描述方式通过userTask节点定义,所述userTask节点表示如下:
<userTask name=" " assiginee="" role="" instancesExpr="" event="">
<form name="" src="">
</form>
</userTask>;
其中name表示任务的名字,assiginee指定了该任务的执行者,role表示只能执行该任务的角色,instanceExpr表示任务的数量,event表示任务完成之后发送给接收任务的状态机工作流实例的事件名,form表示动态表单,form节点中name表示表单名字,src表示表单路径。
如果在SCXML标准的onEntry节点内有定义userTask子节点,那么此节点的定义会被流程解析器解析为一个任务,在进入对应状态的时候,任务分派器会将该任务分配给assiginee或者role所指定的资源去执行。当任务完成的时候,状态机工作流实例接收event属性指定的事件完成状态转移。
流程定义文件中的userTask节点被流程解析器解析成了一个UserTask对象。该UserTask对象的顺序图如图2所示,其中资源服务负责管理用户和角色信息,工作项服务负责管理工作项信息,数据库保存流程中的所有数据。首先UserTask对象发送一个异步消息给任务分派器,一方面UserTask对象所在的线程返回继续执行,另一方面任务分派器所在的线程根据任务数量在角色下面找到相同数量的执行者,然后给每一个执行者分配工作项。
上述方案中,所述多状态机事件转发器使用源状态机工作流实例所在的状态机实例树来传递事件,该状态机实例树的构建过程涉及到stateMachine节点,所述stateMachine节点表示如下:
<stateMachine src="" instances="">
<param name="" value=""></param>
<param name="" value=""></param>
</stateMachine>;
stateMachine节点主要用来启动新的状态机工作流实例,其中,src表示需要启动的新的状态机工作流实例的流程定义文件的路径,instances表示需要启动的新的状态机工作流实例的数量,param表示需要传递给新的状态机工作流实例的参数;
启动新的状态机工作流实例的过程伴随着构建状态机实例树的过程,如下:
在启动新的状态机工作流实例时,调用流程解析器的解析方法根据stateMachine节点描述的src属性去获取流程定义文件,使用其返回的流程定义新建一个对应的状态机工作流实例,然后启动该状态机工作流实例;最后将该状态机工作流实例对应的ID插入到当前状态机工作流实例的状态机实例树,并且将对应的ID和状态机工作流实例插入到实例管理器里面。
流程定义文件中的stateMachine节点被流程解析器解析成了一个StateMachine对象。该StateMachine对象的顺序图如图3所示,其中实例执行上下文保存了流程执行过程的上下文数据。首先从实例执行上下文中获取当前状态机工作流实例的状态机实例树。然后执行一个循环,一共执行stateMachine节点中instances属性值描述的次数,每一次循环都调用流程解析器的解析方法,该方法根据stateMachine节点描述的src属性去获取流程定义,使用其返回的流程定义对象新建一个对应的状态机工作流实例,然后启动该实例。最后将该实例对应的ID插入到状态机实例树,并且将对应的ID和实例对象对象插入到实例管理器里面。
为了方便回溯祖先节点,状态机实例树的存储结构采用左孩子右兄弟加父亲的表示方法。如图5所示的状态机实例树,树中a,b,c,d表示业务流程中涉及到的四种类型的状态机,a1_s1表示a类型的状态机工作流实例a1正处于s1状态,a1指向a2的箭头表示a1状态变化过程中生成了a2实例,a2是a1的子节点。a2指向b1的箭头表示a1状态运行中生成了实例b1,其生成时间晚于a2,b1是a2的兄弟节点。a2和b1向上指向a1的箭头表示a1是它们的父亲节点,同理可推至其他节点。
上述方案中,状态机工作流实例向多状态机事件转发器发送事件时,是通过发送send节点向多状态机事件转发器发送事件的,send节点的描述如下:
<send event="" type="" mode="" targetName="" targetState=""> <paramname="" value=""></param> </send>;
send节点中的type,targetName,targetState, mode属性共同决定了目标状态机工作流实例的位置,param节点指定了该事件的参数。其中,event表示事件的名字;type表示目标状态机工作流实例的类型;targetName表示目标状态机工作流实例的名字;targetState表示目标状态机工作流实例当前所处的状态;param节点中name表示参数的名字,param节点中的value表示参数的值,send节点中可以有多个param节点,mode表示该事件的传播模式,所述的传播模式包括:
广播:表示传递给当前状态机工作流实例的状态机实例树上的所有节点;
多播:多播包括toOffspring、toChild、toSibling、toAncestor;其中,toOffspring表示传递给当前状态机工作流实例的所有子孙节点,toChild表示传递给当前状态机工作流实例的所有孩子节点,toSibling表示传递给当前状态机工作流实例的所有兄弟节点,toAncestor表示传递给当前状态机工作流实例的所有祖先节点。
组播:传递给状态机实例树中指定的一组中的状态机工作流实例;
单播:包括有toParent,toParent表示传递给当前状态机工作流实例的父亲节点;
状态机工作流实例之间的通信的具体实现过程如下:状态机工作流实例向多状态机事件转发器发送相应的事件,多状态机事件转发器接收事件后通过查找源状态机工作流实例所在的状态机实例树将该事件传递至相应的状态机工作流实例。
流程定义文件中的send节点被流程解析器解析成了一个Send对象。该Send对象的顺序图如图4所示。首先从实例执行上下文里面获取当前状态机工作流实例的状态机实例树,然后调用多状态机事件转发器的发送方法,多状态机事件转发器根据事件的传播模式、目标状态机工作流实例类型、目标状态机工作流实例名字、所处状态等信息从状态机实例树中获取满足条件的目标状态机工作流实例集合。最后使用一个循环将该事件发送给目标状态机工作流实例集合中的每一个目标状态机工作流实例。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

Claims (4)

1.一种基于SCXML标准的状态机工作流引擎系统,其特征在于:包括流程解析器、任务分派器、实例管理器和多状态机事件转发器;
其中流程解析器用于解析流程定义文件;
任务分派器用于向相应的资源分派在流程定义文件中指定的任务;
实例管理器用于管理所有的状态机工作流实例;
多状态机事件转发器用于接收状态机工作流实例在运行过程中发送的事件,并通过查找源状态机工作流实例的状态机实例树将该事件传递至相应的状态机工作流实例。
2.根据权利要求1所述的基于SCXML标准的状态机工作流引擎系统,其特征在于:所述流程定义文件中对任务的描述方式通过userTask节点定义,所述userTask节点表示如下:
<userTask name=" " assiginee="" role="" instancesExpr="" event="">
<form name="" src="">
</form>
</userTask>;
其中name表示任务的名字,assiginee指定了该任务的执行者,role表示只能执行该任务的角色,instanceExpr表示任务的数量,event表示任务完成之后发送给接收任务的状态机工作流实例的事件名,form表示动态表单,form节点中name表示表单名字,src表示表单路径。
3.根据权利要求1所述的基于SCXML标准的状态机工作流引擎系统,其特征在于:所述多状态机事件转发器使用源状态机工作流实例所在的状态机实例树来传递事件,该状态机实例树的构建过程涉及到stateMachine节点,所述stateMachine节点表示如下:
<stateMachine src="" instances="">
<param name="" value=""></param>
<param name="" value=""></param>
</stateMachine>;
stateMachine节点用来启动新的状态机工作流实例,其中,src表示需要启动的新的状态机工作流实例的流程定义文件的路径,instances表示需要启动的新的状态机工作流实例的数量,param表示传递给需要启动的新的状态机工作流实例的参数;
启动新的状态机工作流实例的过程伴随着构建状态机实例树的过程,如下:
在启动新的状态机工作流实例时,调用流程解析器的解析方法根据stateMachine节点描述的src属性去获取流程定义文件,使用其返回的流程定义新建一个对应的状态机工作流实例,然后启动该状态机工作流实例;最后将该状态机工作流实例对应的ID插入到当前状态机工作流实例的状态机实例树,并且将对应的ID和状态机工作流实例插入到实例管理器里面。
4.根据权利要求1所述的基于SCXML标准的状态机工作流引擎系统,其特征在于:所述状态机工作流实例向多状态机事件转发器发送事件时,是通过send节点向多状态机事件转发器发送事件,send节点的描述如下:
<send event="" type="" mode="" targetName="" targetState="">
<param name="" value=""></param>
</send>;
send节点中的type,targetName,targetState, mode属性共同决定了目标状态机工作流实例的位置,param节点指定了该事件的参数;其中,event表示事件的名字;type表示目标状态机工作流实例的类型;targetName表示目标状态机工作流实例的名字;targetState表示目标状态机工作流实例当前所处的状态;param节点中name表示参数的名字,param节点中的value表示参数的值,send节点中可以有多个param节点,mode表示该事件的传播模式,所述的传播模式包括:
广播:表示传递给当前状态机工作流实例的状态机实例树上的所有节点;
多播:包括toOffspring、toChild、toSibling、toAncestor;其中,toOffspring表示传递给当前状态机工作流实例的所有子孙节点,toChild表示传递给当前状态机工作流实例的所有孩子节点,toSibling表示传递给当前状态机工作流实例的所有兄弟节点,toAncestor表示传递给当前状态机工作流实例的所有祖先节点;
组播:表示传递给状态机实例树中指定的一组中的状态机工作流实例;
单播:包括toParent,toParent表示传递给当前状态机工作流实例的父亲节点;
状态机工作流实例之间的通信的具体实现过程如下:状态机工作流实例向多状态机事件转发器发送相应的事件,多状态机事件转发器接收事件后通过查找源状态机工作流实例所在的状态机实例树将该事件传递至相应的状态机工作流实例。
CN201611012097.3A 2016-11-17 2016-11-17 一种基于scxml标准的状态机工作流引擎 Active CN106528157B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611012097.3A CN106528157B (zh) 2016-11-17 2016-11-17 一种基于scxml标准的状态机工作流引擎

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611012097.3A CN106528157B (zh) 2016-11-17 2016-11-17 一种基于scxml标准的状态机工作流引擎

Publications (2)

Publication Number Publication Date
CN106528157A CN106528157A (zh) 2017-03-22
CN106528157B true CN106528157B (zh) 2019-07-16

Family

ID=58352094

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611012097.3A Active CN106528157B (zh) 2016-11-17 2016-11-17 一种基于scxml标准的状态机工作流引擎

Country Status (1)

Country Link
CN (1) CN106528157B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107943457B (zh) * 2017-11-17 2021-01-15 中山大学 一种面向业务对象的工作流建模方法及系统
CN111176772B (zh) * 2019-12-24 2022-07-01 安克创新科技股份有限公司 用于状态切换的方法、装置以及机器人

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102566998A (zh) * 2010-12-30 2012-07-11 盛乐信息技术(上海)有限公司 基于数据来源的流程引擎设计方法
CN104517189A (zh) * 2014-12-26 2015-04-15 北京邮电大学 一种基于事件的工作流间协作的系统及方法
CN104850405A (zh) * 2015-05-25 2015-08-19 武汉众联信息技术股份有限公司 一种智能可配置工作流引擎及其实现方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102566998A (zh) * 2010-12-30 2012-07-11 盛乐信息技术(上海)有限公司 基于数据来源的流程引擎设计方法
CN104517189A (zh) * 2014-12-26 2015-04-15 北京邮电大学 一种基于事件的工作流间协作的系统及方法
CN104850405A (zh) * 2015-05-25 2015-08-19 武汉众联信息技术股份有限公司 一种智能可配置工作流引擎及其实现方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
一种通用状态机引擎设计与应用;李林 等;《实验科学与技术》;20121228;第10卷(第6期);第28页第1.3节,第29页页1.5节

Also Published As

Publication number Publication date
CN106528157A (zh) 2017-03-22

Similar Documents

Publication Publication Date Title
Syu et al. A survey on automated service composition methods and related techniques
CN107943457B (zh) 一种面向业务对象的工作流建模方法及系统
CN105719126B (zh) 一种基于生命周期模型的互联网大数据任务调度的系统及方法
WO2011060642A1 (zh) 一种分布式综合业务自动化测试系统及方法
CN102662725B (zh) 一种事件驱动的高并发流程虚拟机实现方法
CN109101373A (zh) 基于订阅/发布模式的通用测试平台
CN113067900B (zh) 智能合约的部署方法及装置
Rostami et al. Web services composition methods and techniques: A review
Combi et al. Flaws in the flow: The weakness of unstructured business process modeling languages dealing with data
CN106528157B (zh) 一种基于scxml标准的状态机工作流引擎
CN101695080A (zh) Bpmn组合服务的执行方法和执行装置
CN108399095B (zh) 支持动态管理定时任务的方法、系统、设备和存储介质
CN102073505B (zh) 面向服务组装的声明式事务集成方法和系统
Kraemer et al. Synthesizing components with sessions from collaboration-oriented service specifications
Melliti et al. Distributed behavioural adaptation for the automatic composition of semantic services
CN103064688B (zh) 工作流通用服务的方法和系统
Di Lorenzo et al. Towards Semantics Driven Generation of Executable Web Services Compositions.
Rademacher et al. Design of a domain-specific language based on a technology-independent web service framework
Gorski et al. SOA-readiness of REST
CN113434268A (zh) 一种工作流分布式调度管理系统和方法
Dumez et al. Formal specification and verification of service composition using LOTOS
Slimani et al. Interactive ontology evolution management using mutli-agent system: a proposal for sustainability of semantic interoperability in SOA
Banti et al. Specification and analysis of SOC systems using COWS: A finance case study
Zhang et al. Modeling and analysis of 3D Printing WS-BPEL business processes based on servicenet
Schermann Extending the Peer Model with composable design patterns

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant