一种流程虚拟机的流转方法和装置.pdf

上传人:xia****o6 文档编号:1482829 上传时间:2018-06-17 格式:PDF 页数:23 大小:7.72MB
返回 下载 相关 举报
摘要
申请专利号:

CN201210160828.4

申请日:

2012.05.22

公开号:

CN103426045A

公开日:

2013.12.04

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06Q 10/06申请日:20120522|||公开

IPC分类号:

G06Q10/06(2012.01)I; G06F9/455

主分类号:

G06Q10/06

申请人:

阿里巴巴集团控股有限公司

发明人:

章向明

地址:

英属开曼群岛大开曼资本大厦一座四层847号邮箱

优先权:

专利代理机构:

北京润泽恒知识产权代理有限公司 11319

代理人:

赵娟

PDF下载: PDF下载
内容摘要

本申请提供了一种流程虚拟机的流转方法和装置,其中,所述方法包括:步骤S10,根据流程定义创建流程实例;步骤S11,确定当前操作节点;步骤S12,创建所述当前操作节点的活动实例;步骤S13,当所述活动实例存在节点进入事件时,触发所述事件;步骤S14,执行所述当前操作节点的行为;步骤S15,当所述活动实例存在节点离开事件时,触发所述事件;步骤S16,根据所述当前操作节点的行为执行结果,获取所述当前操作节点的出口有向连接;步骤S17,调用所述流程实例的流转方法;步骤S18,当所述出口有向连接存在流转事件时,触发所述事件;步骤S19,根据所述有向连接找到下一个操作节点,返回步骤S11。本申请可以支持多线程并发执行,满足在高并发场景下的响应性能。

权利要求书

权利要求书
1.  一种流程虚拟机的流转方法,其特征在于,包括:
步骤S10,根据流程定义创建流程实例;
步骤S11,确定当前操作节点;
步骤S12,创建所述当前操作节点的活动实例;
步骤S13,当所述活动实例存在节点进入事件时,触发所述节点进入事件;
步骤S14,执行所述当前操作节点的行为;
步骤S15,当所述活动实例存在节点离开事件时,触发所述节点离开事件;
步骤S16,根据所述当前操作节点的行为执行结果,获取所述当前操作节点的出口有向连接;
步骤S17,调用所述流程实例的流转take方法;
步骤S18,当所述出口有向连接存在流转事件时,触发所述流转事件;
步骤S19,根据所述出口有向连接找到下一个操作节点,返回步骤S11。

2.  根据权利要求1所述的方法,其特征在于,所述根据流程定义创建流程实例的步骤包括:
根据流程定义创建单个流程实例;
或者,
根据流程定义同步创建多个流程实例。

3.  根据权利要求1或2所述的方法,其特征在于,所述当前操作节点为一个或多个;
当所述当前操作节点为多个时,所述创建当前操作节点的活动实例的步骤为:
分别在不同的线程中同步创建各个当前操作节点的活动实例。

4.  根据权利要求3所述的方法,其特征在于,还包括:
步骤S20,若当前操作节点为结束节点,则在步骤S14后,结束流程实例。

5.  根据权利要求1所述的方法,其特征在于,所述当前操作节点为:
根据流程定义找到的开始节点;
根据流程定义找到的指定节点;
或者,从子流程实例跳转到的父流程实例中的指定节点。

6.  根据权利要求1或2或4或5所述的方法,其特征在于,在步骤S13之前,还包括:
步骤S12-1,调用所述活动实例的运行perform方法。

7.  根据权利要求1或2或4或5所述的方法,其特征在于,在步骤S15之前,还包括:
步骤S14-1,调用所述活动实例的流转take方法。

8.  根据权利要求7所述的方法,其特征在于,所述调用流程实例的流转take方法的步骤为,
所述活动实例的流转take方法将所述出口有向连接传递给流程实例的流转take方法。

9.  一种流程虚拟机的流转装置,其特征在于,包括:
流程实例创建模块,用于根据流程定义创建流程实例;
节点确定模块,用于确定当前操作节点;
活动实例创建模块,用于创建所述当前操作节点的活动实例;
节点进入事件触发模块,用于在所述活动实例存在节点进入事件时,触发所述节点进入事件;
节点行为执行模块,用于执行所述当前操作节点的行为;
节点离开事件触发模块,用于在所述活动实例存在节点离开事件时,触发所述节点离开事件;
有向连接获取模块,用于根据所述当前操作节点的行为执行结果,获取所述当前操作节点的出口有向连接;
流转模块,用于调用所述流程实例的流转take方法;
流转事件触发模块,用于所述出口有向连接存在流转事件时,触发 所述流转事件;
节点查找模块,用于根据所述出口有向连接找到下一个操作节点,然后返回调用所述节点确定模块。

10.  根据权利要求9所述的装置,其特征在于,所述流程实例创建模块包括:
单流程实例创建子模块,用于根据流程定义创建单个流程实例;
或者,
多流程实例创建子模块,用于根据流程定义同步创建多个流程实例。

11.  根据权利要求9或10所述的装置,其特征在于,所述当前操作节点为一个或多个;
当所述当前操作节点为多个时,所述活动实例创建模块包括:
同步创建子模块,用于分别在不同的线程中同步创建各个当前操作节点的活动实例。

12.  根据权利要求11所述的装置,其特征在于,还包括:
流程实例结束模块,用于在当前操作节点为结束节点时,在所述节点行为执行模块后调用,用于结束流程实例。

13.  根据权利要求9所述的装置,其特征在于,所述节点确定模块包括:
第一节点定位子模块,用于根据流程定义找到的开始节点;
第二节点定位子模块,用于根据流程定义找到的指定节点;
或者,第三节点定位子模块,用于从子流程实例跳转到的父流程实例中的指定节点。

14.  根据权利要求9或10或12或13所述的装置,其特征在于,还包括:
运行方法调用模块,用于在调用所述节点进入事件触发模块之前,调用所述活动实例的运行perform方法。

15.  根据权利要求9或10或12或13所述的装置,其特征在于,还包括:
流转方法调用模块,用于在调用所述节点离开事件触发模块之前,调用所述活动实例的流转take方法。

16.  根据权利要求15所述的装置,其特征在于,所述流转模块包括:
实例传递子模块,用于由所述活动实例的流转take方法将所述出口有向连接传递给流程实例的流转take方法。

说明书

说明书一种流程虚拟机的流转方法和装置
技术领域
本申请涉及工作流数据处理的技术领域,特别是涉及一种流程虚拟机的流转方法和一种流程虚拟机的流转装置。
背景技术
PVM(Process Virtual Machine,PVM)流程虚拟机是BPM(Business Process Management,业务流程管理)领域的一个最新流程理念。在实际的场景中,流程过程描述标准很多,例如BPEL(Business Process Execution Language,业务流程执行语言,是一种使用XML编写的编程语言,用于自动化业务流程),XPDL(XML Process Definition Language,是一个标准化规格,使用XML文件让不同的工作流程软件能够交换商业流程定义),JPDL(JBoss jBPM Process Definition Language,是构建于jBPM框架上的流程语言之一)等等。PVM的提出,是为了能够支撑多种流程语言。PVM的核心设计思想来源自″过程组件模型″,本质思想是将过程图中的活动与一个实现该活动运行时行为相关联,并用一种通用编程语言实现。PVM可以很好的支持各种不同类型的流程语言,并且能够将不同流程语言所定义流程模型,在自身的容器环境中执行。通过PVM,无论是BPEL,还是XPDL,都可以被很好的兼容和支撑。
然而现有的流程虚拟机不支持多线程并发执行,导致在高并发的场景下,响应性能无法满足要求,以较为常用的jBPM4的流程虚拟机为例,jBPM4的流程虚拟机采用的是一种基于执行实例和操作队列递归的方式,使流程运行起来。在现有技术中,执行实例依赖操作队列,流程的流转是通过操作队列的循环实现,共享的操作队列是关键。然而多线程并发操作,对共享资源的访问是瓶颈。而jBPM4流程虚拟机的流转设计存在对共享操作队列的访问的设计弊端,所以无法支持多线程并发执行fork路由,join等路由操作,导致高压力下响应性能差。
因此,目前本领域技术人员迫切需要解决的一个技术问题在于。如何创造性的提出一种流程虚拟机的流转机制,用以支持多线程并发执行,满足在高并发场景下的响应性能。
发明内容
本申请的目的是提供一种流程虚拟机的流转方法和装置,用以支持多线程并发执行,满足在高并发场景下的响应性能。
为了解决上述问题,本申请公开了一种流程虚拟机的流转方法,包括:
步骤S10,根据流程定义创建流程实例;
步骤S11,确定当前操作节点;
步骤S12,创建所述当前操作节点的活动实例;
步骤S13,当所述活动实例存在节点进入事件时,触发所述节点进入事件;
步骤S 14,执行所述当前操作节点的行为;
步骤S15,当所述活动实例存在节点离开事件时,触发所述节点离开事件;
步骤S16,根据所述当前操作节点的行为执行结果,获取所述当前操作节点的出口有向连接;
步骤S17,调用所述流程实例的流转take方法;
步骤S18,当所述出口有向连接存在流转事件时,触发所述流转事件;
步骤S19,根据所述出口有向连接找到下一个操作节点,返回步骤S11。
优选地,所述根据流程定义创建流程实例的步骤包括:
根据流程定义创建单个流程实例;
或者,
根据流程定义同步创建多个流程实例。
优选地,所述当前操作节点为一个或多个;
当所述当前操作节点为多个时,所述创建当前操作节点的活动实例的步骤为:
分别在不同的线程中同步创建各个当前操作节点的活动实例。
优选地,所述的方法,还包括:
步骤S20,若当前操作节点为结束节点,则在步骤S14后,结束流程实例。
优选地,所述当前操作节点为:
根据流程定义找到的开始节点;
根据流程定义找到的指定节点;
或者,从子流程实例跳转到的父流程实例中的指定节点。
优选地,在步骤S13之前,还包括:
步骤S12-1,调用所述活动实例的运行perform方法。
优选地,在步骤S15之前,还包括:
步骤S14-1,调用所述活动实例的流转take方法。
优选地,所述调用流程实例的流转take方法的步骤为,
所述活动实例的流转take方法将所述出口有向连接传递给流程实例的流转take方法。
本申请实施例还公开了一种流程虚拟机的流转装置,包括:
流程实例创建模块,用于根据流程定义创建流程实例;
节点确定模块,用于确定当前操作节点;
活动实例创建模块,用于创建所述当前操作节点的活动实例;
节点进入事件触发模块,用于在所述活动实例存在节点进入事件时,触发所述节点进入事件;
节点行为执行模块,用于执行所述当前操作节点的行为;
节点离开事件触发模块,用于在所述活动实例存在节点离开事件时,触发所述节点离开事件;
有向连接获取模块,用于根据所述当前操作节点的行为执行结果, 获取所述当前操作节点的出口有向连接;
流转模块,用于调用所述流程实例的流转take方法;
流转事件触发模块,用于所述出口有向连接存在流转事件时,触发所述流转事件;
节点查找模块,用于根据所述出口有向连接找到下一个操作节点,然后返回调用所述节点确定模块。
优选地,所述流程实例创建模块包括:
单流程实例创建子模块,用于根据流程定义创建单个流程实例;
或者,
多流程实例创建子模块,用于根据流程定义同步创建多个流程实例。
优选地,所述当前操作节点为一个或多个;
当所述当前操作节点为多个时,所述活动实例创建模块包括:
同步创建子模块,用于分别在不同的线程中同步创建各个当前操作节点的活动实例。
优选地,所述的装置,还包括:
流程实例结束模块,用于在当前操作节点为结束节点时,在所述节点行为执行模块后调用,用于结束流程实例。
优选地,所述节点确定模块包括:
第一节点定位子模块,用于根据流程定义找到的开始节点;
第二节点定位子模块,用于根据流程定义找到的指定节点;
或者,第三节点定位子模块,用于从子流程实例跳转到的父流程实例中的指定节点。
优选地,所述的装置,还包括:
运行方法调用模块,用于在调用所述节点进入事件触发模块之前,调用所述活动实例的运行perform方法。
优选地,所述的装置,还包括:
流转方法调用模块,用于在调用所述节点离开事件触发模块之前,调用所述活动实例的流转take方法。
优选地,所述流转模块包括:
实例传递子模块,用于由所述活动实例的流转take方法将所述出口有向连接传递给流程实例的流转take方法。
与现有技术相比,本申请包括以下优点:
本申请采用流程实例和活动实例分离的方式,通过fork分支路由并发执行的这种方式设计,很好地解决了现有流程虚拟机的共享操作队列资源瓶颈问题,没有共享资源的瓶颈。采用本申请的这种流程虚拟机的流转方式,可以大幅度缩短流程实例的流转时间,提高系统的响应性能。
附图说明
图1是以财务到款业务为例的工作流示意图;
图2是采用现有的Jbpm4的流程虚拟机运行图1所示的流程的时序图;
图3是本申请的一种流程虚拟机的流转方法实施例的步骤流程图;
图4是采用本申请实施例的流程虚拟机运行图1所示的流程的第一时序图;
图5是采用本申请实施例的流程虚拟机运行图1所示的流程的第二时序图;
图6是本申请的一种流程虚拟机的流转装置实施例的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
为使本领域技术人员更好地理解本申请,下面结合图1以″财务到款″这个具体的业务来说明本申请涉及到的相关概念术语。
财务到款这个业务,是客户购买了公司的产品(可以是互联网服务信息),通过银行或其他渠道汇款到公司账户后,公司为该客户开通相关 产品访问权限的一个业务流程。
该流程流转细节描述如下:
客户打款后,系统启动该流程,财务人员做确认到款操作,到款确认操作通过后,系统通知网站系统开通产品,并通知订购系统订购完成,完成这些后,流程结束。
术语解释:
节点:是指某一个业务活动定义,在本例中,″确认到款″就是一个节点,此节点需要人参与,称之为任务节点。″通知网站″也是一个节点,此节点无需人参与,称之为自动节点。节点在图1中用长方形框表示。″fork″这个活动,表示流程同时执行所有的分支,称之为分支节点。″join″这个活动,表示流程流到此处等待所有的分支都到达后继续流转,称之为合并节点。″结束″这个活动,表示流程流到此节点结束,称之为结束节点。
有向连接:是指上图中带箭头的线。表示流程从一个状态通过何种方式到另一个状态。
如在本例中,fork节点到通知订购系统节点间,存在一个叫″to_通知订购″的有向连接。
流程定义:是用来描述某一个业务流程的符号表示。由节点和有向连接组成的静态定义文件。
以上术语都是流程配置类的概念。下面介绍流程运行期相关概念。
活动实例:是指某一次具体的业务请求经过的节点实例。例如:客户2010年10月15日9点购买诚信通产品,通过银行汇款1688元,启动了这个财务到款流程。财务人员于2010年10月15日上午10点做了到款确认操作,而后流程继续往下走。称描述″到款确认″这个活动的实例为活动实例。通常活动实例包含该活动开始时间,结束时间,计划处理人,实际处理人,预约时间等等不同维度的信息。
流程实例:是指某一次具体的业务请求,例如:客户2010年10月15日9点购买诚信通产品,通过银行汇款1688元,启动了这个财务到款 流程。流程实例是由一系列活动实例组成。在这个例子所指的流程实例中,则包含开始节点″开始″活动实例,″确认到款″活动实例,″fork″活动实例,″通知网站″活动实例,″通知订购系统″活动实例,″join″活动实例,″结束″活动实例。
流程上下文变量实例:是指某一次具体的业务请求中,用于在节点间传递信息的数据。通常为名值对(key,value)的形式表现。上下文变量实例通常简称为上下文变量。
现有的Jbpm4的流程虚拟机,采用的是一种基于执行实例和操作队列递归方式,使流程运行起来。具体可以参考图2所示的时序图。其中:
执行实例为:ExecutionImpl,执行实例中有Queue<AtomicOperation>操作队列。
操作对象为:AtomicOperation。具体包含以下分类:
节点执行操作ExecuteActivity,离开节点操作TransitionEndActivity,有向连接操作TransitionTake,进入节点操作TransitionStartActivity等等。
结合前面″财务到款″流程这个例子,详细描述下Jbpm4的流程虚拟机的流转步骤如下:
一,根据″财务到款″流程定义,新建一个执行实例ExecutionImpl,然后根据流程定义指定的开始节点,向执行实例中放入″开始″节点的执行操作ExecuteActivity。
二,执行ExecuteActivity,然后向执行实例中放入″开始″节点的离开节点操作TransitionEndActivity。
三,执行TransitionEndActivity,根据″开始″节点对象,找到出口连接″继续″。然后向执行实例中放入″继续″有向连接操作TransitionTake。
四,执行TransitionTake,根据″继续″有向连接,找到下一个节点″确认到款″,然后向执行实例中放入″确认到款″的进入节点操作TransitionStartActivity。
五,执行TransitionStartActivity,然后向执行实例中放入″确认到款″节点的执行操作ExecuteActivity。
六,执行ExecuteActivity,将任务分配给财务人员。执行实例进入等待状态。
七,财务人员通过界面进行确认到款操作,流程继续,向执行实例中放入″确认到款″节点的离开节点操作TransitionEndActivity。
八,执行TransitionEndActivity,根据″确认到款″节点对象,找到出口连接″确认″。然后向执行实例中放入″确认″有向连接操作TransitionTake。
九,执行TransitionTake,根据″确认″有向连接,找到下一个节点″fork″,然后向执行实例中放入″fork″的进入节点操作TransitionStartActivity。
十,执行TransitionStartActivity,然后向执行实例中放入″fork″节点的执行操作ExecuteActivity。
十一,执行ExecuteActivity,然后向执行实例中放入″fork″节点的离开节点操作TransitionEndActivity。
十二,执行TransitionEndActivity,根据″fork″节点对象,找到出口连接″to_通知网站″和″to_通知订购″。
需要注意的是,工作流中的fork节点,即分支节点,所谓分支节点,就是流程到这个节点后,这个节点的所有出口连接都要走一遍,故此步骤为循环执行,先向执行实例中放入″to_通知网站″有向连接操作TransitionTake。
十三,执行TransitionTake,根据″to_通知网站″有向连接,找到下一个节点″通知网站″,然后向执行实例中放入″通知网站″的进入节点操作TransitionStartActivity。
十四,执行TransitionStartActivity,然后向执行实例中放入″通知网站″节点的执行操作ExecuteActivity。
十五,执行ExecuteActivity,然后向执行实例中放入″通知网站″节点的离开节点操作TransitionEndActivity。
十六,执行TransitionEndActivity,根据″通知网站″节点对象,找 到出口连接″完成″。然后向执行实例中放入″完成″有向连接操作TransitionTake。
十七,执行TransitionTake,根据″完成″有向连接,找到下一个节点″join″,然后向执行实例中放入″join″的进入节点操作TransitionStartActivity。
十八,执行TransitionStartActivity,然后向执行实例中放入″join″节点的执行操作ExecuteActivity。
十九,执行″join″节点的ExecuteActivity,判断是否所有分支都到达。没有到达,则此分支流转停止。
二十,继续步骤十二中的循环,向执行实例中放入″to_通知订购″有向连接操作TransitionTake。
二十一,执行TransitionTake,根据″to_通知订购″有向连接,找到下一个节点″通知订购系统″,然后向执行实例中放入″通知订购系统″的进入节点操作TransitionStartActivity。
二十二,执行TransitionStartActivity,然后向执行实例中放入″通知订购系统″节点的执行操作ExecuteActivity。
二十三,执行ExecuteActivity,然后向执行实例中放入″通知订购系统″节点的离开节点操作TransitionEndActivity。
二十四,执行TransitionEndActivity,根据″通知订购系统″节点对象,找到出口连接″完成″。然后向执行实例中放入″完成″有向连接操作TransitionTake。
二十五,执行TransitionTake,根据″完成″有向连接,找到下一个节点″join″,然后向执行实例中放入″join″的进入节点操作TransitionStartActivity。
二十六,执行TransitionStartActivity,然后向执行实例中放入″join″节点的执行操作ExecuteActivity。
二十七,执行″join″节点的ExecuteActivity,判断是否所有分支都到达。分支全部到达。然后向执行实例中放入″join″节点的离开节点操 作TransitionEndActivity。
二十八,执行TransitionEndActivity,根据″join″节点对象,找到出口连接″to_结束″。然后向执行实例中放入″to_结束″有向连接操作TransitionTake。
二十九,执行TransitionTake,根据″to_结束″有向连接,找到下一个节点″结束″,然后向执行实例中放入″结束″的进入节点操作TransitionStartActivity。
三十,执行TransitionStartActivity,然后向执行实例中放入″结束″节点的执行操作ExecuteActivity。
三十一,执行ExecuteActivity,结束流程实例。
从上述实例中可以看出,在现有技术中,执行实例依赖操作队列,流程的流转是通过操作队列的循环实现,例如,在步骤十二中,根据″fork″节点对象,找到出口连接″to_通知网站″和″to_通知订购″,接下来先执行to_通知网站-->join(步骤十二至十九);然后执行fork-->to_通知订购-->join(步骤二十至二十七),无法实现对共享操作队列的访问,所以无法支持多线程并发执行fork、join操作。
针对上述问题,本专利发明人创造性地提出了一种流程虚拟机的流转机制,本申请采用流程实例和活动实例分离的方式,通过fork分支路由并发执行的这种方式设计,很好地解决了现有流程虚拟机的共享操作队列资源瓶颈问题。采用本申请的这种流程虚拟机的流转方式,可以大幅度缩短流程实例的流转时间,提高系统的响应性能。
参照图3,其示出了本申请的一种流程虚拟机的流转方法实施例的步骤流程图,具体可以包括如下步骤:
步骤301,根据流程定义创建流程实例;
在具体实现中,应用本申请实施例可以根据流程定义创建单个流程实例;也可以根据流程定义同步创建多个流程实例。流程实例负责流程的流转,可以包含以下方法:开始start(),结束end(),等待wait(),挂起suspend(),恢复resume(),流转take(),进入signal()等。
步骤302,确定当前操作节点;
根据实际中可能发生的应用场景,所述当前操作节点可能表现为如下几种:
第一,根据流程定义找到的开始节点;
第二,根据流程定义找到的指定节点;
例如,根据流程定义中上一节点的有向连接指向的下一节点。
第三,从子流程实例跳转到的父流程实例中的指定节点。
在具体应用中,所述指定节点包括结束节点。
步骤303,创建所述当前操作节点的活动实例;
在具体应用中,所述当前操作节点可以为一个或多个;当所述当前操作节点为多个时,所述步骤303可以为:
分别在不同的线程中同步创建各个当前操作节点的活动实例。
活动实例负责执行节点关联的具体行为,可以包括以下方法:触发事件fireEvent(),运行perform()等。由于流程实例上有全局的事件,所以有fireEvent()方法。
步骤304,调用所述活动实例的运行perform方法;
步骤305,当所述活动实例存在节点进入事件时,触发所述节点进入事件;
步骤306,执行所述当前操作节点的行为;
例如,当前操作节点为任务节点,即执行任务分配的行为;当前节点为判断节点,即执行判断行为。
步骤307,判断所述当前操作节点是否为结束节点,若是,则执行步骤308;若否,则执行步骤314;
步骤308,调用所述活动实例的流转take方法;
步骤309,当所述活动实例存在节点离开事件时,触发所述节点离开事件;
步骤310,根据所述当前操作节点的行为执行结果,获取所述当前操作节点的出口有向连接;
步骤311,调用所述流程实例的流转take方法;
在具体实现中,所述步骤311可以采用如下方式实现:
所述活动实例的流转take方法将所述出口有向连接传递给流程实例的流转take方法。
步骤312,当所述出口有向连接存在流转事件时,触发所述流转事件;
步骤313,根据所述出口有向连接找到下一个操作节点,返回步骤302。
在实际中,所述出口有向连接的数据结构里包括来源节点和目标节点,如以下代码所示:

