一种工作流并发模式的控制方法及装置的制作方法

文档序号:6339632阅读:163来源:国知局
专利名称:一种工作流并发模式的控制方法及装置的制作方法
技术领域
本发明涉及数据处理领域,特别是涉及一种工作流并发模式的控制方法及装置。
背景技术
在一个流程实例中,可能会存在多个对象,这些对象可以被不同的人或机器在同 一时刻进行操作,就会形成并发,而这种模式称为工作流并发模式。任务是工作流中一类对 象,它一般是现实生活中一些事宜、任务、事项或者步骤的抽象,在流程执行到任务节点的 时候产生实例。流程节点可以是多任务节点,执行多任务节点的时候会同时产生多个任务 实例,一般这多个任务实例能够被不同的人员同时操作形成并发。流程分支也是工作流中 的一类对象,它是流程主线执行到并发分支节点的时候,分裂成多个流程子线同时执行,而 这些流程分支能够被不同的人员或机器同时执行,因此也可以形成并发。子流程也是工作 流中的一类对象,它能够被其他的流程调用。在本申请文件中,所述的子流程都是同步子流 程,即主流程调起子流程后,需要等待子流程的结束才能继续向下执行。多子流程节点是工 作流节点的一种类型,执行的时候会同时产生多个子流程实例,一般这多个子流程能够被 不同的人员和机器同时执行,因此会形成并发。在工作流执行模式中,存在大量的并发场景。参考图1所示,是一个多任务节点的 多个任务实例的并发场景的流程示意图。参考图2所示,是一个流程实例的多个流程分支 的并发场景的流程示意图。参考图3所示,是一个多子流程节点的多个子流程实例的并发 场景的流程示意图。对于工作流引擎来说,当并发实例全部执行完成时,会触发流程流转和 流程状态变更,而在实际应用中,在每一个实例执行完成时,就需要判断所有兄弟实例是否 已经执行完成。现有技术中有一些对于现有的工作流并发的控制方法,例如查询兄弟对象的方 法。该方法的流程如示意图可以参考图4所示,首先需要结束当前实例,然后再查询所有的 兄弟实例是否结束,如果都已经结束,则触发流程向下流转;如果尚未全部结束,则结束此 次查询操作。但是该查询兄弟对象的方法,因为在每一个实例结束的时候,都需要查询所有的 兄弟实例,以N个兄弟实例为例,在所有并发实例都完成的情况下,涉及到的数据库查询记 录条次为N*N条次,总查询量以N的平方指数增长,所以执行时数据查询量较大,进而会导 致现有技术中控制工作流并发模式的效率较低。进一步的,当每个并发实例同时执行的时 候,它们会同时并行地对所有兄弟实例进行查询,其查询结果很可能已经被其他正在执行 的实例篡改,造成“脏读”的现象引起工作流引擎的错误执行,因此现有的控制方法也存在 并发冲突。因此,目前需要本领域技术人员迫切解决的一个技术问题就是如何能够提出一 种工作流并发模式的控制方法,用以解决现有技术中数据查询量较大导致的控制效率较低 且有可能引起工作流引擎错误执行的问题。

发明内容
本发明所要解决的技术问题是提供一种工作流并发模式的控制方法,用以解决现 有技术中数据查询量较大导致的控制效率较低且有可能引起工作流引擎错误执行的问题, 进一步的,还能避免并发冲突的现象存在。本发明的另一个目的是将上述构思应用于具体的应用环境中,提供一种工作流并 发模式的控制装置,从而保证该方法的实现和应用。为解决上述技术问题,本发明实施例提供了一种工作流并发模式的控制方法,包 括创建当前父实例下的至少两个并发子实例,以及与所述当前父实例对应的计数器 对象;依据所述计数器对象对所述至少两个并发子实例进行控制。优选的,所述创建与所述当前父实例对应的计数器对象,具体包括生成所述计数器对象的编号;设置所述计数器对象的类型;所述计数器对象的类型包括并发任务、并发分支 或并发子流程;将所述计数器对象的对象个数和未完成个数的初始值都设置为所述并发子实例 的个数。优选的,还包括将所述计数器对象的父实例编号初始化为所述当前父实例的编号;设置所述计数器对象的创建时间和最后更新时间为当前时间。优选的,所述依据所述计数器对象对所述至少两个并发子实例进行控制,具体包 括当前并发子实例结束时,在数据库端锁定所述计数器对象;当前线程对所述计数器对象的未完成个数执行减一操作;判断执行减一操作之后的未完成个数是否为零,如果是,则执行所述当前父实例 的下一个环节,如果否,则由当前线程解除所述计数器对象的锁定操作。优选的,还包括如果所述执行减一操作之后的未完成个数为零,则将所述计数器对象的结束时间 保存为当前时间。本发明实施例还提供了一种工作流并发模式的控制装置,包括创建模块,用于创建当前父实例下的至少两个并发子实例,以及与所述当前父实 例对应的计数器对象;控制模块,用于依据所述计数器对象对所述至少两个并发子实例进行控制。优选的,所述创建模块具体包括生成子模块,用于生成所述计数器对象的编号;第一设置子模块,用于设置所述计数器对象的类型;所述计数器对象的类型包括 并发任务、并发分支或并发子流程;第二设置子模块,用于将所述计数器对象的对象个数和未完成个数的初始值都设 置为所述并发子实例的个数。
优选的,所述创建模块还包括初始化子模块,用于将所述计数器对象的父实例编号初始化为所述当前父实例的编号;第三设置子模块,用于设置所述计数器对象的创建时间和最后更新时间为当前时 间。优选的,所述控制模块具体包括锁定子模块,用于当前并发子实例结束时,在数据库端锁定所述计数器对象;执行减一操作子模块,用于对所述计数器对象的未完成个数执行减一操作;判断子模块,用于判断执行减一操作之后的未完成个数是否为零;执行子模块,用于当所述判断模块的结果为是时,执行所述当前父实例的下一个 环节;解锁子模块,用于当所述判断模块的结果为否时,解除所述计数器对象的锁定操作。优选的,还包括保存模块,用于如果所述执行减一操作之后的未完成个数为零,则将所述计数器 对象的结束时间保存为当前时间。与现有技术相比,本发明具有以下优点因为本发明实施例中依据计数器对象来控制多个并发子实例的并发模式,可以使 数据处理量显著变小。以N个并发子实例为例,现有技术在并发子实例结束的时候,仅查询 未完成子实例即需要N*N条次的查询,而本发明只需要查询N条次,数量减少为N分之一, 这样也可以提高对并发子实例的并发模式进行控制的效率,也不会引起工作流引擎错误执 行。同时因为所有的并发子实例结束操作都需要获得对计数器对象的锁,所以所有的并发 子实例在同时发出操作的情况下,在此处会变成串行处理,不存在并发冲突。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可 以根据这些附图获得其他的附图。图1是一个多任务节点的多个任务实例的并发场景的流程示意图;图2是一个流程实例的多个流程分支的并发场景的流程示意图;图3是一个多子流程节点的多个子流程实例的并发场景的流程示意图;图4是现有的工作流并发的控制方法的流程示意图;图5是本发明的一种工作流并发模式的控制方法实施例的流程图;图6是本发明方法实施例中步骤501的流程示意图;图7是计数器对象的属性示意图;图8是本发明方法实施例中步骤102的流程示意图;图9是本发明的一种工作流并发模式的控制装置实施例的结构示意图;图10是本发明装置实施例中创建模块901的结构示意图11是本发明装置实施例中控制模块902的结构示意图。
具体实施例方式为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实 施方式对本发明作进一步详细的说明。本发明可用于众多通用或专用的计算装置环境或配置中。例如个人计算机、服务 器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备 的分布式计算环境等等。本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序 模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组 件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由 通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以 位于包括存储设备在内的本地和远程计算机存储介质中。参考图5,示出了本发明的一种工作流并发模式的控制方法实施例的流程图,可以 包括以下步骤步骤501 创建当前父实例下的至少两个并发子实例,以及与所述当前父实例对 应的计数器对象。本发明实施例与现有技术不同的是,在创建了一个父实例下的至少两个并发子实 例之后,还为当前父实例创建一个唯一对应的计数器对象。使用计数器对象来保存所述至 少两个并发子实例的完成数量,以此为依据来判断流程是否转向该父实例中的下一个环 节。本发明实施例中创建的一个计数器对象可以调用(createO方法),在每个并发 子实例结束的时候,后续可以对计数器对象实施减一操作(minus ()方法),再判断减一之 后的未完成个数是否为0,根据返回结果(是否为0)来决定下一步是继续执行并发子实例 还是执行该父实例的下一个环节。其中,所述并发子实例可能是任务、分支或是子流程。参考图6所示,为步骤501中创建计数器对象的流程示意图,具体可以包括步骤601 生成所述计数器对象的编号。所述计数器对象的编号是计数器对象的一个标识,在生成的时候可以采用数据库 自增的功能为计数器对象编号,例如,在生成第一个计数器对象的时候假如编号为1,那么 生成第二个计数器对象的时候就会编号为2,以此类推,实现对计数器对象的编号生成功 能。步骤602 设置所述计数器对象的类型;所述计数器对象的类型包括并发任务、 并发分支或并发子流程。所述计数器对象的类型为分别针对并发任务实例、并发流程分支实例或者并发子 流程实例设定的类型,计数器对象的类型不同不影响本发明中对于并发子实例的控制过 程,计数器对象的类型只是用来表示该计数器对象的应用场景。所述计数器对象的类型可 以和父实例的编号一起定位一个并发子实例的父实例。步骤603 将所述计数器对象的对象个数和未完成个数的初始值都设置为所述并 发子实例的个数。7
所述计数器对象的对象个数为保存的当前父实例的所有并发子实例的初始化总 个数。所述未完成个数表示设置的所有并发子实例中未完成的并发子实例的剩余个数。步骤604 将所述计数器对象的父实例编号初始化为所述当前父实例的编号。在本步骤中即是将计数器对象的父实例编号设置为创建该计数器对象的父实例 编号,是并发对象的上级对象的编号。步骤605 设置所述计数器对象的创建时间和最后更新时间为当前时间。在本步骤中,所述创建时间用于表示该计数器对象的初始存在时间,最后更新时 间是计数器对象每一次更新时记录的当前操作时间。参考图7所示,为计数器对象的属性示意图。步骤502 依据所述计数器对象对所述至少两个并发子实例进行控制。在本步骤中,需要按照对计数器对象的属性中未完成个数等参数,来对当前父实 例下创建的至少两个并发子实例的并发模式进行流程控制的过程。参考图8所示,所述步骤102在实现过程中具体可以包括以下步骤步骤801 当前并发子实例结束时,在数据库端锁定所述计数器对象。其中,当一个并发子实例执行完毕时,则由该当前并发子实例的线程对计数器对 象进行锁定,其目的是使得其他并发子实例的线程不能对所述计数器对象进行任何操作, 以避免并发冲突的现象。需要说明的是,每个并发子实例操作计数器对象时都应该对其进行锁定,而且尽 可能地利用数据库系统所提供的功能来实现,以适用于集群类应用的部署。步骤802 当前线程对所述计数器对象的未完成个数执行减一操作。由当前线程对所述计数器对象的未完成个数减一。步骤803 判断执行减一操作之后的未完成个数是否为零,如果是,则进入步骤 804 ;如果否,则进入步骤805。再判断减一之后的未完成个数是否是零,当未完成个数为零时,说明之前创建的 所有并发子实例都已经执行完毕。而如果未完成个数不为零,则说明之前创建的所有并发 子实例并未全部执行完毕,此时,还需要转到下一个并发子实例来执行。步骤804 执行所述当前父实例的下一环节。当前父实例的所有并发子实例虽然已经全部执行完毕,但是当前父实例还存在后 续环节继续运行,它可能是下一组并发任务或者下一组并发子流程等,因此,流程将转向当 前父实例的下一环节。流程是很多环节构成的,例如第一个环节是多任务节点(并发任务),第二个环节 是单任务节点(无并发),第三个环节是多分支(并发分支),等等,依次类推,完成一个环 节后进入下一个环节的执行。步骤805 由当前线程解除所述计数器对象的锁定操作。而未完成个数不为零时,则由当前线程解除对所述计数器对象的锁定操作,目的 是使得其他并发子实例的线程可以对所述计数器对象进行操作。需要说明的是,每个并发子实例拥有操作计数器的时间应该尽量短,以避免长时 间锁定计数器对象造成数据库阻塞,因此,在判断得到未完成个数不为零时,需要立即解除 对所述计数器对象的锁定操作。8
步骤806 如果所述执行减一操作之后的未完成个数为零,则将所述计数器对象 的结束时间保存为当前时间。进一步的,当并发子实例的未完成个数为零时,需要将当前结束时间保存为计数 器对象的结束时间,该结束时间是计数器的未完成个数变成0的操作时间。需要说明的是, 虽然本步骤可以在判断得到未完成个数为零之后即可执行,为了描述方便才将其放置于步 骤805之后。在本发明实施例中,每个并发子实例应该拥有尽可能少的其他共享资源,以防止 死锁的发生,同时因为本发明依据计数器对象来控制多个并发子实例的并发模式,可以使 数据处理量显著变小。以N个并发子实例为例,现有技术在并发子实例结束的时候,仅仅 查询未完成子实例即需要N*N条次的查询,而本发明只需要查询N条次,数量减少为N分之 一,这样也可以提高对并发子实例的并发模式进行控制的效率。同时因为所有的并发子实 例结束操作都需要获得对计数器对象的锁,所以所有的并发子实例在同时发出操作的情况 下,在此处会变成串行处理,不存在并发冲突。并且每一次当并发子实例完成时,只需要锁 定计数器对象的一条记录。本发明实施例的处理成功率在一般情况下为100%,不会发生操 作失败的现象。同时,在数据库端进行对象的锁定,也可以应用于集群部署模式。因此,本 发明实施例具有简洁、可靠、有效和性能优良的特点,能够适用于不同的应用系统和数据库 系统。需要说明的是,因为本发明实施例需要应用于集群部署的场景,所以对于计数器 对象的锁定需要放置在数据库端,采用数据库锁定数据的功能来实现。因此,本发明实施例在实际应用中还可以包括步骤步骤503 删除已经标记了结束时间的所述计数器对象。在本发明实施例实现了对并发子实例的并发模式的控制之后,还可以对已经标记 了结束时间的计数器对象进行清理。因为计数器对象一旦结束后,就没有存在的意义,但是 它还会占用数据库空间,以批量处理的形式删除结束的计数器对象,更能够节省数据库的 存储空间。参考图9,示出了本发明的一种工作流并发模式的控制装置实施例的结构示意图, 本实施例可以包括以下步骤创建模块901,用于创建当前父实例下的至少两个并发子实例,以及与所述当前父 实例对应的计数器对象。参考图10所示,为所述创建模块901的结构示意图,具体可以包括生成子模块1001,用于生成所述计数器对象的编号;第一设置子模块1002,用于设置所述计数器对象的类型;所述计数器对象的类型 包括并发任务、并发分支或并发子流程。第二设置子模块1003,用于将所述计数器对象的对象个数和未完成个数的初始值 都设置为所述并发子实例的个数。初始化子模块1004,用于将所述计数器对象的父实例编号初始化为所述当前父实 例的编号。第三设置子模块1005,用于设置所述计数器对象的创建时间和最后更新时间为当 前时间。
控制模块902,用于依据所述计数器对象对所述至少两个并发子实例进行控制。参考图11所示,为控制模块902的结构示意图,具体可以包括锁定子模块1101,用于当前并发子实例结束时,在数据库端锁定所述计数器对象。执行减一操作子模块1102,用于对所述计数器对象的未完成个数执行减一操作。判断子模块1103,用于判断执行减一操作之后的未完成个数是否为零。执行子模块1104,用于当所述判断模块的结果为是时,执行所述当前父实例的下 一个环节。解锁子模块1105,用于当所述判断模块的结果为否时,解除所述计数器对象的锁定操作。同时,本发明实施例还可以包括保存模块,用于如果所述执行减一操作之后的未完成个数为零,则将所述计数器 对象的结束时间保存为当前时间。需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列 的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为 依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知 悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明 所必须的。需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重 点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。 对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参 见方法实施例的部分说明即可。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实 体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存 在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵 盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要 素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。以上对本发明所提供的一种工作流并发模式的控制方法及工作流并发模式的控 制装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述, 以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一 般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所 述,本说明书内容不应理解为对本发明的限制。10
权利要求
1.一种工作流并发模式的控制方法,其特征在于,包括创建当前父实例下的至少两个并发子实例,以及与所述当前父实例对应的计数器对象;依据所述计数器对象对所述至少两个并发子实例进行控制。
2.如权利要求1所述的方法,其特征在于,所述创建与所述当前父实例对应的计数器 对象,具体包括生成所述计数器对象的编号;设置所述计数器对象的类型;所述计数器对象的类型包括并发任务、并发分支或并 发子流程;将所述计数器对象的对象个数和未完成个数的初始值都设置为所述并发子实例的个数。
3.如权利要求2所述的方法,其特征在于,还包括将所述计数器对象的父实例编号初始化为所述当前父实例的编号; 设置所述计数器对象的创建时间和最后更新时间为当前时间。
4.如权利要求2所述的方法,其特征在于,所述依据所述计数器对象对所述至少两个 并发子实例进行控制,具体包括当前并发子实例结束时,在数据库端锁定所述计数器对象; 当前线程对所述计数器对象的未完成个数执行减一操作;判断执行减一操作之后的未完成个数是否为零,如果是,则执行所述当前父实例的下 一个环节,如果否,则由当前线程解除所述计数器对象的锁定操作。
5.如权利要求4所述的方法,其特征在于,还包括如果所述执行减一操作之后的未完成个数为零,则将所述计数器对象的结束时间保存 为当前时间。
6.一种工作流并发模式的控制装置,其特征在于,包括创建模块,用于创建当前父实例下的至少两个并发子实例,以及与所述当前父实例对 应的计数器对象;控制模块,用于依据所述计数器对象对所述至少两个并发子实例进行控制。
7.如权利要求6所述的装置,其特征在于,所述创建模块具体包括 生成子模块,用于生成所述计数器对象的编号;第一设置子模块,用于设置所述计数器对象的类型;所述计数器对象的类型包括并 发任务、并发分支或并发子流程;第二设置子模块,用于将所述计数器对象的对象个数和未完成个数的初始值都设置为 所述并发子实例的个数。
8.如权利要求7所述的装置,其特征在于,所述创建模块还包括初始化子模块,用于将所述计数器对象的父实例编号初始化为所述当前父实例的编号;第三设置子模块,用于设置所述计数器对象的创建时间和最后更新时间为当前时间。
9.如权利要求7所述的装置,其特征在于,所述控制模块具体包括 锁定子模块,用于当前并发子实例结束时,在数据库端锁定所述计数器对象;执行减一操作子模块,用于对所述计数器对象的未完成个数执行减一操作;判断子模块,用于判断执行减一操作之后的未完成个数是否为零;执行子模块,用于当所述判断模块的结果为是时,执行所述当前父实例的下一个环节;解锁子模块,用于当所述判断模块的结果为否时,解除所述计数器对象的锁定操作。
10.如权利要求9所述的装置,其特征在于,还包括保存模块,用于如果所述执行减一操作之后的未完成个数为零,则将所述计数器对象 的结束时间保存为当前时间。
全文摘要
本发明提供了一种工作流并发模式的控制方法及装置,所述方法包括创建当前父实例下的至少两个并发子实例,以及与所述当前父实例对应的计数器对象;依据所述计数器对象对所述至少两个并发子实例进行控制。本发明实施例中依据计数器对象来控制多个并发子实例的并发模式,可以使数据处理量显著变小。同时因为所有的并发子实例结束操作都需要获得对计数器对象的锁,所以所有的并发子实例在同时发出操作的情况下,在此处会变成串行处理,不存在并发冲突。
文档编号G06F9/46GK102043669SQ20101060177
公开日2011年5月4日 申请日期2010年12月22日 优先权日2010年12月22日
发明者吴旭春, 温良, 赵克强 申请人:中国农业银行股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1