Internaluseonly工作流模式和JBPMWorkflowPatterns&JBPM赵慧2010/08/03Internaluseonly2目录jBPM4介绍来自国外的20种工作流模式5种基本控制流模式(BaseControlFlowPatterns)4种高级分支同步模式(AdvancedBranchingandSynchronizationPatterns)2种结构化模式(SturcturalPatterns)4种包含多实例的模式(PatternsinvolvingMultipleInstances)3种基于状态的模式(State-basedPatterns)2种取消模式(CancellationPatterns)具有中国特色的工作流模式Internaluseonly3jBPM4介绍jBPM简介jBPM,全称是JavaBusinessProcessManagement(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。目前最新版本是jBPM4.4BusinessanalystjBPM架构jBPM的使用Internaluseonly45种基本控制流模式Pattern1顺序流(Sequence)定义描述:在流程中,活动按照预先设定的顺序一个接着一个的往下执行例子:比如申请后进行审批,接着往下一个一个的进行任务流程图:Pattern2并行分叉(ParallelSplit)定义描述:流程在某个活动之后产生多个分支例子:比如用户付款后,认为分叉为“通知用户款已收到真正送货”和“送货”2个动作流程图:Task1Task2Task2Task1Task2Task3Task21Task31Internaluseonly55种基本控制流模式Pattern3同步(Synchronization)定义描述:在流程中的某个点,多个并行的子流程或者活动,合并成一个流程。流程必须等待所有的分支都执行完成后,才能激活后续活动,这就是“同步”的意思。例子:比如“数据归档”在“发票”和“付款”都完成后才被激活流程图:Task1Task2Task3Task31Internaluseonly65种基本控制流模式Pattern4独占式选择(ExclusiveChoice)定义描述:一个活动完成后,只能在后面的多个分支中激活一个,即独占式分支例子:比如用户下单后,可以有N中付款方式,但是只能选择其中一种流程图:Task1Task2Task3Task21Task31Pattern5简单聚合(SimpleMerge)定义描述:在流程中有2个以上的分支中某一点处被合并成一个分支,只要分支中的一条完成,即可继续进行。而其他分支自动结束例子:比如“发货”在“银行卡支付”和“货到付款”等支付方式中的一个完成后才被激活流程图:Task1Task2Task3Task31任一Internaluseonly7基本控制流模式–jBPM中的综合实现5种基本控制流模式在JBPM4中的综合实现流程图:(JPDL)顺序并行分叉同步排他选择简单聚合Internaluseonly84种高级分支同步模式Pattern6多重选择(MultipleChoice)定义描述:在流程中,当一个活动完成后,有多个分支进行选择,可以选择执行其中的一个或者N个分支例子:去世博园玩转门口检票后可以选择A~E个片区中的N个进行观光流程图:JBPM中的支持情况:1.JPDL方式不支持先定义好这里的几种,然后根据条件去筛选其中的几种进行,但是JBPM4.4之后支持一种叫foreach的节点,允许我们在运行时制定几种特定的任务,比如上面例子中的片区,我们可以在选定后再去循环2.BPMN方式支持根据条件执行多个子分支Task1Task2Task3Task5Task4Internaluseonly94种高级分支同步模式Pattern7同步聚合(SynchronizingMerge)定义描述:在流程中的某个聚合点,流程会等待所有的分支到来,才能激活后续的活动,如果分支只有一个那么就变成Pattern5的简单聚合模式;如果存在2个以上的分支那就是Pattern3的同步模式;这种模式的关键在于能够动态的根据分支的多少进行聚合。例子:游客观光完N个片区后,系统能够将游客在N个片区的信息记录到库,无论N为多少流程图:JBPM中的支持情况:可以通过设置JBPM的Join节点的属性multiplicity的值为某个变量,并在程序中动态的去修改该变量的值来制定分支的数量Task1Task2Task5Task3Task4Internaluseonly104种高级分支同步模式Pattern8多重聚合(MultipleMerge)定义描述:在流程中的多个分支,都可以激活后续的活动,也就是会产生多个实例例子:游客观光完N个片区后,每个片区各自的系统可以对游客在自己片区的信息进行存储流程图:JBPM中的支持情况:可以通过设置JBPM的Join节点的属性multiplicity的值为某个变量,并在程序中动态的去修改该变量的值来制定分支的数量Task1Task2Task5Task3Task4Task1Task5Task3Task4Task5Internaluseonly114种高级分支同步模式Pattern9鉴别器(Discriminator)定义描述:在流程的某个聚合点,N个分支的第一个分支到达后,就立刻激活后续活动;与此同时,流程仍然要等待其余的分支完成并忽略完成。注意:在其余分支未全部完成前,第一个到达的分支所激活的后续节点是无法执行的例子:“个人申请提交”后,并行提交给“第一导师审批”、“第二导师审批”、“第三导师审批”,他们中只要有一个完成了,那么就可以提交给学院做“学院审批”,但是学院要等这三个都完成之后才能够执行“学院审批”。N-out-of-M鉴别器模式跟鉴别器模式一样的,只是这种模式是N个到达后,激活后续节点,而剩下的M-N个节点到达后忽略掉这些节点。另外这M-N个节点未完成前,新激活的后续节点一样无法被执行JBPM中的支持情况:没有直接支持这种模式,但是如果通过自定义节点,应该是可以处理这种模式的个人理解:对于里面的N-1个,如果会被忽略掉,会显得没有什么价值,浪费?Internaluseonly122种结构化模式Pattern10任意循环(ArbitraryCycles)定义描述:某一个或多个活动可以反复执行例子:用户“付款”,然后“拿到汽水”,然后中了“再来一瓶”,然后就重复做了一次“拿到汽水”动作流程图:Task1Task3Task2Pattern11隐式终止(ImplicitTermination)定义描述:指着一个流程中,如果没有活动可以执行力,那么流程就会自动终止例子:比如用户买了汽水后,中了50元小奖,但是没有地方可以兑奖,于是这个流程终止了流程图:Task1Task2Task3Task4Internaluseonly132种结构化模式–JBPM中的综合实现2种结构化模式在JBPM4中的综合实现流程图:(JPDL)循环隐式退出Internaluseonly144种包含多实例的模式Pattern12无同步的多实例(MIwithout)定义描述:在流程中,一个活动可以激活多个实例,每个实例相互独立,并不需要在后面进行同步例子:比如用户购买了N本书,于是后续的“支付账单”“更新客户”可以以书本为单位各自执行流程图:JBPM中的支持情况:支持这种模式,但是不允许在后面进行结束动作Task1Task2Task1Task2-1Task2-2Task2-3Foreach节点Internaluseonly154种包含多实例的模式Pattern13设计时确定的的多实例(MIwithaPrioriDesignTimeKnoledge)定义描述:在流程中,被激活的多个实例需要在某个聚合点聚合,而实例的个数在设计的时候就已经知晓率例子:比如流程图:JBPM中的支持情况:对于设计时已经知道实例数量的,最简单的就是使用多个Task节点来实现多个实例Task1Task2Task1Task2-1Task2-2Task2-3X3Internaluseonly164种包含多实例的模式Pattern14运行时确定的的多实例(MIwithaPrioriRunTimeKnoledge)定义描述:在流程中,被激活的多个实例需要在某个聚合点聚合,而实例的个数在设计的时候并不知道,只有在运行时根据条件来决定需要激活多少个实例例子:比如流程图:JBPM中的支持情况:对于运行时可以知晓实例数量的,可以通过设置JOIN节点的multiplicity来实现Task1Task2Task1Task2-1Task2-2Task2-3Foreach节点JOIN节点Internaluseonly174种包含多实例的模式Pattern15运行时无法确定的的多实例(MIwithoutaPrioriRunTimeKnoledge)定义描述:在流程中,被激活的多个实例需要在某个聚合点聚合,而实例的个数在设计的时候并不知道,该模式与上一个模式的区别就是,在产生的实例执行时或者已经执行完时,仍然有新的实例产生例子:比如订购100台电脑,涉及多个供应商,但那时每个供应商供应多少台电脑是不知道的,因此供应商的数量实现也不确定,但是每次供应商送货来后,就会将现在所拥有的电脑数量和所需的100台进行比较,来决定是否要下一个供应商进行送花Pattern15的实现产生多个实例JOIN节点在产生的实例中执行的时候产生新的实例Pattern15的实现主要也是通过Pattern14的方式来做的流程图:(JPDL)在这里修改计算实例的数量并付给JOIN节点的multiplicityInternaluseonly183种基于状态的模式Pattern16延迟选择(DeferredChoice)定义描述:流程中某个点可以有多个分支进行选择。与Pattern4相比较:不是基于简单的数据或者决定就可以很明显地作出选择,而是会向系统或者执行环境提供多种可选择的分支;但是又不同于AND-Split模式,延迟选择只能选择一个分支执行,一旦选择了其中第一个分支,那么其他分支就会被撤销。这种延迟一直会持续到第一个选择分支开始实际运行。例子:收到的一批商品运送到各个部门,到底选择什么样的运行方式,要看资源的可用性Internaluseonly193种基于状态的模式Pattern17交叉存取并行路由(InterleavedParallelRouting)定义描述:或者叫任意顺序,指几个活动必须按顺序执行,不能同时进行,但是这种顺序又是不定的例子:体检的时候有很多项目,这些项目不能同时进行,但是可以以随意顺序进行我的理解:这种任意顺序的模式,有一种情况下是可以运用的,就是通过资源多少来判断优先执行哪个活动,比如若A的资源剩余最少,那么就先做A的顺序,通过JBPM的实现如下:Internaluseonly203种基于状态的模式Pattern18里程碑(Milestone)定义描述:一个活动的激活需要一种具体的状态,比如活动A,B,C,只有在AB都执行完了的情况下才能执行C我的理解:这种模式有点类似于顺序模式?或者是同步模式?Internaluseonly212种取消模式Pattern19取消模式(CancelActivity)定义描述:简单的理解,就是将某个活动取消例子:比如下好订单后,“支付货款”活动正在运行中,此时用户取消订单个人理解:取消某个活动,会引起几种后续情况:1.整个流程结束;比如订单取消后,订单的这个流程结束。2.退回上一个节点;比如付款后,用户取消付款,重新下订单。Pattern20取消实例(CancelCase)定义描述:如果一个活动产生了多个实例,那么仅仅撤销这个活动是不够的要将他所引起的所有实例都移除才行Internaluseonly22具有中国特色的工作流模式Patte