如果存在父流程实例,下一个操作节点为父流程实例中的某个指定节点,则回到父流程实例继续流转。
步骤314,结束流程实例。
当结束节点动作行为执行后,会调用流程实例的end()方法,结束流程实例。
本申请实施例采用了一种新的算法和数据结构来支持流程虚拟机中的流程流转,本申请实施例通过将各种节点路由模型抽象出来,流程虚拟机提供默认支持。节点路由模型包括:start,end,fork,join,decision,wait等等。节点路由模型最终调用流程实例提供的流转功能完成相应的行为。
为使本领域技术人员更好地理解本申请实施例,以下分别说明本文中涉及的相关概念及功能域:
一、流程定义期模型
(一)节点定义:
是指某一个业务活动定义。包含节点的行为,入口有向连接列表,出口有向连接列表。
(二)有向连接:
是指过程图中带箭头的线。表示流程从一个状态通过何种方式到另一个状态。有向连接包括来源节点,当前操作节点。
(三)事件:
事件不能改变流程的流向,只能在发生异常时回滚流程。事件是预先定义的当满足某种条件时触发的操作。事件被包含在节点,有向连接,流程定义中。
例如;节点离开事件,即当满足节点离开行为时,就触发节点离开事件的操作。
(四)流程定义:
是用来描述某一个业务流程的符号表示。由节点和有向连接组成。包含节点列表。
(五)节点行为:
是节点上的具体动作。被包含在节点的定义上。
二、流程运行期模型
(一)流程实例:
流程实例负责流程的流转,包括开始start,结束end,等待await,挂起suspend,恢复resume,流转take,进入signal等方法。
(二)活动实例:
活动实例负责执行节点关联的具体行为。
(三)上下文变量实例:
负责上下文变量的获取和设值。由于活动实例,流程实例都有自己 的上下文,所以上下文变量实例是活动实例,流程实例的父类。
(四)事件实例:
负责事件的执行。由于流程和节点上都有事件,所以事件实例是流程实例,活动实例的父类。
以上概念及功能域可简单概括如下:
流程定义期模型,包括:流程定义,节点定义,有向连接定义,事件定义,上下文变量定义;
流程运行期模型,包括:流程实例,活动实例,有向连接实例,事件实例,上下文变量实例;
动作行为分类,包括:节点行为动作(包括任务分配,判断行为,执行行为,所有的行为都可以用脚本实现),事件动作(监听到事件后发生的动作,行为可以用脚本实现)。
为使本领域技术人员更好地理解本申请,以下针对前述″财务到款″的业务流程,结合图4和图5所示的流程流转时序图进一步说明。
图4和图5结合前述″财务到款″的业务流程,示出了如下流程的流转:开始节点→自动节点→主管审批→结束节点→结束后流转到父流程,其中,图4描述了从流程实例开始流转到等待节点停下来的过程,对应″财务到款″业务流程中的部分是:开始节点→自动节点→主管审批。图5描述了流程实例从一个等待节点继续流转的过程,对应″财务到款″业务流程中的部分是:主管审批→结束节点→结束后流转到父流程。
图4中,ProcessInstance是指流程实例,ActivityInstance是指活动实例,ActivityBehaviour是指活动实例的行为,图5中ExternalActivityBehaviour是指活动实例的扩展行为。
ActivityBehaviour是ExternalActivityBehaviour的父接口。
ActivityBehaviour的结构可以参考如下代码:


ExternalActivityBehaviour的结构可以参考如下代码:


以下详细描述应用本申请实施例的流程虚拟机的流转过程:
一,根据″财务到款″流程定义,新建一个流程实例ProcessInstance,判断是否有流程开始process-start事件,如果有,则触发所述流程开始事件。然后根据流程定义指定的开始节点,新建一个″开始″活动实例ActivityInstance。
二,调用所述″开始″活动实例的perform方法,判断″开始″节点是否有节点进入node-enter事件,如果有,触发所述节点进入事件。然后调用节点具体的行为,并执行所述节点上的具体行为ActivityBehaviour,执行完成后,调用所述″开始″活动实例的流转take方法(即take()),判断是否有节点离开node-leave事件,如果有,则触发所述节点离开事件,然后找到″开始″节点出口的有向连接″继续″。
三,活动实例的take方法将有向连接″继续″传递给流程实例的take方法。
四,判断″继续″有向连接是否有take事件,如果有,则触发所述take事件。通过″继续″有向连接找到下一个节点″确认到款″。然后新建一个″确认到款″的活动实例ActivityInstance。
五,判断″确认到款″节点是否有node-enter事件,如果有,则触发事件。然后执行节点上的行为ActivityBehaviour,给财务人员分配任务。流程实例进入等待状态。
六,财务人员通过界面,进行确认到款操作,调用流程实例signal 方法。根据流程实例当前节点″确认到款″,新建一个″确认到款″的活动实例ActivityInstance。
七,找到″确认到款″节点上的执行行为ExternalActivityBehaviour,执行signal方法,执行完成后,调用活动实例的take方法,判断是否有node-leave事件,如果有,则触发事件,然后找到″确认到款″节点的出口连接″确认″。
八,活动实例的take方法将有向连接″确认″传递给流程实例的take方法。
九,判断″确认″有向连接是否有take事件,如果有,则触发事件。通过″确认″有向连接找到下一个节点″fork″。然后新建一个″fork″的活动实例ActivityInstance。
十,判断″fork″节点是否有node-enter事件,如果有,则触发事件。然后执行节点上的行为ActivityBehaviour,找出″fork″节点所有的出口连接″to_通知网站″和″to_通知订购″。循环出口连接列表。以下的操作将并发执行:
启动一个新的线程N,在新线程中根据当前节点″fork″新建一个活动实例ActivityInstance。然后调用活动实例的take方法,判断是否有node-leave事件,如果有,则触发事件。将有向连接″to_通知订购″传递给流程实例的take方法。
N10.1,判断″to_通知订购″有向连接是否有take事件,如果有,则触发事件。通过″to_通知订购″有向连接找到下一个节点″通知订购系统″。然后新建一个″通知订购系统″的活动实例ActivityInstance。
N10.2,判断″通知订购系统″节点是否有node-enter事件,如果有,则触发事件。然后执行节点上的行为ActivityBehaviour,执行完成后,调用活动实例的take方法,判断是否有node-leave事件,如果有,则触发事件,然后找到″通知订购系统″节点的出口连接″完成″。
N10.3,活动实例的take方法将有向连接″完成″传递给流程实例的take方法。
N10.4,判断″完成″有向连接是否有take事件,如果有,则触发事件。通过″完成″有向连接找到下一个节点″join″。然后新建一个″join″的活动实例ActivityInstance。
N10.5,判断″join″节点是否有node-enter事件,如果有,则触发事件。然后执行节点上的行为ActivityBehaviour,判断是否所有分支都到达,未到达,当前线程结束;都到达,则继续。
由于步骤十后是并发执行,主线程在开启一个新线程N后,主线程M继续执行,具体包括如下操作:
M10.1,根据当前节点″fork″新建一个活动实例ActivityInstance。然后调用活动实例的take方法,判断是否有node-leave事件,如果有,则触发事件。将有向连接″to_通知网站″传递给流程实例的take方法。
M10.1,判断″to_通知网站″有向连接是否有take事件,如果有,则触发事件。通过″to_通知网站″有向连接找到下一个节点″通知网站″。然后新建一个″通知网站″的活动实例ActivityInstance。
M10.2,判断″通知网站″节点是否有node-enter事件,如果有,则触发事件。然后执行节点上的行为ActivityBehaviour,执行完成后,调用活动实例的take方法,判断是否有node-leave事件,如果有,则触发事件,然后找到″通知网站″节点的出口连接″完成″。
M10.3,活动实例的take方法将有向连接″完成″传递给流程实例的take方法。
M10.4,判断″完成″有向连接是否有take事件,如果有,则触发事件。通过″完成″有向连接找到下一个节点″join″。然后新建一个″join″的活动实例ActivityInstance。
M10.5,判断″join″节点是否有node-enter事件,如果有,则触发事件。然后执行节点上的行为ActivityBehaviour,判断是否所有分支都到达,未到达,主线程M则等待;都到达,则继续。
十一,所有分支都到达后,先到达的线程继续执行,根据当前节点″join″,找到出口连接″to_结束″。
十二,判断″to_结束″有向连接是否有take事件,如果有,则触发事件。通过″to_结束″有向连接找到下一个节点″结束″。然后新建一个″结束″的活动实例ActivityInstance。
十三,判断″结束″节点是否有node-enter事件,如果有,则触发事件。然后执行节点上的行为ActivityBehaviour,执行完成后,结束流程实例。如果当前是新线程N,则通知主线程M结束等待。如果当前是主线程M,则线程结束。
本申请采用的流程实例和活动实例分离,通过fork分支路由并发执行的这种方式设计,很好地解决了原有(jbpm4)实现的共享操作队列资源瓶颈问题,没有共享资源的瓶颈。本申请流程虚拟机PVM的实现,可以大幅度缩短流程实例的流转时间,提高系统的响应性能。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
参照图6,示出了本申请的一种流程虚拟机的流转装置实施例的结构框图,具体可以包括如下模块:
流程实例创建模块601,用于根据流程定义创建流程实例;
节点确定模块602,用于确定当前操作节点;
活动实例创建模块603,用于创建所述当前操作节点的活动实例;
节点进入事件触发模块604,用于在所述活动实例存在节点进入事件时,触发所述节点进入事件;
节点行为执行模块605,用于执行所述当前操作节点的行为;
节点离开事件触发模块606,用于在所述活动实例存在节点离开事件时,触发所述节点离开事件;
有向连接获取模块607,用于根据所述当前操作节点的行为执行结果,获取所述当前操作节点的出口有向连接;
流转模块608,用于调用所述流程实例的流转take方法;
流转事件触发模块609,用于所述出口有向连接存在流转事件时,触发所述流转事件;
节点查找模块610,用于根据所述出口有向连接找到下一个操作节点,然后返回调用所述节点确定模块。
在具体实现中,所述流程实例创建模块601可以包括以下子模块:
单流程实例创建子模块,用于根据流程定义创建单个流程实例;
或者,
多流程实例创建子模块,用于根据流程定义同步创建多个流程实例。
应用本申请实施例,所述当前操作节点可以为一个或多个;
当所述当前操作节点为多个时,所述活动实例创建模块603可以包括以下子模块:
同步创建子模块,用于分别在不同的线程中同步创建各个当前操作节点的活动实例。
在具体实现中,本申请实施例还可以包括如下模块:
流程实例结束模块,用于在当前操作节点为结束节点时,在所述节点行为执行模块605后调用,用于结束流程实例。
作为本申请实施例具体应用的示例,所述节点确定模块602可以包括如下子模块:
第一节点定位子模块,用于根据流程定义找到的开始节点;
第二节点定位子模块,用于根据流程定义找到的指定节点;
或者,第三节点定位子模块,用于从子流程实例跳转到的父流程实例中的指定节点。
在本申请的一种优选实施例中,所述的装置还可以包括:
运行方法调用模块,用于在调用所述节点进入事件触发模块604之前,调用所述活动实例的运行perform方法。
在本申请的一种优选实施例中,所述的装置还可以包括:
流转方法调用模块,用于在调用所述节点离开事件触发模块606之前,调用所述活动实例的流转take方法。
在具体实现中,所述流转模块608可以包括如下子模块:
实例传递子模块,用于由所述活动实例的流转take方法将所述出口有向连接传递给流程实例的流转take方法。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的一种流程虚拟机的流转方法和一种流程虚拟机的流转装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

