基于图形虚拟机的流程虚拟机及流程实现方法

文档序号:6377077阅读:137来源:国知局
专利名称:基于图形虚拟机的流程虚拟机及流程实现方法
技术领域
本发明涉及软件技术领域,更具体的说,是涉及一种基于图形虚拟机流程虚拟机及流程实现方法。
背景技术
随着计算机软件业的飞速发展,工作流在计算流程中发挥着越来越重要的作用。工作流管理联盟组织定义了完整的工作流体系结构,人们通过流程定义工具以图形化方式定义流程,通过工作流引擎运转来推进流程各个节点之间的转移。工作流引擎是工作流的核心调度机制,工作流引擎的研发涉及串行、选择、归并、循环等多种复杂的流程模式的实现,还涉及各种类型流程环节相关的复杂的规则和算法。由于源程序代码逻辑复杂难以阅读和理解,且耦合度高,所以工作流引擎的功能修改困难,功能的扩展往往需要修改已有的功能,往往一点点修改或者扩展就造成全局性的影响。

发明内容
有鉴于此,本发明提供了一种基于图形虚拟机流程虚拟机及流程实现方法,以克服现有技术中由于源程序代码逻辑复杂难以阅读和理解,且耦合度高产生的修改困难的问题。为实现上述目的,本发明提供如下技术方案一种基于图形虚拟机的流程虚拟机,包括·
外观控制器,用于接收外部请求;节点行为注册器,用于存储已注册的节点行为以及从所述外观控制器接收的外部请求中获取外部请求参数,并将所述外部请求参数组装成外部请求指令对象集,所述外部请求参数包括图形参数、节点参数以及处理阶段参数;上下文容器,用于存储上下文数据,所述上下文数据包括上下文编号ID以及与所述上下文编号ID对应的上下文;核心调度器,用于分配处理线程,并从所述外部请求指令对象集中获取当前外部请求指令对象以及从所述上下文容器中获取所述当前外部请求指令对象对应的上下文编号ID,并根据所述上下文编号ID选择相应的当前上下文以及处理线程;单元调度器,用于根据所述当前上下文获取与其对应的上下文指令,将所述上下文指令作为当前上下文指令,从所述节点行为注册器中获取与所述当前上下文指令对应的当前节点行为,并将所述当前上下文加载至所述当前指令的节点行为中,以根据所述处理线程执行所述当前外部请求指令对象对应的当前节点行为,并判断所述外部请求指令对象集中的外部请求指令对象是否执行完毕,如果否,则从所述外部请求指令对象集中获取下一外部请求指令对象,作为当前外部请求指令对象,如果是,则退出所述处理线程。其中,所述外观控制器还用于判断所述流程虚拟机的当前状态,当所述流程虚拟机为停止状态的情况下,控制所述核心调度器停止分配处理线程、取消所述节点行为注册器中已注册的节点行为以及清空上下文容器中的上下文,并标注所述工作流引擎的状态为停止状态。其中,所述外观控制器还用于判断所述流程虚拟机的当前状态,当所述流程虚拟机为启动状态的情况下,创建所述节点行为注册器、所述上下文容器、所述单元调度器以及所述核心调度器,并初始化所述节点行为注册器以及所述核心调度器。其中,所述节点行为注册器还存储有节点行为初始化函数以及配置文件,所述配置文件记录有节点行为缓冲映射结构与节点行为实现类的对应关系,对所述节点行为注册器初始化的过程包括
调用所述节点行为初始化函数;根据所述节点行为初始化函数创建节点行为缓冲映射结构以及从所述配置文件中获取与所述节点行为缓冲映射结构对应的节点行为实现类;根据所述节点行为实现类创建类的实例,并加载到所述缓存映射结构中,以完成节点行为的注册。其中,所述核心调度器包括核心初始化函数以及与其对应的核心调度线程池,对所述核心调度器初始化的过程包括调用所述核心初始化函数;根据所述核心初始化函数创建与其对应的核心调度线程池;根据所述核心调度线程池,获取各个节点行为的上下文。其中,所述核心调度器包括获取模块,用于接收到所述当前外部请求指令对象后,从所述上下文容器中获取上下文编号ID ;发送模块,用于将所述上下文编号ID传送往所述核心调度线程池;选择模块,用于选择与所述上下文编号ID对应的处理线程。一种基于图形虚拟机的流程实现方法,包括A、从接收到的外部请求中获取外部请求参数,并将所述外部请求参数组装成外部请求指令对象集,所述外部请求参数包括图形参数、节点参数以及处理阶段参数;B、从所述外部请求指令对象集中获取当前外部请求指令对象以及所述外部请求当前指令对象对应的上下文编号ID,并根据所述上下文编号ID选择相应的当前上下文以及分配处理线程;C、根据所述当前上下文获取与其对应的上下文指令,将所述上下文指令作为当前上下文指令,并将所述当前上下文加载至所述当前指令的节点行为实现方法中,并根据所述处理线程执行所述当前外部请求指令对象对应的当前节点行为;D、判断所述外部请求指令对象集中的外部请求指令对象是否执行完毕,如果否,则从所述外部请求指令对象集中获取下一外部请求指令对象,作为当前外部请求指令对象,并返回步骤B,如果是,则退出所述处理线程。其中,在步骤D之后,还包括E、停止分配处理线程、清空上下文。经由上述的技术方案可知,采用本发明实施例提供的基于图形虚拟机的流程虚拟机,外观控制器、节点行为注册器、上下文容器、核心调度器以及单元调度器是以图的形式出现的,当需要对外观控制器进行修改时,只需要对外观控制器对应的程序代码进行修改,这样在对工作流引擎的功能进行修改时也比较简单,由于外观控制器、节点行为注册器、上下文容器、核心调度器以及单元调度器对应的代码独立,所以易于扩展。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图I为本发明实施例提供的一种基于图形虚拟机的流程虚拟机的结构示意图;图2为本发明实施例提供的一种基于图形虚拟机的流程实现方法的流程图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。工作流引擎是流程应用的核心功能,但是成功的工作流引擎本身的研发一直是复杂的、高难度的。这是因为工作流引擎本身的研发涉及串行、选择、归并、循环等多种复杂的流程模式的实现,还涉及各种类型流程环节相关的复杂的规则和算法,并且还要应对工作流引擎作为系统的核心调度机制所必须具备的高可靠性要求。工作流引擎研发中实际困难具体体现在如下几方面由于工作流引擎的各种调度机制之间高度耦合,所以往往是只有少量能力强的工程师复可参与,难以实现多开发人员并行工作,开发周期长。工作流引擎的功能修改困难,功能的扩展往往需要修改已有的功能,往往一点点修改或者扩展就造成全局性的影响;由于逻辑复杂,源程序代码难以阅读和理解,代码移交困难。总之,目前业界对于工作流引擎的研发存在较大瓶颈,需要有一种更好机制来避免工作流引擎研发的问题,提高研发效率。实施例一请参阅图1,为本发明实施例提供的一种基于图形虚拟机的流程虚拟机的结构示意图,基于图形虚拟机的流程虚拟机的业务流程的执行都是以图为基础的,图包括节点以及节点之间的路由关系。基于图形虚拟机的流程虚拟机基于图、节点以及块活动等基本概念,并把基本概念的基本行为进行建模和维护。利用插件扩展对节点的行为进行扩展,从而实现各种模式基于图的流程调度机制。插件是一种遵循一定规范的应用程序接口编写出来的程序。很多软件都有插件,插件有无数种。例如在IE中,安装相关的插件后,WEB浏览器能够直接调用插件程序,用于处理特定类型的文件。插件负责整个图形运行机制,并提供扩展点,包括流程定义缓存、流程定义加载、流程解析器扩展、流程验证器扩展、节点行为监听器扩展、节点行为扩展、节点验证器扩展等。该基于图形虚拟机的流程虚拟机包括
外观控制器101、节点行为注册器102、上下文容器103、核心调度器104以及单元调度器105,其中外观控制器101,用于接收外部请求。基于图形虚拟机的流程虚拟机在启动时,外观控制器101还可以用于检查工作流引擎的状态,并对工作流引擎的启动过程进行加锁。进行加锁是为了防止其他的线程对该资源进行创建,导致发生资源争用。上述的节点行为注册器102、上下文容器103、核心调度器104以及单元调度器105可以是外观控制器101在基于图形虚拟机的流程虚拟机在启动时创建的。外观控制器101还可以用于判断所述流程虚拟机的当前状态,当所述流程虚拟机为停止状态的情况下,控制所述核心调度器停止分配处理线程、取消所述节点行为注册器中已注册的节点行为以及清空上下文容器中的上下文,并标注所述工作流引擎的状态为停止状态。 外观控制器101还用于判断所述流程虚拟机的当前状态,当所述流程虚拟机为启动状态的情况下,创建所述节点行为注册器、所述上下文容器、所述单元调度器以及所述核心调度器,并初始化所述节点行为注册器以及所述核心调度器。节点行为注册器102,用于存储已注册的节点行为以及从所述外观控制器101接收的外部请求中获取外部请求参数,并将所述外部请求参数组装成外部请求指令对象集。所述外部请求参数包括图形参数、节点参数以及处理阶段参数。在基于图形虚拟机的流程虚拟机启动期间,相应的插件会根据与其对应的搜索机制在当前运行环境中查找所有的扩展并组装这些扩展,以便加载流程虚拟机中的各个插件。在流程虚拟机运行期间,插件可以负责把外部的请求转化成一系列的外部请求指令对象,然后针对不同的外部请求指令对象调用不同节点行为方法。节点行为注册器102存储有节点行为初始化函数以及配置文件,所述配置文件记录有节点行为缓冲映射结构与节点行为实现类的对应关系,对节点行为注册器102初始化的过程包括调用所述节点行为初始化函数;根据所述节点行为初始化函数创建节点行为缓冲映射结构以及从所述配置文件中获取与所述节点行为缓冲映射结构对应的节点行为实现类;根据所述节点行为实现类创建类的实例,并加载到所述缓存映射结构中,以完成节点行为的注册。节点行为可以是由插件提供的。上下文容器103,用于存储上下文数据。所述上下文数据包括上下文编号ID以及与所述上下文编号ID对应的上下文。上下文容器103可以确保在节点行为处理过程中其他模块(例如核心调度器104)可以访问上下文。核心调度器104,用于从所述外部请求指令对象集中获取当前外部请求指令对象以及从所述上下文容器中获取所述当前外部请求指令对象对应的上下文编号ID,并根据所述上下文编号ID选择相应的当前上下文,根据上下文编号ID选择相应的处理线程。核心调度器104包括核心初始化函数以及与其对应的核心调度线程池,所述核心调度器初始化的过程包括调用所述核心初始化函数;根据所述核心初始化函数创建与其对应的核心调度线程池;根据所述核心调度线程池,获取各个节点行为的上下文。
核心调度器104可以对外观控制器101传递过来的每一个外部请求分配一个处理线程。可以将核心调度器104划分为获取模块,用于接收到所述当前外部请求指令对象后,从所述上下文容器中获取上下文编号ID ;发送模块,用于将所述上下文编号ID传送往所述核心调度线程池;以及选择模块,用于选择与所述上下文编号ID对应的处理线程。核心调度器104对外观控制器101的外部请求进行处理的过程如下核心调度器调用上下文容器103的创建方法,创建请求上下文;核心调度器104把上下文编号ID传递给核心调度线程池,核心调度线程池选择一个与所述上下文编号ID相对应的处理线程执行该外部请求。处理线程的执行外观控制器101的外部请求的过程包括(I)处理线程从上下文 容器103获取到对应的上下文,作为当前上下文;(2)处理线程判断当前上下文是否还有更多的指令;(3)如果是,则调用单元调度器105的处理过程,并传入上下文ID,重复上述步骤
(2);(4)如果否,则对该外部请求的处理已经完成,并退出。单元调度器105,用于根据所述当前上下文获取与其对应的上下文指令,将所述上下文指令作为当前上下文指令,从所述节点行为注册器中获取与所述当前上下文指令对应的当前节点行为,并将所述当前上下文加载至所述当前指令的节点行为中,以根据所述处理线程执行所述当前外部请求指令对象对应的当前节点行为,并判断所述外部请求指令对象集中的外部请求指令对象是否执行完毕,如果否,则从所述外部请求指令对象集中获取下一外部请求指令对象,作为当前外部请求指令对象,如果是,则退出所述处理线程。外当前上下文指令有多种类型,根据不同类型的当前上下文指令,单元调度器执行不同的操作,具体操作如下单元调度器从该上下文容器中获取到当前上下文;单元调度器获取到的当前上下文中获取一个指令,作为当前上下文指令;单元调度器判断当前上下文指令的类型;如果是“执行”类型,则单元调度器运行自己的执行过程;如果是“跳转”类型,则单元调度器执行自己的传送过程。单元调度器运行自己的执行过程如下单元调度器从节点注册器获取到适合于当前上下文指令的节点行为实现对象,作为当前节点行为,所述当前节点行为包括执行前方法、执行方法以及执行后行为;单元调度器调用当前节点行为对象的执行前方法,触发对应的用户定制行为,并传入当前上下文;单元调度器调用当前节点行为对象的执行方法,触发用户定义的节点动作,并传入当前上下文;单元调度器调用当前节点行为对象的执行后行为,触发对应的用户定制行为,并传入当前上下文;单元调度器获取当前上下文的“是否继续”属性;如果该属性为“不继续”,则直接退出;如果该属性为“继续”,则调用当前节点行为的获取后继方法,获取到后续节点;单元调度器记录当前可执行请求处理完成的日志。单元调度器执行自己的传送过程如下单元调度器从节点注册器获取适合于当前上下文指令的节点行为实现对象,作为当前节点行为,所述当前节点行为包括迁移前方法以及迁移传送动作;单元调度器通过调用当前节点行为的迁移前方法,触发对应的用户定制行为;单元调度器通过调用当前节点行为的迁移传送动作,获取到后续节点列表,并判断是否能够获取到;如果否,则当前节点是图中最后一个节点,也即结束节点,查找该节点的父节点,且该单元调度器为父节点产生一个新的指令,加入到当前上下文的执行队列当中,指定执行阶段为结束;如果是,则当前节点是一个中间节点,单元调度器顺次为后续节点创建新的指令,加入到当前上下文的执行队列当中;单元调度器记录当前上下文指令处理完成的日志。当节点行为为分阶段节点行为时,单元调度器运行自己的执行过程包括分阶段节点行为从当前上下文中获取到当前执行单元,并获取到执行阶段信息;如果执行阶段是开始,则进行开始阶段操作处理;如果执行阶段是指令,则进行指令阶段操作处理;如果执行阶段是结束,则进行结束阶段操作处理。进行开始阶段操作处理,包括以下步骤分阶段节点行为设定当前上下文指令的继续运行属性为真;分阶段节点行为调用节点开始动作;单元调度器判断是否继续;如果是,则设定下一个命令为执行,并继续回到开始的判断;如果否,则退出。进行指令阶段操作处理,包括以下步骤阶段节点行为设定当前上下文指令的继续运行属性为真;分阶段节点行为调用节点执行动作;单元调度器判断是否继续;如果是,则设定下一个命令为结束,继续回到开始的判断;如果否,则退出。
结束阶段操作处理,包括以下步骤分阶段节点行为设定当前上下文指令的继续运行属性为真;分阶段节点行为调用节点完成动作;结束阶段处理完毕,退出执行。节点行为为块节点行为,块节点行为的父类为分阶段节点行为,单元调度器运行自己的执行过程,包括以下步骤块节点行为调用分阶段节点行为的步骤;块节点行为从当前上下文中获取到当前执行单元,并获取到执行阶段信息;如果该执行阶段信息不是执行,则直接退出;如果该执行阶段信息是执行,则块节点行为获取已经设定的开始节点;块节点行为对获取到的开始节点创建新的执行单元指令块节点行为把新创建的指令加入到当前执行上下文的执行队列当中,并完成。采用本发明实施例提供的基于图形虚拟机的流程虚拟机,外观控制器、节点行为注册器、上下文容器、核心调度器以及单元调度器是以图的形式出现的,当需要对外观控制器进行修改时,只需要对外观控制器对应的程序代码进行修改,这样在对工作流引擎的功能进行修改时也比较简单,由于外观控制器、节点行为注册器、上下文容器、核心调度器以及单元调度器对应的代码独立,所以易于扩展。实施例二上述本发明公开的实施例中详细描述了系统,对于本发明的方法可采用多种形式的方法实现,因此本发明还公开了一种方法,下面给出具体的实施例进行详细说明。请参阅图2,为本发明实施例提供的一种基于图形虚拟机的流程实现方法的流程图,该方法可以包括步骤S201:从接收到的外部请求中获取外部请求参数,并将所述外部请求参数组装成外部请求指令对象集。所述外部请求参数包括图形参数、节点参数以及处理阶段参数。步骤S202 :从所述外部请求指令对象集中获取当前外部请求指令对象以及所述外部请求当前指令对象对应的上下文编号ID,并根据所述上下文编号ID选择相应的当前上下文以及分配处理线程。步骤S203 :根据所述当前上下文获取与其对应的上下文指令,将所述上下文指令作为当前上下文指令,并将所述当前上下文加载至所述当前指令的节点行为实现方法中,并根据所述处理线程执行所述当前外部请求指令对象对应的当前节点行为。
步骤S204:判断所述外部请求指令对象集中的外部请求指令对象是否执行完毕,如果否,则执行步骤S205,如果是,则执行步骤S206。步骤S205 :从所述外部请求指令对象集中获取下一外部请求指令对象,作为当前外部请求指令对象,并返回步骤S202。步骤S206 :退出所述处理线程。该方法在步骤S206之后还可以包括停止分配处理线程、清空上下文。本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执 行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
权利要求
1.一种基于图形虚拟机的流程虚拟机,其特征在于,包括 外观控制器,用于接收外部请求; 节点行为注册器,用于存储已注册的节点行为以及从所述外观控制器接收的外部请求中获取外部请求参数,并将所述外部请求参数组装成外部请求指令对象集,所述外部请求参数包括图形参数、节点参数以及处理阶段参数; 上下文容器,用于存储上下文数据,所述上下文数据包括上下文编号ID以及与所述上下文编号ID对应的上下文; 核心调度器,用于从所述外部请求指令对象集中获取当前外部请求指令对象以及从所述上下文容器中获取所述当前外部请求指令对象对应的上下文编号ID,并根据所述上下文编号ID选择相应的当前上下文,根据上下文编号ID选择相应的处理线程; 单元调度器,用于根据所述当前上下文获取与其对应的上下文指令,将所述上下文指令作为当前上下文指令,从所述节点行为注册器中获取与所述当前上下文指令对应的当前节点行为,并将所述当前上下文加载至所述当前指令的节点行为中,以根据所述处理线程执行所述当前外部请求指令对象对应的当前节点行为,并判断所述外部请求指令对象集中的外部请求指令对象是否执行完毕,如果否,则从所述外部请求指令对象集中获取下一外部请求指令对象,作为当前外部请求指令对象,如果是,则退出所述处理线程。
2.根据权利要求I所述流程虚拟机,其特征在于,所述外观控制器还用于 判断所述流程虚拟机的当前状态,当所述流程虚拟机为停止状态的情况下,控制所述核心调度器停止分配处理线程、取消所述节点行为注册器中已注册的节点行为以及清空上下文容器中的上下文,并标注所述工作流引擎的状态为停止状态。
3.根据权利要求I或2所述流程虚拟机,其特征在于,所述外观控制器还用于 判断所述流程虚拟机的当前状态,当所述流程虚拟机为启动状态的情况下,创建所述节点行为注册器、所述上下文容器、所述单元调度器以及所述核心调度器,并初始化所述节点行为注册器以及所述核心调度器。
4.根据权利要求3所述流程虚拟机,其特征在于,所述节点行为注册器还存储有节点行为初始化函数以及配置文件,所述配置文件记录有节点行为缓冲映射结构与节点行为实现类的对应关系,对所述节点行为注册器初始化的过程包括 调用所述节点行为初始化函数; 根据所述节点行为初始化函数创建节点行为缓冲映射结构以及从所述配置文件中获取与所述节点行为缓冲映射结构对应的节点行为实现类; 根据所述节点行为实现类创建类的实例,并加载到所述缓存映射结构中,以完成节点行为的注册。
5.根据权利要求3所述流程虚拟机,其特征在于,所述核心调度器包括核心初始化函数以及与其对应的核心调度线程池,对所述核心调度器初始化的过程包括 调用所述核心初始化函数; 根据所述核心初始化函数创建与其对应的核心调度线程池; 根据所述核心调度线程池,获取各个节点行为的上下文。
6.根据权利要求5所述流程虚拟机,其特征在于,所述核心调度器包括 获取模块,用于接收到所述当前外部请求指令对象后,从所述上下文容器中获取上下文编号ID ; 发送模块,用于将所述上下文编号ID传送往所述核心调度线程池; 选择模块,用于选择与所述上下文编号ID对应的处理线程。
7.一种基于图形虚拟机的流程实现方法,其特征在于,包括 A、从接收到的外部请求中获取外部请求参数,并将所述外部请求参数组装成外部请求指令对象集,所述外部请求参数包括图形参数、节点参数以及处理阶段参数; B、从所述外部请求指令对象集中获取当前外部请求指令对象以及所述外部请求当前指令对象对应的上下文编号ID,并根据所述上下文编号ID选择相应的当前上下文以及分配处理线程; C、根据所述当前上下文获取与其对应的上下文指令,将所述上下文指令作为当前上下文指令,并将所述当前上下文加载至所述当前指令的节点行为实现方法中,并根据所述处理线程执行所述当前外部请求指令对象对应的当前节点行为; D、判断所述外部请求指令对象集中的外部请求指令对象是否执行完毕,如果否,则从所述外部请求指令对象集中获取下一外部请求指令对象,作为当前外部请求指令对象,并返回步骤B,如果是,则退出所述处理线程。
8.根据权利要求7所述方法,其特征在于,在步骤D之后,还包括 E、停止分配处理线程、清空上下文。
全文摘要
本发明实施例提供了一种基于图形虚拟机流程虚拟机及流程实现方法,该基于图形虚拟机流程虚拟机包括外观控制器、节点行为注册器、上下文容器、核心调度器以及单元调度器。采用本发明实施例提供的基于图形虚拟机流程虚拟机及流程实现方法对工作流引擎的功能进行修改时也比较简单,由于外观控制器、节点行为注册器、上下文容器、核心调度器以及单元调度器对应的代码独立,所以易于扩展。
文档编号G06Q10/06GK102915250SQ20121034504
公开日2013年2月6日 申请日期2012年9月17日 优先权日2012年9月17日
发明者方国, 田应生, 杨宁 申请人:北京中电普华信息技术有限公司, 国家电网公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1