一种业务流程调度的计算机设备、方法和装置制造方法

文档序号:6518998阅读:156来源:国知局
一种业务流程调度的计算机设备、方法和装置制造方法
【专利摘要】本发明涉及流程管理领域,公开了一种业务流程调度的计算机设备,方法和装置。业务流程调度方法包括:确定待调度的节点配置有事务分割点;根据所述事务分割点,创建异步任务,所述异步任务包含在待调度节点中所述事务分割点之后的待调度任务;使用第一线程执行包括流程中除异步任务之外的任务的事务,提交该第一线程执行的事务,以保障数据一致性;使用第二线程执行所述异步任务,实现任务节点之间的事务分割。
【专利说明】一种业务流程调度的计算机设备、方法和装置
【技术领域】
[0001]本发明涉及流程管理技术,特别涉及一种业务流程调度的计算机设备、方法和装置。
【背景技术】
[0002]工作流是一种由相关业务活动依时序或逻辑关系相互连接而成的业务流程。在业务开展过程中,文档、信息或任务依据组织规范在多个参与者之间传递、处理或执行。工作流技术的最主要特点是业务过程的部分或整体在计算机应用环境下的自动化,这些过程通常是指人与机器相结合的活动,如信息技术(IT, Information Technology)的应用程序以及工具交互的过程等。一个工作流包括一组任务(或活动)及它们的相互顺序关系,还包括流程及任务的启动和终止条件,以及对每个任务的描述。
[0003]工作流管理系统是指定义、创建以及执行工作流的系统,主要提供以下三个方面的功能支持:建造功能,对工作流过程及其组成活动定义和建模;运行控制功能,在运行环境中管理工作流过程,对工作流过程中的活动进行调度;运行交互功能,在工作流运行中,与用户(业务工作的参与者或控制者)及外部应用程序进行交互。
[0004]目前,工作流技术得到了广泛应用,比如,在企业业务中弓丨入工作流进行业务流程管理。业务流程管理(Business Process Management, BPM)相关的中间件套件,一般由建模工具(负责业务流程的建模),BPM引擎(负责业务流程的驱动),流程管理控制台,技术框架平台构成,能够嵌入到业务系统中,以对上层业务提供流程建模和引擎流程实例调度应用编程接口(Application Programminglnterface, API)的方式,帮助业务完成流程的编排部署和运行调度,为企业打造符合其业务发展的各种流程。
[0005]图1所示即是一个使用BPM编排的典型业务流程示意图,从同步信息到完成订单是个完整的开户流程,其中同步信息、同步价格至完成订单中的每一环节均为一个任务,每个任务上都配置了业务的服务,各个服务按照图1预先编排好的顺序依次执行。其中,每一个任务在流程调度执行时,对应一个节点。由于开户流程本身并不是本发明关心的问题,所以在此不作详细说明。
[0006]对于业务流程,客户的要求包括:
[0007]1.流程能够按照业务目标,在逻辑配置正确的前提下开始执行各个业务服务直到结束;
[0008]2.流程能够记录每一步的执行信息,供业务跟踪查询;
[0009]3.流程向前流转要与业务数据的变化保持数据一致性;
[0010]4.流程某个节点发生异常,则停在异常节点,并支持失败重试或人工干预,直到能够再次执行下去,且已经完成的业务服务调用不受影响;
[0011]5.当引擎进程异常终止,需要支持进程重启后从尚未完成的任务恢复执行;
[0012]6.流程调度性能要高。
[0013]现有技术的一种方案中,首先使用可视化的流程编排工具,完成业务流程定义的服务配置和顺序编排,BPM引擎基于上述编排好的流程定义,依据业务的输入和调用请求,完成流程的向前驱动直至完成。BPM引擎流转过程会持久化到数据库,且持久化过程中采用事务机制控制,保证数据一致性。为保证BPM平台和业务之间的事务被统一调度,则业务和BPM平台需要使用相同的事务框架,如Spring事务框架或其它类似的事务框架。业务发起调用BPM平台API的接口也需要配置声明式事务。声明式事务指采用在配置文件中声明的方式来处理事务。采用声明式事务的好处是改变事务管理时,只需在配置文件中重新配置,无需改变代码,重新编译。业务调用启动流程API,驱动流程向前流转的过程中,由于采用事务控制,如果中间某一节点发生异常,事务会回滚到事务开始点,而不能回滚到异常节点,也不支持从异常节点恢复执行。
[0014]因此,在业务流程调度过程中,现有技术无法满足业务和BPM平台既能够保持数据一致性,又能够保证出现异常时流程终止在异常节点,后续从异常节点重新恢复执行。