一种流程虚拟机的流转方法和装置.pdf_第1页
第1页 / 共23页
一种流程虚拟机的流转方法和装置.pdf_第2页
第2页 / 共23页
一种流程虚拟机的流转方法和装置.pdf_第3页
第3页 / 共23页
点击查看更多>>
资源描述

《一种流程虚拟机的流转方法和装置.pdf》由会员分享,可在线阅读,更多相关《一种流程虚拟机的流转方法和装置.pdf(23页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 103426045 A(43)申请公布日 2013.12.04CN103426045A*CN103426045A*(21)申请号 201210160828.4(22)申请日 2012.05.22G06Q 10/06(2012.01)G06F 9/455(2006.01)(71)申请人阿里巴巴集团控股有限公司地址英属开曼群岛大开曼资本大厦一座四层847号邮箱(72)发明人章向明(74)专利代理机构北京润泽恒知识产权代理有限公司 11319代理人赵娟(54) 发明名称一种流程虚拟机的流转方法和装置(57) 摘要本申请提供了一种流程虚拟机的流转方法和装置,其中,所述方法包括。

2、:步骤S10,根据流程定义创建流程实例;步骤S11,确定当前操作节点;步骤S12,创建所述当前操作节点的活动实例;步骤S13,当所述活动实例存在节点进入事件时,触发所述事件;步骤S14,执行所述当前操作节点的行为;步骤S15,当所述活动实例存在节点离开事件时,触发所述事件;步骤S16,根据所述当前操作节点的行为执行结果,获取所述当前操作节点的出口有向连接;步骤S17,调用所述流程实例的流转方法;步骤S18,当所述出口有向连接存在流转事件时,触发所述事件;步骤S19,根据所述有向连接找到下一个操作节点,返回步骤S11。本申请可以支持多线程并发执行,满足在高并发场景下的响应性能。(51)Int.C。

3、l.权利要求书2页 说明书15页 附图5页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书2页 说明书15页 附图5页(10)申请公布号 CN 103426045 ACN 103426045 A1/2页21.一种流程虚拟机的流转方法,其特征在于,包括:步骤S10,根据流程定义创建流程实例;步骤S11,确定当前操作节点;步骤S12,创建所述当前操作节点的活动实例;步骤S13,当所述活动实例存在节点进入事件时,触发所述节点进入事件;步骤S14,执行所述当前操作节点的行为;步骤S15,当所述活动实例存在节点离开事件时,触发所述节点离开事件;步骤S16,根据所述当前操作节点的行为执行。

4、结果,获取所述当前操作节点的出口有向连接;步骤S17,调用所述流程实例的流转take方法;步骤S18,当所述出口有向连接存在流转事件时,触发所述流转事件;步骤S19,根据所述出口有向连接找到下一个操作节点,返回步骤S11。2.根据权利要求1所述的方法,其特征在于,所述根据流程定义创建流程实例的步骤包括:根据流程定义创建单个流程实例;或者,根据流程定义同步创建多个流程实例。3.根据权利要求1或2所述的方法,其特征在于,所述当前操作节点为一个或多个;当所述当前操作节点为多个时,所述创建当前操作节点的活动实例的步骤为:分别在不同的线程中同步创建各个当前操作节点的活动实例。4.根据权利要求3所述的方法。

5、,其特征在于,还包括:步骤S20,若当前操作节点为结束节点,则在步骤S14后,结束流程实例。5.根据权利要求1所述的方法,其特征在于,所述当前操作节点为:根据流程定义找到的开始节点;根据流程定义找到的指定节点;或者,从子流程实例跳转到的父流程实例中的指定节点。6.根据权利要求1或2或4或5所述的方法,其特征在于,在步骤S13之前,还包括:步骤S12-1,调用所述活动实例的运行perform方法。7.根据权利要求1或2或4或5所述的方法,其特征在于,在步骤S15之前,还包括:步骤S14-1,调用所述活动实例的流转take方法。8.根据权利要求7所述的方法,其特征在于,所述调用流程实例的流转tak。

6、e方法的步骤为,所述活动实例的流转take方法将所述出口有向连接传递给流程实例的流转take方法。9.一种流程虚拟机的流转装置,其特征在于,包括:流程实例创建模块,用于根据流程定义创建流程实例;节点确定模块,用于确定当前操作节点;活动实例创建模块,用于创建所述当前操作节点的活动实例;节点进入事件触发模块,用于在所述活动实例存在节点进入事件时,触发所述节点进权 利 要 求 书CN 103426045 A2/2页3入事件;节点行为执行模块,用于执行所述当前操作节点的行为;节点离开事件触发模块,用于在所述活动实例存在节点离开事件时,触发所述节点离开事件;有向连接获取模块,用于根据所述当前操作节点的行。

7、为执行结果,获取所述当前操作节点的出口有向连接;流转模块,用于调用所述流程实例的流转take方法;流转事件触发模块,用于所述出口有向连接存在流转事件时,触发所述流转事件;节点查找模块,用于根据所述出口有向连接找到下一个操作节点,然后返回调用所述节点确定模块。10.根据权利要求9所述的装置,其特征在于,所述流程实例创建模块包括:单流程实例创建子模块,用于根据流程定义创建单个流程实例;或者,多流程实例创建子模块,用于根据流程定义同步创建多个流程实例。11.根据权利要求9或10所述的装置,其特征在于,所述当前操作节点为一个或多个;当所述当前操作节点为多个时,所述活动实例创建模块包括:同步创建子模块,。

8、用于分别在不同的线程中同步创建各个当前操作节点的活动实例。12.根据权利要求11所述的装置,其特征在于,还包括:流程实例结束模块,用于在当前操作节点为结束节点时,在所述节点行为执行模块后调用,用于结束流程实例。13.根据权利要求9所述的装置,其特征在于,所述节点确定模块包括:第一节点定位子模块,用于根据流程定义找到的开始节点;第二节点定位子模块,用于根据流程定义找到的指定节点;或者,第三节点定位子模块,用于从子流程实例跳转到的父流程实例中的指定节点。14.根据权利要求9或10或12或13所述的装置,其特征在于,还包括:运行方法调用模块,用于在调用所述节点进入事件触发模块之前,调用所述活动实例的。

9、运行perform方法。15.根据权利要求9或10或12或13所述的装置,其特征在于,还包括:流转方法调用模块,用于在调用所述节点离开事件触发模块之前,调用所述活动实例的流转take方法。16.根据权利要求15所述的装置,其特征在于,所述流转模块包括:实例传递子模块,用于由所述活动实例的流转take方法将所述出口有向连接传递给流程实例的流转take方法。权 利 要 求 书CN 103426045 A1/15页4一种流程虚拟机的流转方法和装置技术领域0001 本申请涉及工作流数据处理的技术领域,特别是涉及一种流程虚拟机的流转方法和一种流程虚拟机的流转装置。背景技术0002 PVM(Process。

10、 Virtual Machine,PVM)流程虚拟机是BPM(Business Process Management,业务流程管理)领域的一个最新流程理念。在实际的场景中,流程过程描述标准很多,例如BPEL(Business Process Execution Language,业务流程执行语言,是一种使用XML编写的编程语言,用于自动化业务流程),XPDL(XML Process Definition Language,是一个标准化规格,使用XML文件让不同的工作流程软件能够交换商业流程定义),JPDL(JBoss jBPM Process Definition Language,是构建于j。

11、BPM框架上的流程语言之一)等等。PVM的提出,是为了能够支撑多种流程语言。PVM的核心设计思想来源自过程组件模型,本质思想是将过程图中的活动与一个实现该活动运行时行为相关联,并用一种通用编程语言实现。PVM可以很好的支持各种不同类型的流程语言,并且能够将不同流程语言所定义流程模型,在自身的容器环境中执行。通过PVM,无论是BPEL,还是XPDL,都可以被很好的兼容和支撑。0003 然而现有的流程虚拟机不支持多线程并发执行,导致在高并发的场景下,响应性能无法满足要求,以较为常用的jBPM4的流程虚拟机为例,jBPM4的流程虚拟机采用的是一种基于执行实例和操作队列递归的方式,使流程运行起来。在现。

12、有技术中,执行实例依赖操作队列,流程的流转是通过操作队列的循环实现,共享的操作队列是关键。然而多线程并发操作,对共享资源的访问是瓶颈。而jBPM4流程虚拟机的流转设计存在对共享操作队列的访问的设计弊端,所以无法支持多线程并发执行fork路由,join等路由操作,导致高压力下响应性能差。0004 因此,目前本领域技术人员迫切需要解决的一个技术问题在于。如何创造性的提出一种流程虚拟机的流转机制,用以支持多线程并发执行,满足在高并发场景下的响应性能。发明内容0005 本申请的目的是提供一种流程虚拟机的流转方法和装置,用以支持多线程并发执行,满足在高并发场景下的响应性能。0006 为了解决上述问题,本。

13、申请公开了一种流程虚拟机的流转方法,包括:0007 步骤S10,根据流程定义创建流程实例;0008 步骤S11,确定当前操作节点;0009 步骤S12,创建所述当前操作节点的活动实例;0010 步骤S13,当所述活动实例存在节点进入事件时,触发所述节点进入事件;0011 步骤S 14,执行所述当前操作节点的行为;说 明 书CN 103426045 A2/15页50012 步骤S15,当所述活动实例存在节点离开事件时,触发所述节点离开事件;0013 步骤S16,根据所述当前操作节点的行为执行结果,获取所述当前操作节点的出口有向连接;0014 步骤S17,调用所述流程实例的流转take方法;001。

14、5 步骤S18,当所述出口有向连接存在流转事件时,触发所述流转事件;0016 步骤S19,根据所述出口有向连接找到下一个操作节点,返回步骤S11。0017 优选地,所述根据流程定义创建流程实例的步骤包括:0018 根据流程定义创建单个流程实例;0019 或者,0020 根据流程定义同步创建多个流程实例。0021 优选地,所述当前操作节点为一个或多个;0022 当所述当前操作节点为多个时,所述创建当前操作节点的活动实例的步骤为:0023 分别在不同的线程中同步创建各个当前操作节点的活动实例。0024 优选地,所述的方法,还包括:0025 步骤S20,若当前操作节点为结束节点,则在步骤S14后,结。

15、束流程实例。0026 优选地,所述当前操作节点为:0027 根据流程定义找到的开始节点;0028 根据流程定义找到的指定节点;0029 或者,从子流程实例跳转到的父流程实例中的指定节点。0030 优选地,在步骤S13之前,还包括:0031 步骤S12-1,调用所述活动实例的运行perform方法。0032 优选地,在步骤S15之前,还包括:0033 步骤S14-1,调用所述活动实例的流转take方法。0034 优选地,所述调用流程实例的流转take方法的步骤为,0035 所述活动实例的流转take方法将所述出口有向连接传递给流程实例的流转take方法。0036 本申请实施例还公开了一种流程虚拟。

16、机的流转装置,包括:0037 流程实例创建模块,用于根据流程定义创建流程实例;0038 节点确定模块,用于确定当前操作节点;0039 活动实例创建模块,用于创建所述当前操作节点的活动实例;0040 节点进入事件触发模块,用于在所述活动实例存在节点进入事件时,触发所述节点进入事件;0041 节点行为执行模块,用于执行所述当前操作节点的行为;0042 节点离开事件触发模块,用于在所述活动实例存在节点离开事件时,触发所述节点离开事件;0043 有向连接获取模块,用于根据所述当前操作节点的行为执行结果,获取所述当前操作节点的出口有向连接;0044 流转模块,用于调用所述流程实例的流转take方法;00。

17、45 流转事件触发模块,用于所述出口有向连接存在流转事件时,触发所述流转事说 明 书CN 103426045 A3/15页6件;0046 节点查找模块,用于根据所述出口有向连接找到下一个操作节点,然后返回调用所述节点确定模块。0047 优选地,所述流程实例创建模块包括:0048 单流程实例创建子模块,用于根据流程定义创建单个流程实例;0049 或者,0050 多流程实例创建子模块,用于根据流程定义同步创建多个流程实例。0051 优选地,所述当前操作节点为一个或多个;0052 当所述当前操作节点为多个时,所述活动实例创建模块包括:0053 同步创建子模块,用于分别在不同的线程中同步创建各个当前操。

18、作节点的活动实例。0054 优选地,所述的装置,还包括:0055 流程实例结束模块,用于在当前操作节点为结束节点时,在所述节点行为执行模块后调用,用于结束流程实例。0056 优选地,所述节点确定模块包括:0057 第一节点定位子模块,用于根据流程定义找到的开始节点;0058 第二节点定位子模块,用于根据流程定义找到的指定节点;0059 或者,第三节点定位子模块,用于从子流程实例跳转到的父流程实例中的指定节点。0060 优选地,所述的装置,还包括:0061 运行方法调用模块,用于在调用所述节点进入事件触发模块之前,调用所述活动实例的运行perform方法。0062 优选地,所述的装置,还包括:0。

19、063 流转方法调用模块,用于在调用所述节点离开事件触发模块之前,调用所述活动实例的流转take方法。0064 优选地,所述流转模块包括:0065 实例传递子模块,用于由所述活动实例的流转take方法将所述出口有向连接传递给流程实例的流转take方法。0066 与现有技术相比,本申请包括以下优点:0067 本申请采用流程实例和活动实例分离的方式,通过fork分支路由并发执行的这种方式设计,很好地解决了现有流程虚拟机的共享操作队列资源瓶颈问题,没有共享资源的瓶颈。采用本申请的这种流程虚拟机的流转方式,可以大幅度缩短流程实例的流转时间,提高系统的响应性能。附图说明0068 图1是以财务到款业务为例。

20、的工作流示意图;0069 图2是采用现有的Jbpm4的流程虚拟机运行图1所示的流程的时序图;0070 图3是本申请的一种流程虚拟机的流转方法实施例的步骤流程图;0071 图4是采用本申请实施例的流程虚拟机运行图1所示的流程的第一时序图;说 明 书CN 103426045 A4/15页70072 图5是采用本申请实施例的流程虚拟机运行图1所示的流程的第二时序图;0073 图6是本申请的一种流程虚拟机的流转装置实施例的结构框图。具体实施方式0074 为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。0075 为使本领域技术人员更好地理解本申请,。

21、下面结合图1以财务到款这个具体的业务来说明本申请涉及到的相关概念术语。0076 财务到款这个业务,是客户购买了公司的产品(可以是互联网服务信息),通过银行或其他渠道汇款到公司账户后,公司为该客户开通相关产品访问权限的一个业务流程。0077 该流程流转细节描述如下:0078 客户打款后,系统启动该流程,财务人员做确认到款操作,到款确认操作通过后,系统通知网站系统开通产品,并通知订购系统订购完成,完成这些后,流程结束。0079 术语解释:0080 节点:是指某一个业务活动定义,在本例中,确认到款就是一个节点,此节点需要人参与,称之为任务节点。通知网站也是一个节点,此节点无需人参与,称之为自动节点。。

22、节点在图1中用长方形框表示。fork这个活动,表示流程同时执行所有的分支,称之为分支节点。join这个活动,表示流程流到此处等待所有的分支都到达后继续流转,称之为合并节点。结束这个活动,表示流程流到此节点结束,称之为结束节点。0081 有向连接:是指上图中带箭头的线。表示流程从一个状态通过何种方式到另一个状态。0082 如在本例中,fork节点到通知订购系统节点间,存在一个叫to_通知订购的有向连接。0083 流程定义:是用来描述某一个业务流程的符号表示。由节点和有向连接组成的静态定义文件。0084 以上术语都是流程配置类的概念。下面介绍流程运行期相关概念。0085 活动实例:是指某一次具体的。

23、业务请求经过的节点实例。例如:客户2010年10月15日9点购买诚信通产品,通过银行汇款1688元,启动了这个财务到款流程。财务人员于2010年10月15日上午10点做了到款确认操作,而后流程继续往下走。称描述到款确认这个活动的实例为活动实例。通常活动实例包含该活动开始时间,结束时间,计划处理人,实际处理人,预约时间等等不同维度的信息。0086 流程实例:是指某一次具体的业务请求,例如:客户2010年10月15日9点购买诚信通产品,通过银行汇款1688元,启动了这个财务到款流程。流程实例是由一系列活动实例组成。在这个例子所指的流程实例中,则包含开始节点开始活动实例,确认到款活动实例,fork活。

24、动实例,通知网站活动实例,通知订购系统活动实例,join活动实例,结束活动实例。0087 流程上下文变量实例:是指某一次具体的业务请求中,用于在节点间传递信息的数据。通常为名值对(key,value)的形式表现。上下文变量实例通常简称为上下文变量。0088 现有的Jbpm4的流程虚拟机,采用的是一种基于执行实例和操作队列递归方式,说 明 书CN 103426045 A5/15页8使流程运行起来。具体可以参考图2所示的时序图。其中:0089 执行实例为:ExecutionImpl,执行实例中有Queue操作队列。0090 操作对象为:AtomicOperation。具体包含以下分类:0091 节。

25、点执行操作ExecuteActivity,离开节点操作TransitionEndActivity,有向连接操作TransitionTake,进入节点操作TransitionStartActivity等等。0092 结合前面财务到款流程这个例子,详细描述下Jbpm4的流程虚拟机的流转步骤如下:0093 一,根据财务到款流程定义,新建一个执行实例ExecutionImpl,然后根据流程定义指定的开始节点,向执行实例中放入开始节点的执行操作ExecuteActivity。0094 二,执行ExecuteActivity,然后向执行实例中放入开始节点的离开节点操作TransitionEndActivi。

26、ty。0095 三,执行TransitionEndActivity,根据开始节点对象,找到出口连接继续。然后向执行实例中放入继续有向连接操作TransitionTake。0096 四,执行TransitionTake,根据继续有向连接,找到下一个节点确认到款,然后向执行实例中放入确认到款的进入节点操作TransitionStartActivity。0097 五,执行TransitionStartActivity,然后向执行实例中放入确认到款节点的执行操作ExecuteActivity。0098 六,执行ExecuteActivity,将任务分配给财务人员。执行实例进入等待状态。0099 七,财。

27、务人员通过界面进行确认到款操作,流程继续,向执行实例中放入确认到款节点的离开节点操作TransitionEndActivity。0100 八,执行TransitionEndActivity,根据确认到款节点对象,找到出口连接确认。然后向执行实例中放入确认有向连接操作TransitionTake。0101 九,执行TransitionTake,根据确认有向连接,找到下一个节点fork,然后向执行实例中放入fork的进入节点操作TransitionStartActivity。0102 十,执行TransitionStartActivity,然后向执行实例中放入fork节点的执行操作ExecuteA。

28、ctivity。0103 十一,执行ExecuteActivity,然后向执行实例中放入fork节点的离开节点操作TransitionEndActivity。0104 十二,执行TransitionEndActivity,根据fork节点对象,找到出口连接to_通知网站和to_通知订购。0105 需要注意的是,工作流中的fork节点,即分支节点,所谓分支节点,就是流程到这个节点后,这个节点的所有出口连接都要走一遍,故此步骤为循环执行,先向执行实例中放入to_通知网站有向连接操作TransitionTake。0106 十三,执行TransitionTake,根据to_通知网站有向连接,找到下一个。

29、节点通知网站,然后向执行实例中放入通知网站的进入节点操作TransitionStartActivity。0107 十四,执行TransitionStartActivity,然后向执行实例中放入通知网站节点的执行操作ExecuteActivity。0108 十五,执行ExecuteActivity,然后向执行实例中放入通知网站节点的离开节说 明 书CN 103426045 A6/15页9点操作TransitionEndActivity。0109 十六,执行TransitionEndActivity,根据通知网站节点对象,找到出口连接完成。然后向执行实例中放入完成有向连接操作TransitionT。

30、ake。0110 十七,执行TransitionTake,根据完成有向连接,找到下一个节点join,然后向执行实例中放入join的进入节点操作TransitionStartActivity。0111 十八,执行TransitionStartActivity,然后向执行实例中放入join节点的执行操作ExecuteActivity。0112 十九,执行join节点的ExecuteActivity,判断是否所有分支都到达。没有到达,则此分支流转停止。0113 二十,继续步骤十二中的循环,向执行实例中放入to_通知订购有向连接操作TransitionTake。0114 二十一,执行Transitio。

31、nTake,根据to_通知订购有向连接,找到下一个节点通知订购系统,然后向执行实例中放入通知订购系统的进入节点操作TransitionStartActivity。0115 二十二,执行TransitionStartActivity,然后向执行实例中放入通知订购系统节点的执行操作ExecuteActivity。0116 二十三,执行ExecuteActivity,然后向执行实例中放入通知订购系统节点的离开节点操作TransitionEndActivity。0117 二十四,执行TransitionEndActivity,根据通知订购系统节点对象,找到出口连接完成。然后向执行实例中放入完成有向连接。

32、操作TransitionTake。0118 二十五,执行TransitionTake,根据完成有向连接,找到下一个节点join,然后向执行实例中放入join的进入节点操作TransitionStartActivity。0119 二十六,执行TransitionStartActivity,然后向执行实例中放入join节点的执行操作ExecuteActivity。0120 二十七,执行join节点的ExecuteActivity,判断是否所有分支都到达。分支全部到达。然后向执行实例中放入join节点的离开节点操作TransitionEndActivity。0121 二十八,执行Transition。

33、EndActivity,根据join节点对象,找到出口连接to_结束。然后向执行实例中放入to_结束有向连接操作TransitionTake。0122 二十九,执行TransitionTake,根据to_结束有向连接,找到下一个节点结束,然后向执行实例中放入结束的进入节点操作TransitionStartActivity。0123 三十,执行TransitionStartActivity,然后向执行实例中放入结束节点的执行操作ExecuteActivity。0124 三十一,执行ExecuteActivity,结束流程实例。0125 从上述实例中可以看出,在现有技术中,执行实例依赖操作队列,流。

34、程的流转是通过操作队列的循环实现,例如,在步骤十二中,根据fork节点对象,找到出口连接to_通知网站和to_通知订购,接下来先执行to_通知网站-join(步骤十二至十九);然后执行fork-to_通知订购-join(步骤二十至二十七),无法实现对共享操作队列的访问,所以无法支持多线程并发执行fork、join操作。说 明 书CN 103426045 A7/15页100126 针对上述问题,本专利发明人创造性地提出了一种流程虚拟机的流转机制,本申请采用流程实例和活动实例分离的方式,通过fork分支路由并发执行的这种方式设计,很好地解决了现有流程虚拟机的共享操作队列资源瓶颈问题。采用本申请的这。

35、种流程虚拟机的流转方式,可以大幅度缩短流程实例的流转时间,提高系统的响应性能。0127 参照图3,其示出了本申请的一种流程虚拟机的流转方法实施例的步骤流程图,具体可以包括如下步骤:0128 步骤301,根据流程定义创建流程实例;0129 在具体实现中,应用本申请实施例可以根据流程定义创建单个流程实例;也可以根据流程定义同步创建多个流程实例。流程实例负责流程的流转,可以包含以下方法:开始start(),结束end(),等待wait(),挂起suspend(),恢复resume(),流转take(),进入signal()等。0130 步骤302,确定当前操作节点;0131 根据实际中可能发生的应用。

36、场景,所述当前操作节点可能表现为如下几种:0132 第一,根据流程定义找到的开始节点;0133 第二,根据流程定义找到的指定节点;0134 例如,根据流程定义中上一节点的有向连接指向的下一节点。0135 第三,从子流程实例跳转到的父流程实例中的指定节点。0136 在具体应用中,所述指定节点包括结束节点。0137 步骤303,创建所述当前操作节点的活动实例;0138 在具体应用中,所述当前操作节点可以为一个或多个;当所述当前操作节点为多个时,所述步骤303可以为:0139 分别在不同的线程中同步创建各个当前操作节点的活动实例。0140 活动实例负责执行节点关联的具体行为,可以包括以下方法:触发事。

37、件fireEvent(),运行perform()等。由于流程实例上有全局的事件,所以有fireEvent()方法。0141 步骤304,调用所述活动实例的运行perform方法;0142 步骤305,当所述活动实例存在节点进入事件时,触发所述节点进入事件;0143 步骤306,执行所述当前操作节点的行为;0144 例如,当前操作节点为任务节点,即执行任务分配的行为;当前节点为判断节点,即执行判断行为。0145 步骤307,判断所述当前操作节点是否为结束节点,若是,则执行步骤308;若否,则执行步骤314;0146 步骤308,调用所述活动实例的流转take方法;0147 步骤309,当所述活动实例存在节点离开事件时,触发所述节点离开事件;0148 步骤310,根据所述当前操作节点的行为执行结果,获取所述当前操作节点的出口有向连接;0149 步骤311,调用所述流程实例的流转take方法;0150 在具体实现中,所述步骤311可以采用如下方式实现:0151 所述活动实例的流转take方法将所述出口有向连接传递给流程实例的流转take说 明 书CN 103426045 A10。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1