CN103426045B - 一种流程虚拟机的流转方法和装置 - Google Patents
一种流程虚拟机的流转方法和装置 Download PDFInfo
- Publication number
- CN103426045B CN103426045B CN201210160828.4A CN201210160828A CN103426045B CN 103426045 B CN103426045 B CN 103426045B CN 201210160828 A CN201210160828 A CN 201210160828A CN 103426045 B CN103426045 B CN 103426045B
- Authority
- CN
- China
- Prior art keywords
- node
- flow
- instance
- event
- current operation
- 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
Links
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请提供了一种流程虚拟机的流转方法和装置,其中,所述方法包括:步骤S10,根据流程定义创建流程实例;步骤S11,确定当前操作节点;步骤S12,创建所述当前操作节点的活动实例;步骤S13,当所述活动实例存在节点进入事件时,触发所述事件;步骤S14,执行所述当前操作节点的行为;步骤S15,当所述活动实例存在节点离开事件时,触发所述事件;步骤S16,根据所述当前操作节点的行为执行结果,获取所述当前操作节点的出口有向连接;步骤S17,调用所述流程实例的流转方法;步骤S18,当所述出口有向连接存在流转事件时,触发所述事件;步骤S19,根据所述有向连接找到下一个操作节点,返回步骤S11。本申请可以支持多线程并发执行,满足在高并发场景下的响应性能。
Description
技术领域
本申请涉及工作流数据处理的技术领域,特别是涉及一种流程虚拟机的流转方法和一种流程虚拟机的流转装置。
背景技术
PVM(ProcessVirtualMachine,PVM)流程虚拟机是BPM(BusinessProcessManagement,业务流程管理)领域的一个最新流程理念。在实际的场景中,流程过程描述标准很多,例如BPEL(BusinessProcessExecutionLanguage,业务流程执行语言,是一种使用XML编写的编程语言,用于自动化业务流程),XPDL(XMLProcessDefinitionLanguage,是一个标准化规格,使用XML文件让不同的工作流程软件能够交换商业流程定义),JPDL(JBossjBPMProcessDefinitionLanguage,是构建于jBPM框架上的流程语言之一)等等。PVM的提出,是为了能够支撑多种流程语言。PVM的核心设计思想来源自″过程组件模型″,本质思想是将过程图中的活动与一个实现该活动运行时行为相关联,并用一种通用编程语言实现。PVM可以很好的支持各种不同类型的流程语言,并且能够将不同流程语言所定义流程模型,在自身的容器环境中执行。通过PVM,无论是BPEL,还是XPDL,都可以被很好的兼容和支撑。
然而现有的流程虚拟机不支持多线程并发执行,导致在高并发的场景下,响应性能无法满足要求,以较为常用的jBPM4的流程虚拟机为例,jBPM4的流程虚拟机采用的是一种基于执行实例和操作队列递归的方式,使流程运行起来。在现有技术中,执行实例依赖操作队列,流程的流转是通过操作队列的循环实现,共享的操作队列是关键。然而多线程并发操作,对共享资源的访问是瓶颈。而jBPM4流程虚拟机的流转设计存在对共享操作队列的访问的设计弊端,所以无法支持多线程并发执行fork路由,join等路由操作,导致高压力下响应性能差。
因此,目前本领域技术人员迫切需要解决的一个技术问题在于。如何创造性的提出一种流程虚拟机的流转机制,用以支持多线程并发执行,满足在高并发场景下的响应性能。
发明内容
本申请的目的是提供一种流程虚拟机的流转方法和装置,用以支持多线程并发执行,满足在高并发场景下的响应性能。
为了解决上述问题,本申请公开了一种流程虚拟机的流转方法,包括:
步骤S10,根据流程定义创建流程实例;
步骤S11,确定当前操作节点;
步骤S12,创建所述当前操作节点的活动实例;
步骤S13,当所述活动实例存在节点进入事件时,触发所述节点进入事件;
步骤S14,执行所述当前操作节点的行为;
步骤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、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的一种流程虚拟机的流转方法和一种流程虚拟机的流转装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (16)
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所述的方法,其特征在于,在步骤S12之后,步骤S13之前,还包括:
步骤S12-1,调用所述活动实例的运行perform方法。
7.根据权利要求1或2或4或5所述的方法,其特征在于,在步骤S14之后,步骤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方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210160828.4A CN103426045B (zh) | 2012-05-22 | 2012-05-22 | 一种流程虚拟机的流转方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210160828.4A CN103426045B (zh) | 2012-05-22 | 2012-05-22 | 一种流程虚拟机的流转方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103426045A CN103426045A (zh) | 2013-12-04 |
CN103426045B true CN103426045B (zh) | 2016-06-29 |
Family
ID=49650749
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210160828.4A Active CN103426045B (zh) | 2012-05-22 | 2012-05-22 | 一种流程虚拟机的流转方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103426045B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106055322A (zh) * | 2016-05-26 | 2016-10-26 | 中国银联股份有限公司 | 一种流程调度方法及装置 |
CN110400116A (zh) * | 2018-04-24 | 2019-11-01 | 优信拍(北京)信息科技有限公司 | 一种基于企业办公流转审批的处理方法,装置及系统 |
CN110647402A (zh) * | 2019-09-30 | 2020-01-03 | 浪潮软件股份有限公司 | 一种Oozie工作流程中多前驱多后继节点的处理方法 |
CN110688227A (zh) * | 2019-09-30 | 2020-01-14 | 浪潮软件股份有限公司 | 一种Oozie工作流程中尾端任务节点的处理方法 |
CN114707971B (zh) * | 2022-06-07 | 2022-09-16 | 深圳市信润富联数字科技有限公司 | 工作流流程驳回方法、装置、设备及计算机可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661582A (zh) * | 2009-09-28 | 2010-03-03 | 浙江大学 | 工作流管理系统及实现工作流定义工具的方法 |
CN102043625A (zh) * | 2010-12-22 | 2011-05-04 | 中国农业银行股份有限公司 | 一种工作流运行方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070156486A1 (en) * | 2005-12-29 | 2007-07-05 | Microsoft Corporation | Multiple concurrent workflow persistence schemes |
-
2012
- 2012-05-22 CN CN201210160828.4A patent/CN103426045B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661582A (zh) * | 2009-09-28 | 2010-03-03 | 浙江大学 | 工作流管理系统及实现工作流定义工具的方法 |
CN102043625A (zh) * | 2010-12-22 | 2011-05-04 | 中国农业银行股份有限公司 | 一种工作流运行方法及系统 |
Non-Patent Citations (2)
Title |
---|
JBPM4的流程虚拟机;荣浩;《程序员》;20090801;全文 * |
The Process Virtual Machine;Tom Baeyens;《http://docs.jboss.com/jbpm/pvm/article/》;20070508;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN103426045A (zh) | 2013-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10951491B2 (en) | Automatic microservice problem detection in enterprise applications | |
Syu et al. | A survey on automated service composition methods and related techniques | |
CN103426045B (zh) | 一种流程虚拟机的流转方法和装置 | |
KR101076910B1 (ko) | 객체 지향 언어로의 병행 프로그램 구현 | |
Allen | Reactive design patterns | |
Wohed et al. | Pattern based analysis of BPEL4WS | |
US6529934B1 (en) | Information processing system and method for same | |
Decker et al. | Behavioral consistency for B2B process integration | |
CN109040152B (zh) | 一种基于服务编排的服务请求和提供方法、装置以及电子设备 | |
CN104937572B (zh) | 用于业务和/或工作负荷处理的方法和装置 | |
CN108346028A (zh) | 一种业务审批处理方法、装置及系统 | |
US20150142501A1 (en) | System and method for executing business services and enhancing business performance through a business process modeling notation | |
CN102087594B (zh) | 扩展点和插件的管理方法和装置 | |
US20110126201A1 (en) | Event Processing Networks | |
Da et al. | Kalimucho: middleware for mobile applications | |
CN109684057A (zh) | 任务处理方法、装置和存储介质 | |
Giang et al. | On building smart city IoT applications: a coordination-based perspective | |
CN106940699A (zh) | 一种内存数据的同步处理方法、装置、服务器及系统 | |
CN109302321A (zh) | 服务器、业务需求处理系统、方法和监控系统 | |
CN105786603A (zh) | 一种基于分布式的高并发业务处理系统及方法 | |
CN109639818A (zh) | 一种云环境下的服务发现方法、装置、服务器和存储介质 | |
CN107196772A (zh) | 一种广播消息的方法及装置 | |
CN113037830A (zh) | 基于网关的微服务api编排方法及系统 | |
CN104636878A (zh) | 一种银行自动处理任务的调度方法及装置 | |
Dumez et al. | Model-driven approach supporting formal verification for web service composition protocols |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |