工做流引擎是指workflow做为应用系统的一部分,并为之提供对各应用系统有决定做用的根据角色、分工和条件的不一样决定信息传递路由、内容等级等核心解决方案。工做流引擎是为工做流实例提供执行环境,它是工做流管理系统的核心服务,所以,工做流引擎设计的好坏直接关系到工做流的执行效率与可扩展性。设计模式
工做流引擎是工做流管理系统中为过程实例和活动实例提供运行环境的服务软件,是整个工做流管理系统的核心,工做流引擎的主要功能有:并发
(1)、解释流程定义异步
(2)、建立流程实例(人工建立、自动建立;自动建立又包括自动定时建立和自动周期建立)分布式
(3)、控制过程实例(流程实例的建立、运行、挂起、中断、恢复、终止等)工具
(4)、控制活动实例(活动实例的建立、运行、挂起、中断、恢复、终止等)spa
(5)、控制工做任务(工做任务的建立、运行、挂起、恢复、终止等)线程
(6)、与外部资源交互完成各项活动设计
(7)、维护工做流控制数据和工做流相关数据3d
工做流系统在实际应用分为三个阶段:模型定义、模型实例和模型执行。日志
模型定义:利用流程建模工具设计用户业务流程。
模型实例:定义的模型导入到运行库,并作好状态初始化,并分配每一个活动执行所需的资源(设备、参与者等)。
模型执行:根据运行库的状态,条件的断定,推进流程的状态跃迁,并完成之,同时对过程与活动的执行状况进行监控与跟踪。
总的来讲,引擎就是一台状态机,里面充斥了各类工做流对象的瞬时状态,状态之间的变迁也会相互影响,而且提供了接口让外界的系统了解里面的工做流对象的当前状态。
工做流对象包括3种:过程,活动,任务。每一个对象的状态有所不一样,各个对象之间的状态跃迁会相互之间有所影响。
工做对象中的过程实例、活动实例、工做任务之间的包含依赖关系以下:
过程实例的基本状态能够归纳为以下六种:初始(Initiated)、运行(Running)、挂起(Suspend)、中断(Abort)、终止(Terminate)、完成(Complete)。
这几种状态之间存在着基本的状态转换,以下图所示:
发生状态转换的缘由多是因为工做流引擎响应外部的特殊命令(如某个改变状态的外部事件到来),也多是由于知足了过程定义中指定的状态转换条件(如一个时间依赖的状态变换到达了规定的时间,或者数据依赖的状态变换知足了数值的要求)、基本的状态介绍以下:
(1)、初始(Initiated)
一个过程实例已经被建立,包括建立一些相关过程状态数据和工做流相关数据,如分配该流程实例的ID,取得过程的初始相关数据及激活条件等。可是该过程实例尚未收到并响应一个启动过程实例的事件。处于初始状态的过程实例必定得经过启动过程事件(如建立开始活动、将过程初始相关数据赋予开始活动以及启动开始活动等行为事件)来开始整个过程实例的运行。
状态转换:合适的条件下,初始状态能够转换变迁到其余的状态。
A、初始==》运行
过程实例建立完成后,接受到启动过程实例的事件,则过程实例将变迁到运行状态,接着能够建立合适的活动实例。
B、初始==》删除
处于初始状态下的过程实例,此时还没建立活动实例,当接受到用户删除的请求后,自动删除本过程实例,及相关业务数据。
(2)、运行(Running)
过程实例已经激活启动执行,当处于运行状态下的过程实例必须知足至少一个活动实例处于运行状态。当知足条件的状况下,过程实例所包含的初始状态任何一个活动实例均可以被激活启动运行。
状态转换:不一样状况下,运行状态能够转换变迁到其余的状态。
A、运行==》挂起
当处于运行状态下的过程实例被有权限的用户发出挂起事件,或因为工做流引擎自身处理异常致使发出过程实例挂起事件,有流程引擎将过程实例的状态变动为挂起状态。挂起过程实例将致使全部处于运行状态的活动实例和处于运行、领用状态下的工做任务都将被挂起。
B、运行==》终止
过程实例没有正常结束,而是在运行中被有操做权限的用户终止,终止运行状态的过程实例将致使全部未完成的活动实例和工做任务消失。
C、运行==》完成
当全部的活动实例都正常结束时,过程实例发现除告终束活动外再没有其余能够执行的活动,则过程实例进入结束活动,调用结束活动的完成方法,过程实例进入完成状态。
(3)、挂起(Suspend)
过程实例处于一种不活动的状态,在该状态下,不能启动和操做任何活动实例和工做任务,除非过程实例已经过一个恢复过程实例事件或重启动事件返回到运行状态。
致使过程实例挂起的基本缘由有以下状况:
(1)、工做流引擎的主动挂起:即运行到某个时刻,工做流引擎在导向下一个活动时出现异常,而且不能跳转到可执行的行为时,便主动将过程实例挂起。
(2)、工做流引擎的被动挂起:即运行到某个时刻,当有操做权限的用户因为某种缘由发出一个挂起事件给工做流引擎,工做流引擎会先记录下该命令,等全部活动实例都结束、终止、挂起时,工做流引擎便当即将过程实例挂起而不去理会下一步如何流转。
上述两种过程实例的挂起,都将同时把过程实例中处于运行状态的活动实例和处于运行、领用状态下的工做任务挂起,这种活动实例或工做任务的挂起与过程实例在挂起前已经被挂起的活动实例或工做任务在恢复时将经过一个最近状态改变事件属性来加以区别。若是在过程实例挂起前活动实例或工做任务已经被挂起,则在挂起时只是修改过程实例的最近状态改变时间。在进行恢复时也是经过比较活动实例或工做任务和过程实例的最近状态改变事件来进行恢复:若是过程实例和活动实例或工做任务的最近状态改变事件一致,则在恢复过程时将活动实例或工做任务同时进行恢复;若是不一致,则只是恢复过程实例,而活动实例或工做任务则继续保持挂起状态。
状态转换:不一样状况下,挂起状态能够转换变迁到其余的状态。
A、挂起==》运行
工做流引擎收到恢复命令。如由于有权限的用户修改了模版或者从新分配工做任务后,又恢复运行。恢复过程实例时将同时恢复过程实例挂起时被同时挂起的活动实例和工做任务。
B、挂起==》中断
工做流引擎收在处理过程当中发现了过程实例的挂起时间超过过程实例的生存周期,便从挂起异常状况下直接中断过程实例。中断一个被挂起的过程实例将使全部未完成的活动实例和工做任务消失。
C、挂起==》终止
处于挂起状态下的过程实例接受到有权限的用户发出的终止过程的命令,工做流引擎自动执行将过程实例转换到终止状态。 终止一个被挂起的过程实例将使全部未完成的活动实例和工做任务消失。
(4)、中断(Abort)
过程实例处于中断状态下,说明过程实例已经结束。只有在过程实例处于挂起的状态下,当工做流引擎在处理过程当中发现过程实例的挂起时间超过过程实例的生存周期,便从挂起异常状况下执行中断事件,结束过程实例。中断状态也是状态转换中的最后一个状态,今后再也不有状态转换行为发生。
(5)、终止(Terminate)
在正常结束以前该过程实例的执行已被结束。内部的操做(如错误登记、数据恢复、发出终止事件等)执行终止结束过程实例。终止状态也是状态转换中的最后一个状态,今后再也不有状态转换行为发生。终止一个过程实例将终止该过程实例全部未完成的活动实例和工做任务。
(6)、完成(Complete)
过程实例已经知足告终束条件,被正常结束,并记录内部的日志数据或统计数据。全部的行为按照业务流程的要求流转完毕,即已经彻底或者基本达到了过程实例生成者的设计目的,完成状态是状态转换中的最后一个状态,今后再也不有状态转换事件发生。只有处于运行状态的过程实例发现除告终束行为外再没有别的可执行的活动时,建立结束活动实例并调用其完成方法后获得的状态才是完成状态。这意味这该结束不是因为任何强迫行为所致使的结果,而是活动实例和工做任务按照预约的方案进行正常的状态转换所造成的结果。
活动实例的基本状态能够归纳为以下:初始(Initiated)、运行(Running)、挂起(Suspend)、中断(Abort)、终止(Terminate)、完成(Complete)。
这几种状态之间存在着基本的状态转换,以下图所示:
(1)、初始(Initiated)
活动实例已经被建立,处于初始状态状况下,可是尚未符合开始激活启动运行的条件,即尚未建立工做任务。
状态转换:合适的条件下,初始状态能够转换变迁到其余的状态。
A、初始==》运行
当活动实例中至少一个工做任务已经被建立而且知足激活启动运行的条件,即至少一个工做任务处于运行或领用状态下,活动实例状态将自动变迁为运行状态。
B、初始==》删除
当接受到终止过程实例的命令后,处于初始状态的活动实例将自动被引擎删除。
(2)、运行(Running)
活动实例中至少一个工做任务已经建立而且激活启动运行(至少一个工做任务状态处于运行或领用状态)。若是是人工活动则分配给指定的活动实例参与者来处理,若是是自动活动则分配给任务调度引擎来处理。此时的活动实例的状态为运行。
针对人工活动的活动实例与参与者之间的关系有两种:独占式和分布式。独占式是指活动实例的工做任务可由活动实例参与者中的任一个独立完成,而且一旦其中的一个参与者处理后,其余参与者便不能再处理。分布式是指活动实例的工做任务被复制给活动实例的全部参与者,全部参与者所有处理后才能有效。
状态转换:合适的条件下,运行状态活动实例能够转换变迁到其余的状态。
A、运行==》挂起
当处于运行状态下的活动实例接受到用户发出的挂起事件时,引擎自动将活动实例的状态变迁为挂起状态。该挂起事件将致使该活动实例的全部处于运行或领用状态下的工做任务被挂起。这种工做任务的挂起和在活动实例执行挂起时已经被挂起的工做任务,在活动实例执行恢复时经过使用一个最近状态改变事件属性来进行区别对待;若是工做任务的最近状态改变时间和活动实例的最近状态改变时间相同,则代表该工做任务是因为活动实例挂起而被挂起的,在活动实例恢复时对其进行恢复;若是活动实例和工做任务的最近状态改变时间不一样,则代表在活动实例挂起以前此工做任务已经被挂起,在恢复时不对其进行恢复。
B、运行==》终止
当处于运行状态下活动实例接受到用户发出的终止事件后,引擎自动将活动实例的状态变迁为终止状态。终止活动实例将致使全部未完成的工做任务消失。
C、运行==》完成
当处于运行状态下活动实例接受到工做任务处理完成的命令后,将正常结束完成本活动实例。
(3)、挂起(Suspend)
活动实例处于一种不活动的状态,在该状态下,不能启动和操做任何本活动下的工做任务,除非活动实例已经过一个恢复活动实例事件或重启动事件返回到运行状态。
状态转换:不一样状况下,挂起状态能够转换变迁到其余的状态。
A、挂起==》运行
工做流引擎收到恢复活动实例命令。恢复活动实例时将同时恢复活动实例挂起时被同时挂起的工做任务。
B、挂起==》中断
工做流引擎在自动处理过程当中发现此活动实例的挂起时间超过活动实例的生存周期,便从挂起异常状况下中断活动实例。中断一个被挂起的活动实例将使此活动下全部未完成的工做任务消失。只有这种状况下才能从挂起到中断的状态变迁。
C、挂起==》终止
处于挂起状态下的活动实例接受到有权限的用户发出的终止活动的命令,工做流引擎自动执行将活动实例转换到终止状态。终止一个被挂起的活动实例将使此活动下全部未完成的工做任务消失。
(4)、中断(Abort)
活动实例处于中断状态下,说明活动实例已经结束。只有在活动实例处于挂起的状态下,工做流引擎在自动处理过程当中发现活动实例的挂起时间超过活动实例的生存周期,便从挂起异常状况下执行中断事件,结束过程实例。中断状态也是状态转换中的最后一个状态,今后再也不有状态转换行为发生。
(5)、终止(Terminate)
活动实例的执行被异常结束,即活动实例的参与者没有所有提交工做任务便被终止。活动实例不容许用户对其直接进行终止,只有当有权限的用户在终止过程实例时而被该过程实例中的活动实例处于初始、挂起、运行状态时候,才能够对其进行终止。终止处于挂起、运行状态的活动实例将致使活动实例的多有未完成的工做任务终止。终止状态也是状态转换中的最后一个状态,今后再也不有状态转换行为发生。终止一个活动实例将终止该活动实例全部未完成的工做任务消失。
(6)、完成(Complete)
活动实例的执行正常结束,而且引擎将取得并评估该活动的后继条件,以决定后续行为。即该活动实例的全部参与者都被成功提交了各自的工做任务。完成状态是活动实例变化中最后一个状态。
工做任务的基本状态能够归纳为以下:初始(Initiated)、运行(Running)、领用(Receive)、挂起(Suspend)、拒绝(Reject)、终止(Terminate)、完成(Complete)。
这几种状态之间存在着基本的状态转换,以下图所示:
(1)、初始(Initiated)
工做任务已经被建立,可是尚未知足激活启动运行的条件。
状态转换:以下状况可致使工做任务从建立变迁到另外的状态:
A、初始==》运行
当工做任务知足被激活启动运行的条件后,状态将自动变迁为运行状态。
B、初始==》删除
工做流引擎接受到终止过程实例(或终止活动实例)的命令后,将自动清除处于初始状态的工做任务。
(2)、运行(Running)
工做任务已经知足被激活运行启动的条件,工做任务处于运行状态。
状态转换:合适的条件下,运行状态工做任务能够转换变迁到其余的状态。
A、运行==》挂起
当处于运行状态下的工做任务接受到用户发出的挂起事件时,引擎自动将工做任务的状态变迁为挂起状态。
B、运行==》领用
当工做任务的参与者打开了分属于本身的工做任务,此时工做任务将自动变迁为领用状态。
C、运行==》终止
当处于运行状态下工做任务接受到用户发出的终止事件后,引擎自动将工做任务的状态变迁为终止状态。只有活动实例被终止状况下才可能终止工做任务,用户不能本身终止工做任务。
(3)、领用(Receive)
当处于领用状态的工做任务说明已经被参与者打开过,则说明工做任务已经 被领用。
A、领用==》挂起
当处于领用状态下的工做任务接受到用户发出的挂起事件时, 引擎自动将工做任务的状态变迁为挂起状态。
B、领用==》终止
当处于领用状态下工做任务接受到用户发出的终止事件后,引擎自动将工做任务的状态变迁为终止状态。只有活动实例被终止状况下才可能终止工做任务,用户不能本身终止工做任务。
C、领用==》拒绝
当工做任务的执行者拒绝执行分配的工做任务,则工做流引擎将该工做任务变迁到拒绝状态,拒绝状态是状态转换中的最后一个状态,今后再也不有状态转换行为发生。
D、领用==》完成
当工做任务的执行者已经按照预约的要求完成了工做,而且向工做流引擎成功提交了工做结果,该工做任务便进入完成状态。
(4)、挂起(Suspend)
工做任务变为一种不活动的状态,该状态下,参与者不能打开该工做任务,除非它已经回到了运行或者领用状态下。
状态转换:不一样状况下,挂起状态能够转换变迁到其余的状态。
A、挂起==》运行
工做流引擎收到恢复工做任务命令。在变迁到挂起前的状态为运行状态,则引擎自动恢复成运行状态。
B、挂起==》领用
工做流引擎收到恢复工做任务命令。在变迁到挂起前的状态为领用状态,则引擎自动恢复成领用状态。
C、挂起==》终止
处于挂起状态下的工做任务接受到有权限的用户发出的终止活动的命令,工做流引擎自动执行将挂起状态下的工做任务转换到终止状态。
(5)、拒绝(Reject)
工做任务参与者拒绝参与执行分配的任务项,处于拒绝状态下的工做任务属于结束状态,拒绝状态是状态转换中的最后一个状态,今后再也不有状态转换行为发生。拒绝属于非正常结束工做任务。
(6)、终止(Terminate)
工做任务的执行被异常结束。在工做任务处于挂起、运行、领用状态时才能被终止。工做任务不能有用户直接进行终止操做,只有有权限的用户在终止过程实例而终止其所属的活动实例时,才能对工做任务进行终止。
(7)、完成(Complete)
工做任务执行完成正常结束,参与者按照要求完成了分配的工做任务。
只有处于领用状态下的工做任务在成功提交后才能到达完成状态。活动实例的全部工做任务都正常结束时,活动实例的状态也到达完成状态。
过程实例、活动实例、工做任务这三个工做流对象之间的总体的状态的变迁及变迁过程当中相互的影响关系。三个对象的几种状态之间存在着基本的状态转换,以下图所示:
工做流基本包含以下多种模式用于工做流过程建模和分析:
(1)、基本模式 5种
● 顺序模式---- 按照顺序执行各项活动
● 并行分支模式----同时运行两个活动
● 同步模式----同步两个并行的执行线程
● 单选模式----从多条路径中选择一个执行
● 简单合并模式----合并两个二选一路径
(2)、高级分支与同步模式 5种
● 多选模式----从多条执行路径中选出几条
● 同步合并模式----合并多条路径,若是有多条路径被选择,则进行同步;如 果只有一条路径被选择,则进行简单合并
● 多合并模式----合并多条路径
● 鉴别器模式----合并多条路径而不进行同步,只执行一次后续活动
● M中的N模式-----合并多条路径,进行部分同步,只执行一次后续活动
(3)、结构模式 2种
● 任意循环模式----没有任何限制的执行工做流
● 隐含终断模式----若是没有事情可作,就结束
(4)、多实例模式
● 设计期多实例---流程设计时已知实例数目
● 运行时前置多实例---实例数目在运行时才能肯定
● 运行时非前置多实例---实例数目没法肯定
● 同一任务多实例并要求同步运行
(5)、基于状态模式
● 延期选择---执行两个可选进程之一,选择执行进程是隐含的
● 交叉并行路由---随机执行一个任务但不并行
● 里程碑---直到达到某个里程碑方激活一个任务
(6)、取消模式
● 取消活动---取消或禁止一个活动
● 取消过程---取消或禁止一个过程
(7)、其它模式
● 结构化循环
● 递归
● 临时触发器
● 持续触发器
● 取消范围
● 多实例的取消
● 多实例的手工完成
● 鉴别阻塞
● 鉴别取消
● 结构化N选M
● N选M阻塞
● N选M取消
● AND合并
● 多实例的N选M
● 多实例的N选M取消
● 动态多实例的N选M
● 循环的同步合并
● 同步合并
● 区域互斥
● 交叉路由
● 线程合并
● 线程分支
● 显式终止
(1)、顺序模式(Sequence)
最基本的过程模型:按照顺序执行各项活动,前驱活动的完成是后续活动开始的必要条件,每个工做流系统都直接实现了这种模式,这个模式是工做流能运行的一个重要基石。
这个理论模型十分简单,只是一个工做单元完成了,紧接着无条件执行下一个工做单元。
(2)、并行分支模式(Parallel Split)
在流程执行过程当中,须要将单进程的某个控制点分红能够并行执行的多进程控制,因而容许任务同时执行或者以任何顺序执行。此一模式,实际就是咱们常接触到的 AND 模型。
值得注意的是这个定义来讲通常B、C、D之间是并发的,实现上通常是几个不一样的线程/进程。
(3)、同步模式(Synchronization)
AND分支之后,一个最为广泛的合并方式就是AND合并。当多个并行任务都完成后才能开始执行下一任务。
须要注意的细节是"同步"这个问题,不少时候存在现实业务的考虑,即便是同一个动做,也不必定是非要合并不可。
通常状况下,并行分支和合并是组合使用,组合执行模型以下:
(4)、单选模式(Exclusive Choice)
单选模式其实就是“排它选择”模式,在流程的某一节点,依据一个结果或流程控制数据, 从多个分支路径中选定一个路径执行。
须要注意的是这个"排他"性,只能选择其中一个分支,另外多个分支将不会走下去。通常来讲,这个模式的实现通常为在运行时的条件选择,就是条件判断的代码放到XOR 这个结点,而后去根据这些代码去判断下一步的走向。
(5)、简单合并模式(Simple Merge)
在流程中某点,需将两个或更多可选分支聚合而不一样步;换言之,“合并”在任一入口链接触发时被触发。
这个模式主要是为了应付前躯只有一个分支的流程,这个模式也是一个很经常使用的模式。在许多的流程图中,没有显式说明的通常均可以看做是 XOR-join,就是任意一个前躯完成,就触发下一个工做单元。
通常状况下,单选模式和简单合并模式是组合使用的,组合模式以下:
(1)、多选模式(Multiple Choice)
在工做流过程的某点,依据断定或工做流控制数据,选择一个或多个分支来进行执行。一般意义上来说就是咱们所说的OR_Split
(2)、同步合并模式(Synchronising Join)
流程中某点多条路径聚合成一个线程,若多于一条路径触发,则活动线程需同步;若仅有一条路径触发,则可选分支应再收敛,无需同步。
工做流程中的多个路径在一个点被汇合成一个单一的进程。若是多于一个的路径到达了,活动线程就须要进行同步。若是只有一个路径到达,那么其它的路径应该异步的从新会聚。
这一个模式是为了应付多选模式(Multiple Choice)或者一般意义所说的 OR-Split 所产生的分支。
说明:这个分支的合并,须要了解上下文的关系。若是前面只产生了A分支,那么到达同步-JOIN节点就能够触发后续活动D。若是前面产生的分支A、B、C都被激活触发,而且A、B、C分支是并发的,那么当A、B都已到达同步-JOIN节点,可是C分支尚未到达,那么就须要进行等待,等到C分支也到达本节点后,才能触发执行下一节点D活动。
(3)、多合并模式(Multiple Merge)
多合并模式即多路合并,在流程中某节点,两条或更多分支无同步再收敛。若多于一个分支被激活或多个分支被同时激活,流程须要对每一个被激活分支进行响应一次,则须要采用多合并模式。其实多路合并并非真正意义的合并,而是到达多路_JOIN节点时继续相同的后续分支。
说明:如图所示,B\C\D三个活动,当B先到达“多路_JOIN”节点时,则触发E1,C到达时候,触发E2,D到达时候,触发E3,触发完成所有分支后,E触发完成结束。其实每次触发的都是相同的E,可是产生的任务为E1,E2,E3,他们是对每个流入的分支都进行响应一次功效。当所有触发完成后,流程继续进入E后续的流程活动。
(4)、鉴别器模式(Discriminator)
路径鉴别器是指在流程的某点,激活后续任务以前等待许多流入分支的完成。从它开始之时起,等待全部剩余分支的完成并“忽略”它们。一旦全部的流入分支都被触发,它使本身复位,以即可被再次触发。
鉴别器模式只只对And_Split同时执行的状况;此种模式有三种状况:
(1)、B、C同时到达鉴别器Discriminator节点,则执行D
通常这种状况不会发生,由于计算机执行的时候,老是有前后执行顺序的,总有一个为先执行。
(2)、B先到达鉴别器Discriminator节点,那么就没必要等待C的执行结果,直接执行D,当C到完成后到达鉴别器Discriminator节点时,流程将自动忽略C的结果,将鉴别器Discriminator恢复原位,继续等待被触发。
(3)、C先到达鉴别器Discriminator节点,那么就没必要等待B的执行结果,直接执行D,当B到完成后到达鉴别器Discriminator节点时,流程将自动忽略B的结果,将鉴别器Discriminator恢复原位,继续等待被触发。
(5)、M中的N模式(N-out-of-M Join)
M中选N合并是指流程的某点M 条并行路径聚合到一点,只要其中N条路径完成则激活后续任务,全部其它剩余路径的完成应被忽略。相似于路由鉴别,只要全部流入分支被触发,则该合并使本身复位,以即可被再次触发。M中选N其实就是合并多条路径,进行部分同步,只执行一次后续活动。
说明:上图所示 M 为3,N咱们设定为2 ,则,若是B\C 都完成到达N-out-of-M Join节点,则知足N-out-of-M 规则,则没必要等待D的执行结果,直接转向执行E;当D完成后到达N-out-of-M Join节点,流程则忽略D的执行结果,将N-out-of-M Join节点复位等待再次被触发。
(1)、任意循环模式(Arbitrary Cycles)
在工做流过程的执行过程当中,一个或多个任务可被重复执行。
(2)、隐含终断模式(Implicit Termination)
这个模式叫隐式结束,或者天然结束。就是当全部正在运行结点都没有后继结点,流程就视为结束了。也就是不须要指明结束的结点,只要跑完全部的结点(或者没有找到后继结点),就视为流程结束。
多实例模式
(1)、设计期多实例(Multiple Instances with a Priori Design-Time Knowledge)
流程中的某个任务可能须要建立多个实例,其数目在设计模型时已知。即在某种情形下,一个任务被激活屡次,其指定任务在给定状况下实例的个数在设计时已知。这一模式是用于确立多实例的入口方式。入口主要处理的问题就是肯定所须要生成的实例个数 N 。而这个 N 在设计流程的时候就肯定了。
(2)、运行时前置多实例(Multiple Instances with a Priori Run-Time Knowledge)
一个任务的实例个数是动态的,亦即在设计时未知,而在运行期间全部实例需被执行前的某点可获知其数目。能够将本模式看做一初始化该任务的For循环。在某种状况下,任务可被激活屡次,给定任务的实例数在指定情形下是一变量,取决于状况特征或资源的可用性, 但在运行期的某些阶段才已知, 即该任务的实例在运行时候才肯定。
入口方式也能够动态肯定,这一模式是表示在流程运行的过程当中,B 中第一个实例产生之前就肯定 N 。固然了,肯定这个N 的时机能够是前面 A,也能够是 A 前的工做任务。总之是在第一个实例产生前就肯定下来的,也能够视做该模式的应用。
(3)、运行时非前置多实例(Multiple Instances without a Priori Run-Time Knowledge)
实例的数目是动态的,亦即实例数设计时不知,在运行期间,全部这些实例须要被激活前的任何阶段都没法知道。可将本模式看做是任务实例化的WHILE循环。
(4)、同步多实例(Multiple Instances without a Priori Run-Time Knowledge)
实例数在设计时未知,任务的全部实例完成后另外一任务才能启动(或开始)。
基于状态模式
(1)、延期选择(Deferred Choice)
一个线程激活任务A, 另外一线程激活任务 B,而两个任务都在任务列表中),只要一个线程启动, 另外一线程应消失(亦即若任务 A 启动,则任务B 应从工做列表中消失)。
工做流中的一个节点,有一个或多个分支已经被选择。与XOR拆分相比,并无明确的选择,可是,选择是取决于环境的。与AND拆分相比,二者中只有一个被执行。这意味着一旦环境启动了其中的一个,另外一个就被取消。要注意,选择是被延迟到两个分支中的一个真正开始执行时,也就是说,选择是能够尽量的推后的。 例子:在收到货物以后,有两种方法能够将其送到。选择取决于相关资源的可用性。所以,选择会被推迟到直到其中一个资源可用为止。
(2)、交叉并行路由(Interleaved Parallel Routing)
一组活动以任意的顺序执行,每一个活动都被执行,他们的顺序是在运行时决定的,而且在任意一个时刻都不会有两个活动在执行。
(3)、里程碑(Milestone)
一个活动可否执行取决于一个指定的状态。也就是说,只有在到达一个特定的未过时的里程碑时,活动才被执行。
(1)、取消活动(Cancel Activity)
一个可执行的活动被强制失效了,也就是说,一个正在等待执行的活动所在线程被移除了。
例子:若是顾客取消了一个请求,那么与之相关的活动也被取消了。
(2)、取消过程(Cancel Case)
一个过程实例, 被彻底取消。
(1)、结构化循环(Cancel Activity)
(2)、递归(Recursion)
(3)、临时触发器(Transient Trigger)
(4)、持续触发器(Persistent Trigger)
(5)、取消范围(Cancel Region)
(6)、多实例的取消(Cancel Multiple Instance Activity)
(7)、多实例的手工完成(Complete Multiple Instance Activity)
(8)、鉴别阻塞(Blocking Discriminator)
(9)、鉴别取消(Cancelling Discriminator)
(10)、结构化N选M(Structured Partial Join)
(11)、N选M阻塞(Blocking Partial Join)
(12)、N选M取消(Cancelling Partial Join)
(13)、AND合并(Generalised AND-Join)
(14)、多实例的N选M(Static Partial Join for Multiple Instances)
(15)、多实例的N选M取消(Cancelling Partial Join for Multiple Instances)
(16)、动态多实例的N选M(Dynamic Partial Join for Multiple Instances)
(17)、循环的同步合并(Acyclic Synchronizing Merge)
(18)、同步合并(General Synchronizing Merge)
(19)、区域互斥(Critical Section)
(20)、交叉路由(Interleaved Routing)
(21)、线程合并(Thread Merge)
(22)、线程分支(Thread Split)
(23)、显式终止(Explicit Termination)
过程推动是针对工做流系统正常流转的一个总体的引擎调度流程,它是工做流系统完整流转的总体过程描述。
(1)、业务建立
用户在WEB端建立单据
业务流程建立业务单据、公文流程编制文稿数据,此时业务单据的状态为草稿状态,同时产生一条状态为【初始】的过程实例。若是用户删除业务单据,则同时删除产生的过程实例。
(2)、流程启动
第一步完成后,启动工做流程。流程的启动方式分多种,手工启动、自动启动、事件启动、邮件启动、外部启动等。
<A>、将流程定义模型导入到运行库(工做流流程的执行状况表)中;运行库包含以下内容:
● 过程执行状况:生成过程记录,状态为【初始】
● 活动执行状况:
● 任务执行状况
<B>、将过程实例状态变迁为【运行】
<C>、生成全部活动的活动实例。
<D>、将第一开始活动的活动实例状态变迁为完成。
<E>、生成开始活动的工做任务,将状态变迁为完成。
<F>、更新运行库记录。将过程记录状态变动为【运行】,生成一条第一开始活动的执行状况记录,状态为【完成】,生成第一活动的任务执行状况记录,状态修改成【完成】。
(3)、过程执行
流程启动后,SDP工做流流程的设计模式是已经完成了第一开始活动的全部任务,直接进行第二活动的执行,此时整个过程开始真正的执行,那么咱们就须要开始分析活动实例,在许可状态(Running)下,分析活动类型:
<A>、普通
普通类型是指在工做流过程当中,各个活动(人工活动或自动活动)相互之间路径没有分支,只有单一的流向,此种类型属于普通活动。如图所示:
此种状况下直接读取活动变迁表的后续活动的字段信息。
<B>、路由
路由类型是指在工做流过程当中,活动相互之间的路径变迁有多种(大于1)分支,此种状况属于路由类型。路由分几种状况:分裂、汇聚、循环
第一开始活动执行完成后,根据迁移条件是否开始激活运行下一步活动实 例,活动实例在过程实例建立时候已经所有建立完成,此处只要执行激活 运行活动实例,激活运行活动实例的条件是必须至少一个工做任务被建立 而且知足启动运行的条件,那么此时就须要先建立工做任务项,而且启动 运行工做任务,即工做任务的状态变迁为运行,变动完成后,将活动实例 状态变迁运行。
(4)、业务结束
业务单据及工做流流程的结束。结束方式分:完成(正常流转完成),终止(非正常的结束),中断(因工做流在挂起状态下被发现过程实例超过了它的生存周期,有工做流引擎自动执行过程当中断。)
业务和流程的结束,工做流引擎将自动清除过程实例、活动实例、工做任 务记录。运行库中,将过程执行状况、活动执行状况、任务执行状况的记录状态变动为相应的结束状态(注意:当非正常结束时,须要清除未完成的活动和任务记录)。
过程推动是由工做流系统的调度引擎来执行,它是工做流系统完整流转的总体过程描述。