【发明内容】

[0015]本发明实施例提供一种业务流程调度的计算机设备、方法和装置,使业务和BPM平台能够保持数据一致性,又能够保证出现异常时流程终止在异常节点,恢复时从异常节点开始执行。
[0016]本发明实施例的技术方案是这样实现的:
[0017]第一方面,提供了一种执行流程调度的计算机设备,用于调度执行一个流程,所述流程包括至少一个节点,所述计算机设备包括:存储器和处理器,其中,所述存储器用于存储所述计算机设备的指令;所述处理器用于执行所述存储器中的指令以完成以下步骤:
[0018]确定待调度的节点配置有事务分割点;
[0019]根据所述事务分割点,创建异步任务,所述异步任务包含所述待调度的节点中所述事务分割点之后的待调度任务;
[0020]使用第一线程执行包含流程中除所述异步任务之外的任务的事务,提交所述第一线程执行的事务;
[0021]使用第二线程执行所述异步任务。
[0022]在第一方面的第一种可能的实现方式中,所述处理器进一步用于将所述异步任务放入所述第一线程所属的第一流程引擎进程的待调度任务队列中。
[0023]结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述将所述异步任务放入所述第一线程所属的第一流程引擎进程的待调度任务队列中包括:根据注册的事务提交事件回调监听,监听到所述第一线程执行的事务成功提交时,将所述异步任务放入所述第一流程引擎进程的待调度任务队列中。
[0024]第二方面,提供了一种业务流程调度方法,包括:
[0025]确定待调度的节点配置有事务分割点;
[0026]根据所述事务分割点,创建异步任务,所述异步任务包含所述待调度的节点中在所述事务分割点之后的待调度任务;
[0027]使用第一线程执行包含流程中除所述异步任务之外的任务的事务,提交所述第一线程执行的事务;
[0028]使用第二线程执行所述异步任务。[0029]在第二方面的第一种可能的实现方式中,在所述提交第一线程执行的事务后,进一步包括,将所述异步任务放入所述第一线程所属的第一流程引擎进程的待调度任务队列中。
[0030]结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,,所述方法进一步包括:注册事务提交事件回调监听;
[0031]所述将所述异步任务放入所述第一线程所属的第一流程引擎进程的待调度任务队列中具体包括:监听到所述第一线程执行的事务成功提交时,将所述异步任务放入所述第一流程引擎进程的待调度任务队列中。
[0032]在第二方面的第三种可能的实现方式中,在创建异步任务后进一步包括:将所述异步任务持久化;
[0033]所述提交第一线程执行的事务后进一步包括:将所述持久化的异步任务保存到数据库中。若所述异步任务未执行完毕,所述第二线程所属的第一引擎进程异常终止,第二流程引擎进程从所述数据库中获取所述异步任务,调度执行所述异步任务。
[0034]第三方面,提供了一种流程调度装置,用于执行一个流程,所述流程包括至少一个节点,所述流程调度装置包括:确定单元,创建单元,事务提交单元和执行单元;
[0035]所述确定单元,用于确定待调度的节点配置有事务分割点;
[0036]所述创建单元,用于根据所述确定单元确定的所述事务分割点,创建异步任务,所述异步任务包含在所述待调度的节点中所述事务分割点之后的待调度任务;
[0037]所述执行单元,用于使用第一线程执行包含流程中除所述异步任务之外的任务的事务,并提交所述第一线程执行的事务;使用第二线程执行所述异步任务。
[0038]第四方面,提供了一种计算机可读存储介质,其中保存有可被计算机处理器执行的指令,所述指令用于执行以下步骤:
[0039]确定待调度的节点配置有事务分割点;
[0040]根据所述事务分割点,创建异步任务,所述异步任务包含所述待调度的节点中在所述事务分割点之后的待调度任务;
[0041]使用第一线程执行包含流程中除异步任务之外的任务的事务,提交所述第一线程执行的事务;
[0042]使用第二线程执行所述异步任务。
[0043]可见,采用本发明实施例的技术方案,在流程节点中配置事务分割点,执行除异步任务外已调度任务的线程在执行完毕后提交事务。由于异步任务外的已调度任务遵循事务机制来提交,保障了数据一致性。使用新的线程调度事务分割点后的异步任务,实现了任务之间的事务分割。当出现异常时流程调度终止在异步任务,恢复时从异步任务开始执行。
【专利附图】

