`
chenjin
  • 浏览: 163219 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jbpm 与 工作流模式 基本控制模式(二)

    博客分类:
  • java
阅读更多
xml 代码
 
  1. <process-definition>  
  2.     <start-state name='start'>  
  3.         <transition to='fork' />  
  4.     <!---->start-state>  
  5.     <fork name='fork'>  
  6.         <transition name='first' to='one' />  
  7.         <transition name='second' to='two' />  
  8.     <!---->fork>  
  9.     <state name='one'>  
  10.         <transition to='join' />  
  11.     <!---->state>  
  12.     <state name='two'>  
  13.         <transition to='join' />  
  14.     <!---->state>  
  15.     <join name='join'>  
  16.         <transition to='end' />  
  17.     <!---->join>  
  18.     <end-state name='end' />  
  19. <!---->process-definition>  


其中testSynchronizationFirstTokenFirst()

节点执行顺序为

    start --> fork --> one --> join(先) --> end
                          --> two --> join(后)

    其中  firstToken.signal() 后 one --> join 先执行.
    在   two --> join 执行技术之前  join --> end 不会执行

testSynchronizationSecondTokenFirst() 与上面方法类似, 只是one 和 two 互换.

testSynchronizationNested()

中createNestedSynchronizationProcessDefinition()
创建如下流程

xml 代码
 
  1. <process-definition>  
  2.     <start-state name='start'>  
  3.         <transition to='fork' />  
  4.     <!---->start-state>  
  5.     <fork name='fork'>  
  6.         <transition name='first' to='fork1' />  
  7.         <transition name='second' to='fork2' />  
  8.     <!---->fork>  
  9.     <fork name='fork1'>  
  10.         <transition name='first' to='state1.1' />  
  11.         <transition name='second' to='state1.2' />  
  12.     <!---->fork>  
  13.     <fork name='fork2'>  
  14.         <transition name='first' to='state2.1' />  
  15.         <transition name='second' to='state2.2' />  
  16.     <!---->fork>  
  17.     <state name='state1.1'>  
  18.         <transition to='join1' />  
  19.     <!---->state>  
  20.     <state name='state1.2'>  
  21.         <transition to='join1' />  
  22.     <!---->state>  
  23.     <state name='state2.1'>  
  24.         <transition to='join2' />  
  25.     <!---->state>  
  26.     <state name='state2.2'>  
  27.         <transition to='join2' />  
  28.     <!---->state>  
  29.     <join name='join'>  
  30.         <transition to='end' />  
  31.     <!---->join>  
  32.     <join name='join1'>  
  33.         <transition to='join' />  
  34.     <!---->join>  
  35.     <join name='join2'>  
  36.         <transition to='join' />  
  37.     <!---->join>  
  38.     <end-state name='end' />  
  39. <!---->process-definition>  



节点执行顺序:


    start --> fork --> fork1 --> state1.1 --> join1 --> join --> end
                                          --> state1.2 --> join1
                          --> fork2 --> state2.1 --> join2 --> join
                                          --> state2.2 --> join2

    token11.signal()   token11 到 join1
 
    token12.signal()   token12 到 join1 , token1到join

    token21.signal()   token21 到 join2

     token22.signal()  token22 到 join2 , token2到join


排它选择(Exclusive Choice)


Description:     A point in the workow process where a single thread of control splits into
multiple threads of control which can be executed in parallel, thus allowing activities to be
executed simultaneously or in any order.

描述:    在流程的某一点,依据工作流控制数据, 从多个分支路径中选定一个路径

同义词: XOR-split, conditional routing, switch, decision.


java 代码
 
  1. /* 
  2.  * JBoss, Home of Professional Open Source 
  3.  * Copyright 2005, JBoss Inc., and individual contributors as indicated 
  4.  * by the @authors tag. See the copyright.txt in the distribution for a 
  5.  * full listing of individual contributors. 
  6.  * 
  7.  * This is free software; you can redistribute it and/or modify it 
  8.  * under the terms of the GNU Lesser General Public License as 
  9.  * published by the Free Software Foundation; either version 2.1 of 
  10.  * the License, or (at your option) any later version. 
  11.  * 
  12.  * This software is distributed in the hope that it will be useful, 
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of 
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
  15.  * Lesser General Public License for more details. 
  16.  * 
  17.  * You should have received a copy of the GNU Lesser General Public 
  18.  * License along with this software; if not, write to the Free 
  19.  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 
  20.  * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 
  21.  */  
  22. package org.jbpm.jpdl.patterns;  
  23.   
  24. import junit.framework.TestCase;  
  25.   
  26. import org.jbpm.context.def.ContextDefinition;  
  27. import org.jbpm.context.exe.ContextInstance;  
  28. import org.jbpm.graph.def.ProcessDefinition;  
  29. import org.jbpm.graph.exe.ProcessInstance;  
  30. import org.jbpm.graph.exe.Token;  
  31.   
  32. /** 
  33.  * http://is.tm.tue.nl/research/patterns/download/swf/pat_4.swf 
  34.  *  
  35.  * 

    we make a distinction in the api between process and client based 

     
  36.  * decisions. the first tests show the situations as described in the  
  37.  * pattern. after that a demonstration of client based decision is  
  38.  * added. 
  39.  * 

     

         
     
  40.  *  
  41.  * 

    process based 

     
  42.  * decisions makes use of a decision node.  the node has a piece of  
  43.  * programming logic associated that calculates the leaving transition 
  44.  * name.  the programming logic is executed within the calculation of  
  45.  * the next state of the process instance. 
  46.  * 

     

     
  47.  *  
  48.  * 

    client based decisions allow clients to select on of the multiple 

     
  49.  * transitions that leave the current state. 
  50.  * 

     

      
     
  51.  */  
  52. public class Wfp04ExclusiveChoiceTest extends TestCase {  
  53.     
  54.   static ProcessDefinition exclusiveChoiceProcessDefinition = ProcessDefinition.parseXmlString(  
  55.       " <process-definition>"</process-definition>  +  
  56.       "   +  
  57.       "     +  
  58.       "  " +  
  59.       "   +  
  60.       "     +  
  61.       "  " +  
  62.       "   +  
  63.       "     +  
  64.       "     +  
  65.       "      <condition>#{scenario==1}</condition>" +  
  66.       "    " +  
  67.       "     +  
  68.       "      <condition>#{scenario==2}</condition>" +  
  69.       "    " +  
  70.       "  " +  
  71.       "   +  
  72.       "   +  
  73.       "   +  
  74.       "" );  
  75.   static {  
  76.     exclusiveChoiceProcessDefinition.addDefinition( new ContextDefinition() );  
  77.   }  
  78.   
  79.   /** 
  80.    * situation 1 
  81.    */  
  82.   public void testExclusiveChoiceSituation1() {  
  83.     ProcessDefinition pd = exclusiveChoiceProcessDefinition;  
  84.   
  85.     ProcessInstance pi = new ProcessInstance( pd );  
  86.     ContextInstance ci = (ContextInstance) pi.getInstance( ContextInstance.class );  
  87.     pi.signal();  
  88.     Token root = pi.getRootToken();  
  89.   
  90.     assertSame( pd.getNode("a"), root.getNode() );  
  91.       
  92.     ci.setVariable( "scenario"new Integer(1) );  
  93.     root.signal();  
  94.       
  95.     assertSame( pd.getNode("b"), root.getNode() );  
  96.   }  
  97.   
  98.   /** 
  99.    * situation 2 
  100.    */  
  101.   public void testExclusiveChoiceSituation2() {  
  102.     ProcessDefinition pd = exclusiveChoiceProcessDefinition;  
  103.   
  104.     ProcessInstance pi = new ProcessInstance( pd );  
  105.     ContextInstance ci = (ContextInstance) pi.getInstance( ContextInstance.class );  
  106.     pi.signal();  
  107.     Token root = pi.getRootToken();  
  108.   
  109.     assertSame( pd.getNode("a"), root.getNode() );  
  110.       
  111.     ci.setVariable( "scenario"new Integer(2) );  
  112.     root.signal();  
  113.       
  114.     assertSame( pd.getNode("c"), root.getNode() );  
  115.   }  
  116.   
  117. }  


流程定义文件:

   
xml 代码
 
  1. <process-definition>  
  2.     <start-state name='start'>  
  3.         <transition to='a' />  
  4.     <!---->start-state>  
  5.     <state name='a'>  
  6.         <transition to='xor' />  
  7.     <!---->state>  
  8.     <decision name='xor'>  
  9.         <transition name='forget about it' to='d' />  
  10.         <transition name='urgent' to='b'>  
  11.             <condition>#{scenario==1}<!---->condition>  
  12.         <!---->transition>  
  13.         <transition name='dont care' to='c'>  
  14.             <condition>#{scenario==2}<!---->condition>  
  15.         <!---->transition>  
  16.     <!---->decision>  
  17.     <state name='b' />  
  18.     <state name='c' />  
  19.     <state name='d' />  
  20. <!---->process-definition>  




节点执行顺序:

     start --> a --> xor --> d
                             xor --> b
                             xor --> c
  其中 xor --> d , xor --> b , xor--> c 只能从中选一.
  当scenario==1 执行 xor --> b,  当 scenario==2 执行xor --> c , 其他情况(默认)执行xor --> d

    代码中根据变量scenario , 判断流程转向, 比较直观,不再详述.




简单聚合(Simple Merge)


Description :  A point in the workow process where two or more alternative branches come together
without synchronization. It is an assumption of this pattern that none of the alternative
branches is ever executed in parallel

描述: 在流程中某一点,将两个或更多可选分支聚合而不同步.

同义词: XOR-join, asynchronous join, merge.
分享到:
评论
1 楼 weiqiulai 2007-08-17  
不知道,你的版本是多少。我用的是JBPM3.2.1,里面没有你说的<condition>属性,不知道能否用<script>代替?但是我不知道怎么才能得到我设置的<script>属性??

相关推荐

    jbpm工作流简单实例

    **jbpm工作流简介** jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了一整套解决方案,用于设计、执行和管理业务流程。jbpm不仅支持BPMN(Business Process Model and Notation)...

    一个JBPM工作流例子,JBPM

    **JBPM工作流详解** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了一整套解决方案,用于设计、执行和管理业务流程。在本示例中,我们将深入探讨如何利用JBPM实现销售批复这一具体...

    jbpm工作流引擎介绍

    【jbpm工作流引擎介绍】 工作流引擎是用于自动化业务流程的软件系统,它通过预定义的流程模版,管理并执行诸如请假、报销、审批等业务操作。工作流引擎的核心功能包括流程定义、执行、管理和监控。在业界,工作流...

    企业OA 完整的jbpm工作流实例

    在这个名为"企业OA 完整的jbpm工作流实例"的项目中,开发者使用了Java SSH框架来构建了一个集成jbpm的工作流系统,特别适合初学者了解和学习工作流的实现。 SSH框架是Struts、Spring、Hibernate三个开源项目的首...

    jBPM4工作流应用开发指南

    ### jBPM4工作流应用开发指南:深入解析工作流技术与企业现代化管理 #### 工作流概览 工作流技术,作为一种先进的自动化手段,旨在优化和加速业务流程的执行,通过计算机辅助或自动化的手段,确保业务过程在正确的...

    工作流JBPM开发计划书

    ##### 2.2 对JBPM工作流的二次开发 - **功能扩展**:根据业务需求,开发新的功能模块,如自定义活动类型、动态任务分配等。 - **流程定义工具**:设计图形化界面工具,简化流程的设计与维护过程。 - **流程实例监控...

    jbpm工作流引擎介绍.ppt

    【jbpm工作流引擎介绍】 工作流引擎是用于自动化业务流程的软件,它负责定义、执行和管理这些流程。在企业环境中,常见的业务流程包括请假、报销、公文审批等。工作流引擎通过内置的人工任务功能,确保在流程自动化...

    struts+hibernate+spring+jbpm智能工作流系统

    Struts、Hibernate、Spring 和 jBPM 是四个在企业级应用开发中广泛使用的开源框架,它们结合在一起可以构建出高效且灵活的智能工作流系统。下面将分别介绍这些技术及其在工作流系统中的作用。 **Struts** Struts 是...

    jBPM4.4工作流开发指南.docx

    jBPM4.4工作流开发指南 jBPM4.4是一种流行的工作流引擎,它提供了一个强大且灵活的工作流管理系统。本指南将详细介绍jBPM4.4的安装、部署、使用、开发和原理等方面的知识点。 一、开发环境搭建 要开发jBPM4.4工作...

    JBPM综合实例 OA工作流系统源码

    **JBPM综合实例:OA工作流系统源码分析** JBPM(Java Business Process Management)是一个开源的工作流程管理系统,它提供了一套完整的业务流程自动化解决方案,包括流程设计、部署、执行、监控和管理等功能。在本...

    Jbpm工作流与ssh框架集成文档

    将Jbpm工作流与SSH框架集成,可以实现业务逻辑和数据持久化的高效协同,为复杂的企业应用提供流畅的流程控制。 集成Jbpm工作流和SSH框架的过程主要包括以下几个步骤: 1. **环境准备**:首先,确保已下载并安装了...

    jbpm_工作流架构.pdf

    配置文件是JBPM工作流框架的重要组成部分,它定义了JBPM的运行环境,并决定了如何与数据库交互以及其他系统服务的集成方式。 - **配置文件的重要性**:配置文件对于JBPM而言至关重要,它是工作流组件的一个主要入口...

    struts+hibernte+spring+jbpm 智能工作流系统

    这个工作流可能涵盖了文章的提交、审核、审批和发布等一系列步骤,通过jBPM定义和控制这些步骤的顺序和条件。同时,Struts处理用户请求,Spring负责组件管理,Hibernate管理数据持久化,整个系统协同工作,实现智能...

    一种基于SOA和JBPM的工作流引擎模型.pdf

    流程调度控制是工作流引擎的核心,JBPM中的运行标记(token)代表流程实例的一次执行,维护着流程设计的结构。流程实例的每个步骤都由工作流引擎根据流程定义自动控制,确保流程按照预定规则顺畅运行。 此外,任务...

    jbpm-designer工作流

    这些库文件确保了jbpm-designer能够正确解析和执行工作流定义,同时也支持与其他系统和服务的集成。 META-INF目录则是Java类加载机制所必需的,其中的MANIFEST.MF文件描述了jar包的元数据,如版本信息、依赖关系等...

    jbpm4.4+s2sh请假流程例子

    【jbpm4.4+s2sh请假流程例子】是一个典型的结合了jbpm4.4工作流引擎和Struts2、Spring、Hibernate(S2SH)框架的实战项目,旨在演示如何在企业级应用中实现一个完整的请假流程。在这个例子中,jbpm4.4作为流程管理的...

    jbpm工作流管理系统

    ### JBPM工作流管理系统知识点详解 #### 一、基本流程概念与实例执行概念 JBPM(JBoss Business Process Management)是Red Hat旗下的一款开源工作流引擎,它支持BPMN 2.0标准,用于自动化业务流程。JBPM提供了...

Global site tag (gtag.js) - Google Analytics