《一种流程虚拟机的流转方法和装置.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。