【附图说明】
[0044]图1为现有的一个使用BPM编排的典型业务流程示意图。
[0045]图2为一种采用事务分割点的事务处理流程示意图。
[0046]图3为本发明实施例的一种BMP业务应用系统架构图。
[0047]图4为本发明实施例中服务器的组成架构图。
[0048]图5为本发明实施例的一种流程引擎的模块示意图。[0049]图6是本发明实施例的一种流程调度方法的流程图。
[0050]图7是本发明另一实施例的流程调度方法的流程图。
[0051]图8是本发明实施例的流程调度装置的结构示意图。
【具体实施方式】
[0052]为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步地详细说明。
[0053]为实现事务执行不成功时,能回滚到中间某一节点,而不是回滚到事务的开始节点,可在流程中新增事务分割点(savepoint)到某一节点上,对每一个节点分别进行持久化。当BPM引擎驱动流程过程中遇到事务分割点时,将事务分割点前的事务先提交,再创建一个新的事务,来控制BMP流程后续节点的执行。
[0054]具体实现的方式以图2如示的场景为例来说明:业务APIl,BPM调度API和业务API2被配置在一个声明式事务Tl中,Tl是最外层事务。其中,业务APII,业务API2为业务的执行方法,BPM调度API为平台的调度方法。BPM调度API会预先配置内层事务T2,T2会自动加入业务事务Tl中。在BPM调度API中预先配置有事务分割点,根据该事务分割点,可以提前提交内层事务Τ2,并为未完成的BPM调度API的剩余部分流程新建内层事务Τ3,由Τ3控制BPM流程的后续节点的流转。由于采用统一事务管理,Τ2提交的同时会将Tl也提前提交,而Τ3无法管理到业务ΑΡΙ2,业务ΑΡΙ2失去了事务管理,会导致数据不一致。因此,该方案虽然能够将事务回滚到异常节点,但不能保持数据一致性。为解决该问题,本发明的实施例通过先提交除事务分割点之后的待调度任务之外的任务所组成的事务,然后使用新的线程来执行流程中事务分割点后的待调度任务,使业务和BPM平台能够保持数据一致性,又能够保证出现异常时流程终止在配置有事务分割点的异常节点,恢复时从该异常节点继续执行。
[0055]为便于理解,对流程、事务、任务、线程和进程这些术语进行说明。流程、事务、任务属业务层面的表述,而线程、进程是机器执行层面的表述。流程对应整个业务,可包含多个任务。流程被一个进程管理。一个事务由一个线程来执行,一个线程可包含多段事务。一个事务可包含一个或多个任务;一个任务在被线程执行时也称为一个节点。任务是可以分割的。一个流程引擎中运行有一个进程,一个进程可包含多个线程,线程被进程所驱动。
[0056]图3为本发明实施例的一个BMP业务应用系统架构图。业务系统301用于完成业务流程的编排部署和运行调度。业务系统可以是集群系统,该集群系统是由互相连接的计算机组成的并行或分布式系统。作为一种实施方式,业务系统301可包括至少一个服务器,例如包括服务器a302、服务器b307。服务器a302具体可包括业务模块303和BPM引擎304,服务器b与服务器a有相似的结构。业务模块303用于接收用户的业务请求,向BPM引擎304发起业务流程调度的请求。BPM引擎304用于从数据库308读取流程定义,驱动和调度流程。数据库308存储流程定义及相关的数据。
[0057]业务系统301中的服务器还可以与本地的业务流程306或第三方业务系统(图未示出)进行交互,调度其中的服务。业务流程306包含至少一个任务。如图3所示的例子,业务流程306包括任务1,任务2,直至任务η,η为大于2的自然数。业务系统301使用BPM建模工具305抽象出业务流程306,生成流程定义并存储到数据库308中。其中,在流程定义中配置流程任务的事务分割点。流程定义中包含流程中各任务对应的节点、节点之间的关系,输入输出数据,事务分割点等。该流程定义具体可用流程图,或静态配置文件表示,存储在数据库308或文件系统中。当服务器中的BPM引擎收到业务调度请求,则会读取该流程定义,进行流程调度。若调度到的节点包含有事务分割点,为事务分割点之后的待调度任务创建异步任务。异步任务流程调度具体包括:除事务分割点之后的待调度任务以外的任务组成一个事务,由一个线程执行;当执行该事务的线程结束,相对应的事务成功提交后,该事务分割点之后的待调度任务,即异步任务,由另一线程调度执行。同时,该异步任务会被正式写入数据库,以备执行该异步任务的进程故障时,其他服务器中的BPM引擎进程可以获取该异步任务。
[0058]当业务系统301的异步任务流程调度发生异常,则BPM引擎304中执行该异步任务的线程停留在发生异常的节点不再继续调度执行。若是执行异步任务的线程异常,BPM引擎会从异步任务调度线程池中再获取一个空闲线程执行该异步任务,重新执行异步任务。若是当前BPM引擎进程异常终止,则业务系统中的其他服务器,如服务器b,的BPM引擎进程会监控到这一异常终止或收到服务器a中BPM引擎进程异常终止的通知消息,根据接管策略从数据库中获取未完成的异步任务,把异常终止的BPM引擎进程正在执行的任务恢复继续执行。
[0059]图4是本发明实施例提供的业务系统中服务器的示意性框图。本实施例中,服务器可以为一计算机设备,具体包括一基于处理器的计算机。如图4所示,服务器400可包括总线410,处理器402,存储器404,输入输出接口 406,通信接口 408。总线410可包括一通路,在计算机各个部件之间传送信息。处理器402用于处理信息,执行指令或操作,具体可以是一个通用中央处理器(CPU),微处理器,特定应用集成电路application-specificintegrated circuit (ASIC),或一个或多个用于控制本发明方案程序执行的集成电路。服务器还包括一个或多个存储器404,用于存储信息和指令,存储器可以是只读存储器read-only memory (ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器random access memory (RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是磁盘存储器。这些存储器通过总线410与处理器402相连接。
[0060]输入输出接口 406可包括输入装置或输出装置。输入装置用以接收用户输入的数据和信息,例如键盘,鼠标、摄像头,扫描仪,光笔,语音输入装置,触摸屏等。输出装置用以允许输出或显示信息给用户,包括显示屏,打印机,扬声器等。计算设备还包括一个网络接口 408,该网络接口使用任何收发器一类的装置,以便与其他设备或通信网络通信,如以太网,无线接入网(RAN),无线局域网(WLAN)等。处理器402也能通过总线410与输入输出接口 406,网络接口 408相连接。
[0061]存储器404保存有执行本发明方案的部件的程序指令,包括业务模块410,BPM引擎412的程序。存储器404中还可以保存操作系统和其他应用程序。处理器402用于读取并执行存储器404中的程序或者指令,并在执行的过程中通过网络接口 408与其它设备进行通信。具体地,当处理器402执行存储器404中的指令时,处理器402可执行图6中所示的步骤601-604。
[0062]图5为流程引擎的结构示意图,该流程引擎即图4中的BPM引擎412。如图5所示,流程引擎510包括流程解析器511,任务管理器512和任务执行器513。流程解析器511用于确定待调度的节点配置有事务分割点。具体地,流程解析器511读取数据库308中的流程定义,并对流程定义进行解析,确定该待调度的节点中是否配置有事务分割点。在调度过程中,当在待调度的节点中发现预先设置的事务分割点时,任务管理器512在当前被调度的流程节点的执行线程中创建异步任务。该异步任务包含流程定义中在事务分割点之后的未调度执行的任务。该异步任务不在当前线程中执行,而是在当前线程结束后,由另一线程,即第二线程,调度执行。任务管理器512还将创建的异步任务持久化,准备写入数据库。
[0063]任务管理器512还会注册声明式事务的事务提交事件回调监听(callback)。事务提交事件回调监听指监听到该事务提交事件,就调用预先注册的回调方法。该事务提交事件回调监听作用在于保证异步任务的调度发生在事务分割点前的事务提交之后。
[0064]执行当前被调度的流程节点的线程被称为当前线程。一个线程执行完毕,会返回到外层的声明式事务;线程返回表示本线程结束,新的线程可以启动。当前线程结束,则该线程对应的最外层的声明式事务会随着线程返回而提交。由于已预先注册了事务提交事件回调监听,任务管理器512会在监听到外层事务成功提交时,按预先注册的回调方法,把已创建的异步任务放入线程共享的所属的BPM引擎进程的待调度任务队列515中。任务管理器512在当前线程结束时,还会把该异步任务同步写入到数据库中。任务队列515中的任务数据与数据库中的任务数据是相同的,不同之处在于任务队列是临时存于内存中,数据库中数据可持久保存。异步任务调度线程池中的一个线程会从该任务队列中获取异步任务进行调度,调度成功后会把该异步任务从数据库中删除。
[0065]任务执行器513用于使用第二线程执行异步任务。异步任务调度线程池中预先申请有若干个空闲线程等待启用。该第二线程是从异步任务调度线程池中获取的。
[0066]如果异步任务调度过程中,执行该异步任务的第一 BPM引擎进程发生异常,则另一服务器中的第二 BPM引擎进程会监控到第一 BPM引擎进程出现异常或收到第一 BPM引擎进程异常终止的通知消息,第二 BPM引擎进程从数据库中获取发生异常的BPM引擎进程未完成的异步任务,由第二 BPM引擎的任务执行器继续执行该异步任务。
[0067]在本实施例中,在流程节点中配置事务分割点,使执行除异步任务之外的已调度任务的线程在执行完毕后自动返回到外层的事务。由于外层的事务遵循事务机制来提交,保障了数据一致性。使用新的线程调度事务分割点后的异步任务,实现任务节点之间的事务分割,当出现异常时流程调度终止在异步任务,恢复时从异步任务开始执行;同时通过异步任务调度线程池的调度提供了高性能的流程执行方案。
[0068]图6是本发明一个实施例提供的流程调度方法的流程图。以下描述的方法可以被图4所示的服务器,或图5所示的流程引擎来执行。
[0069]在601步骤,流程引擎确定待调度的节点配置有事务分割点。
[0070]使用BPM建模工具构建流程图时,在流程的节点之间或某一节点中预先配置有事务分割点。事务分割点的配置被格式化存储在流程定义中。假如,流程定义符合业务流程建模与标注(Business Process Model and Notation, BPMN)规范时,则使用活动(Activity),如业务任务(Service Task)的扩展属性进行事务分割点存储。
[0071]例如:〈startEvent id=//startSimple//name=//Start//uf 1: asynExecute=//true///>
[0072]“ asynExecute=〃true〃 ”表示该节点需异步调度,配置有事务分割点。
[0073]流程引擎在调度过程中,根据流程定义发现待调度的某一节点中配置有事务分割点。以使用一段XML描述来定义事务分割点为例,该事务分割点的XML描述可以在节点流程定义描述的开始或中间,流程引擎均可解析确定出该节点中配置有事务分割点。
[0074]在步骤602,根据事务分割点,流程引擎创建异步任务。该异步任务包含流程定义中待调度节点中在事务分割点之后的待调度任务。
[0075]创建异步任务后,还可以对该异步任务持久化,具体为缓存异步任务在数据库保存接口中,准备写入数据库。
[0076]在步骤603,流程引擎使用第一线程执行包含流程中除异步任务之外的任务的事务,完成后,提交该事务。
[0077]第一线程结束,在第一线程中包含了流程中除异步任务以外任务的事务被执行完毕提交。提交的事务包括事务分割点之前的已调度执行的任务,其中可以包括事务分割点之后的,除异步任务以外的外层事务中的任务节点。
[0078]第一线程执行的事务提交时,可将异步任务放入第一线程所属的第一流程引擎进程的待调度任务队列中。第一流程引擎进程具体可以是BMP引擎运行的进程。第一线程执行的事务提交后,异步任务还被写入到数据库中。
[0079]在步骤604,流程引擎使用第二线程执行所述异步任务。
[0080]第一流程引擎进程采用一个新线程,即第二线程,执行该异步任务,继续调度流程。该异步任务处理成功后,流程引擎删除数据库中保存的该异步任务。
[0081]若异步任务未执行完毕,第二线程异常终止,则第一流程引擎进程重新从异步任务调度线程池中获取一个空闲线程,即第三线程,使用第三线程调度从待调度任务队列中取出的异步任务,重新开始执行该异步任务。若第一流程引擎进程异常终止,则第二流程引擎进程会监控到第一流程引擎异常终止或收到第一流程引擎进程异常终止的通知消息,从数据库中获取所述未完成的异步任务,分配线程调度执行所述异步任务。
[0082]本发明的实施方式中,在流程节点中配置事务分割点,对于异步任务采用不同的线程调度,即异步线程调度,使执行配置有事务分割点的节点的线程在第一线程执行完毕后自动返回到外层的事务。由于外层的事务遵循事务机制来提交,保障了数据一致性。进一步地,使用第二线程驱动事务分割点后的后续流程流转,实现任务节点之间的事务分割,当出现异常时流程调度终止在异步任务,恢复时从异步任务开始执行;同时通过异步任务调度线程池的调度提供了高性能的流程执行方案。
[0083]图7是本发明一个实施例提供的流程调度具体过程的流程图。本实施例的步骤执行,以图2中的业务流程包括业务APIl,BPM调度API和业务API2为例进行说明,其中BPM调度API中设置有事务分割点。
[0084]步骤701,BPM引擎的进程发起流程调度。
[0085]步骤702,BPM引擎启动流程定义中预先配置的事务。在本实施例中,BPM引擎启动的事务Tl配置包含有业务API I,BPM调度API和业务API2,事务Tl后续也被称为外层事务。事务Tl由一个线程来执行,后续也称为当前线程。
[0086]一般地,事务包含一个或多个任务,该事务由一个线程执行,线程被BPM引擎进程所驱动。一个任务在被线程执行时也称之为一个节点。
[0087]步骤703,BPM引擎确定待调度节点是否包含事务分割点,如果否,则转至步骤704,如果是,则转至步骤705。[0088]在本实施例中,BPM调度API中预先设置有一个事务分割点。
[0089]步骤704,待调度节点不包含事务分割点时,BPM引擎在当前线程中继续执行下一节点。当前线程即执行当前被调度的流程节点的线程,即图6实施例中的第一线程。
[0090]步骤705,BPM引擎在待调度节点中发现事务分割点时,在当前线程中创建异步任务,并持久化。在本实施例中,该异步任务包含BPM调度API在事务分割点之后的待调度任务。本实施例中,持久化(Persistence)具体为缓存异步任务在数据库保存接口中。持久化的作用是把数据,如内存中的对象,存储在关系型的数据库,磁盘文件、XML数据文件中。
[0091]异步任务的设置可以具体为一段XML描述,如bpmn2extn:nextFlowExecutionMode="ASYNCHR0N0US_C0NTINUE"。
[0092]步骤706,注册事务提交事件回调监听。在回调监听的注册代码中定义有异步任务的线程启动方法。事务提交事件回调监听保证异步任务的线程启动在当前线程的事务提交之后。该事务提交事件回调监听的注册可以在步骤705之后,也可以预先在流程定义中配置。
[0093]步骤707,当前线程执行完毕,外层事务Tl随着当前线程返回而提交。提交的事务Tl包含业务API1,BPM调度API中事务分割点之前的已调度任务,以及业务API2。BPM调度API中事务分割点之后的待调度任务,即异步任务,则没有被执行提交。
[0094]步骤708,按照已注册的事务提交事件回调监听的回调方法,在外层事务Tl提交的时候,异步任务被放入当前流程引擎进程待调度的任务队列中。该任务队列可由异步任务调度线程池中的线程来调度。该异步任务调度线程池中预先申请有若干个空闲线程等待启用。
[0095]步骤709,外层事务Tl提交时,异步任务还被写入数据库。写入数据库后,该异步任务可被持久保存。步骤709与步骤708的执行可不分先后顺序。
[0096]步骤710,监测当前流程引擎进程是否异常终止,若进程异常终止,执行步骤711,若正常运行,执行步骤712。
[0097]步骤711,第二流程引擎进程从数据库获取异常终止的流程引擎进程未完成的异步任务,分配流程继续调度,完成后转至步骤713。该第二流程引擎进程会主动监控是否有其他流程引擎进程异常终止,或第二流程引擎进程收到第一流程引擎进行异常终止的通知消息。
[0098]步骤712,当前BPM引擎使用新线程(即第二线程)执行异步任务,继续调度。该新的线程是从异步任务调度线程池中获取的。若异步任务未执行完毕,执行异步任务的线程异常终止,BPM引擎从异步任务调度线程池中再取出一个空闲线程,即第三线程,执行所述异步任务。
[0099]步骤713,异步任务执行完成。数据库中的异步任务被删除。
[0100]基于上述流程调度方法,图8为本发明实施例提供的一种流程调度装置的组成结构示意图。如图8所示,该流程调度装置包括:确定单元801,创建单元803,执行单元805。
[0101]确定单元801,用于确定待调度的节点配置有事务分割点;
[0102]创建单元803,用于根据确定单元801确定的所述事务分割点,创建异步任务,所述异步任务包含在待调度的节点中所述事务分割点之后的待调度任务;
[0103]执行单元805,用于使用第一线程执行包含流程中除异步任务以外的任务的事务,并提交所述第一线程执行的事务;使用第二线程执行所述异步任务。
[0104]该执行单元805进一步用于:将创建单元创建的异步任务放入所述第一线程所属的第一流程引擎进程的待调度任务队列中。
[0105]该执行单元805还进一步用于根据注册的事务提交事件回调监听,监听到所述第一线程执行的事务成功提交时,将所述异步任务放入所述第一流程引擎进程的待调度任务队列中。
[0106]执行单元805进一步用于将所述异步任务持久化;在所述提交第一线程执行的事务后,将所述持久化的异步任务保存到数据库中,以便于当所述异步任务未执行完毕,所述第二线程所属的第一流程引擎进程异常终止时,第二流程引擎进程从所述数据库中获取所述异步任务,调度执行所述异步任务。
[0107]确定单元801是根据存储在所述数据库的流程定义确定所述事务分割点。
[0108]可见,采用本发明实施例的技术方案,流程调度装置发现在流程节点中配置有事务分割点时,创建异步任务,对于异步任务采用异步线程调度。执行配置有事务分割点的节点的线程在该线程执行完毕后,遵循事务的机制来提交,保障了数据一致性。进一步地,使用新的线程驱动事务分割点后的后续流程流转,实现任务节点之间的事务分割。
[0109]上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
[0110]本文中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种流程调度装置,用于执行一个流程,所述流程包括至少一个节点,所述流程调度装置包括:确定单元,创建单元和执行单元;所述确定单元,用于确定待调度的节点配置有事务分割点;所述创建单元,用于根据所述确定单元确定的所述事务分割点,创建异步任务,所述异步任务包含在所述待调度的节点中所述事务分割点之后的待调度任务;所述执行单元,用于使用第一线程执行包含流程中除异步任务之外的任务的事务,并提交所述第一线程执行的事务;使用第二线程执行所述异步任务。
2.根据权利要求1所述的流程调度装置,其特征在于,所述执行单元进一步用于:将所述异步任务放入所述第一线程所属的第一流程引擎进程的待调度任务队列中。
3.根据权利要求2所述的流程调度装置,其特征在于,所述执行单元用于将所述异步任务放入所述第一线程所属的第一流程引擎进程的待调度任务队列中所述执行单元包括:所述执行单元用于根据注册的事务提交事件回调监听,监听到所述第一线程执行的事务成功提交时,将所述异步任务放入所述第一流程引擎进程的待调度任务队列中。
4.根据权利要求2或3所述的流程调度装置,其特征在于,所述执行单元进一步用于在所述异步任务未执行完毕,所述第二线程异常终止时,从所述待调度任务队列中取出所述异步任务,使用第三线程执行所述异步任务。
5.根据权利要求1所述的流程调度装置,其特征在于,所述执行单元进一步用于将所述异步任务持久化;在所述第一线程执行的事务提交后,将所述持久化的异步任务保存到数据库中,以便当所述异步任务未执行完毕,所述第二线程所属的第一流程引擎进程异常终止时,第二流程引擎进程从所述数据库中获取所述异步任务,调度执行所述异步任务。
6.根据权利要求1-5中任一权利要求所述的流程调度装置,其特征在于,所述事务分割点存储在数据库的流程定义中。
7.根据权利要求1-6中任一权利要求所述的流程调度装置,其特征在于,所述事务是声明式事务。
8.—种业务流程调度方法,所述流程包括至少一个节点,所述方法包括:确定待调度的节点配置有事务分割点;根据所述事务分割点,创建异步任务,所述异步任务包含所述待调度的节点中在所述事务分割点之后的待调度任务;使用第一线程执行包含流程中除所述异步任务之外的任务的事务,提交所述第一线程执行的事务;使用第二线程执行所述异步任务。
9.根据权利要求8所述的方法,其特征在于,在所述提交第一线程执行的事务后,进一步包括,将所述异步任务放入所述第一线程所属的第一流程引擎进程的待调度任务队列中。
10.根据权利要求9所述的方法,其特征在于,所述方法进一步包括:注册事务提交事件回调监听;所述将所述异步任务放入所述第一线程所属的第一流程引擎进程的待调度任务队列中具体包括:监听到所述第一线程执行的事务成功提交时,将所述异步任务放入所述第一流程引擎进程的待调度任务队列中。
11.根据权利要求9或10所述的方法,其特征在于,所述方法进一步包括:在所述异步任务未执行完毕,所述第二线程异常终止时,从所述待调度任务队列中取出所述异步任务,使用第三线程执行所述异步任务。
12.根据权利要求8所述的方法,其特征在于,在创建异步任务后进一步包括:将所述异步任务持久化;所述提交第一线程执行的事务后进一步包括:将所述持久化的异步任务保存到数据库中。
13.根据权利要求12所述的方法,其特征在于,所述方法进一步包括:若所述异步任务未执行完毕,所述第二线程所属的第一引擎进程异常终止,第二流程引擎进程从所述数据库中获取所述异步任务,调度执行所述异步任务。
14.根据权利要求8-13中任一权利要求所述的方法,其特征在于,所述事务分割点存储在数据库的流程定义中。
15.一种执行流程调度的计算机设备,其特征在于,所述计算机设备用于执行一个流程,所述流程包括至少一个节点,所述计算机设备包括:存储器和处理器,其中:所述存储器用于存储所述计算机设备的指令;所述处理器用于执行所述存储器中的指令,以完成以下步骤:确定待调度的节点配置有事务分割点;根据所述事务分割点,创建异步任务,所述异步任务包含所述待调度的节点中所述事务分割点之后的待调度任务;使用第一线程执行包含流程中除`所述异步任务之外的任务的事务,提交所述第一线程执行的事务;使用第二线程执行所述异步任务。
16.根据权利要求15所述的计算机设备,其特征在于,所述处理器进一步用于根据注册的事务提交事件回调监听,监听到所述第一线程执行的事务成功提交时,将所述异步任务放入所述第一流程引擎进程的待调度任务队列中。
17.根据权利要求16所述的计算机设备,其特征在于,所述处理器进一步用于在所述异步任务未执行完毕,所述第二线程异常终止时,从所述待调度任务队列中取出所述异步任务,使用第三线程执行所述异步任务。
18.根据权利要求15所述的计算机设备,其特征在于,所述处理器进一步用于:将所述异步任务持久化;在所述第一线程执行的事务提交后,将所述持久化的异步任务保存到数据库中;以便在所述异步任务未执行完毕,所述第二线程所属的第一流程引擎进程异常终止时,第二流程引擎进程从所述数据库中获取所述异步任务,调度执行所述异步任务。
【文档编号】G06Q10/06GK103593236SQ201310567968
【公开日】2014年2月19日 申请日期:2013年11月14日 优先权日:2013年11月14日
【发明者】周俊杰, 魏玛那·娜拉西马哈·摩西, 乌帕萨娜·哈弗里 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1