- 浏览: 163219 次
- 性别:
- 来自: 北京
最新评论
-
pg_caolei:
楼主,刚才是为了测试一下提供的功能,不小心点提交了,见谅。呵呵 ...
吐一个泡泡 -
pg_caolei:
[b][/b][i][/i]引用[*][img][/img][ ...
吐一个泡泡 -
logcos:
看不明白。
jbpm 项目实践 1.2 (集成appfuse spring modules) -
flyffa:
sorry,应该是更符合Structured Synchron ...
jbpm 与 工作流模式 鉴别器(Discriminator) -
flyffa:
这个模式好像实现的有问题吧,按照workflow patter ...
jbpm 与 工作流模式 鉴别器(Discriminator)
xml 代码
- <process-definition>
- <start-state name='start'>
- <transition to='fork' />
- <!---->start-state>
- <fork name='fork'>
- <transition name='first' to='one' />
- <transition name='second' to='two' />
- <!---->fork>
- <state name='one'>
- <transition to='join' />
- <!---->state>
- <state name='two'>
- <transition to='join' />
- <!---->state>
- <join name='join'>
- <transition to='end' />
- <!---->join>
- <end-state name='end' />
- <!---->process-definition>
其中testSynchronizationFirstTokenFirst()
节点执行顺序为
start --> fork --> one --> join(先) --> end
--> two --> join(后)
其中 firstToken.signal() 后 one --> join 先执行.
在 two --> join 执行技术之前 join --> end 不会执行
testSynchronizationSecondTokenFirst() 与上面方法类似, 只是one 和 two 互换.
testSynchronizationNested()
中createNestedSynchronizationProcessDefinition()
创建如下流程
xml 代码
- <process-definition>
- <start-state name='start'>
- <transition to='fork' />
- <!---->start-state>
- <fork name='fork'>
- <transition name='first' to='fork1' />
- <transition name='second' to='fork2' />
- <!---->fork>
- <fork name='fork1'>
- <transition name='first' to='state1.1' />
- <transition name='second' to='state1.2' />
- <!---->fork>
- <fork name='fork2'>
- <transition name='first' to='state2.1' />
- <transition name='second' to='state2.2' />
- <!---->fork>
- <state name='state1.1'>
- <transition to='join1' />
- <!---->state>
- <state name='state1.2'>
- <transition to='join1' />
- <!---->state>
- <state name='state2.1'>
- <transition to='join2' />
- <!---->state>
- <state name='state2.2'>
- <transition to='join2' />
- <!---->state>
- <join name='join'>
- <transition to='end' />
- <!---->join>
- <join name='join1'>
- <transition to='join' />
- <!---->join>
- <join name='join2'>
- <transition to='join' />
- <!---->join>
- <end-state name='end' />
- <!---->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 代码
- /*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
- package org.jbpm.jpdl.patterns;
- import junit.framework.TestCase;
- import org.jbpm.context.def.ContextDefinition;
- import org.jbpm.context.exe.ContextInstance;
- import org.jbpm.graph.def.ProcessDefinition;
- import org.jbpm.graph.exe.ProcessInstance;
- import org.jbpm.graph.exe.Token;
- /**
- * http://is.tm.tue.nl/research/patterns/download/swf/pat_4.swf
- *
- *
we make a distinction in the api between process and client based
- * decisions. the first tests show the situations as described in the
- * pattern. after that a demonstration of client based decision is
- * added.
- *
- *
- *
process based
- * decisions makes use of a decision node. the node has a piece of
- * programming logic associated that calculates the leaving transition
- * name. the programming logic is executed within the calculation of
- * the next state of the process instance.
- *
- *
- *
client based decisions allow clients to select on of the multiple
- * transitions that leave the current state.
- *
- */
- public class Wfp04ExclusiveChoiceTest extends TestCase {
- static ProcessDefinition exclusiveChoiceProcessDefinition = ProcessDefinition.parseXmlString(
- " <process-definition>"</process-definition> +
- " +
- " +
- " " +
- " +
- " +
- " " +
- " +
- " +
- " +
- " <condition>#{scenario==1}</condition>" +
- " " +
- " +
- " <condition>#{scenario==2}</condition>" +
- " " +
- " " +
- " +
- " +
- " +
- "" );
- static {
- exclusiveChoiceProcessDefinition.addDefinition( new ContextDefinition() );
- }
- /**
- * situation 1
- */
- public void testExclusiveChoiceSituation1() {
- ProcessDefinition pd = exclusiveChoiceProcessDefinition;
- ProcessInstance pi = new ProcessInstance( pd );
- ContextInstance ci = (ContextInstance) pi.getInstance( ContextInstance.class );
- pi.signal();
- Token root = pi.getRootToken();
- assertSame( pd.getNode("a"), root.getNode() );
- ci.setVariable( "scenario", new Integer(1) );
- root.signal();
- assertSame( pd.getNode("b"), root.getNode() );
- }
- /**
- * situation 2
- */
- public void testExclusiveChoiceSituation2() {
- ProcessDefinition pd = exclusiveChoiceProcessDefinition;
- ProcessInstance pi = new ProcessInstance( pd );
- ContextInstance ci = (ContextInstance) pi.getInstance( ContextInstance.class );
- pi.signal();
- Token root = pi.getRootToken();
- assertSame( pd.getNode("a"), root.getNode() );
- ci.setVariable( "scenario", new Integer(2) );
- root.signal();
- assertSame( pd.getNode("c"), root.getNode() );
- }
- }
流程定义文件:
xml 代码
- <process-definition>
- <start-state name='start'>
- <transition to='a' />
- <!---->start-state>
- <state name='a'>
- <transition to='xor' />
- <!---->state>
- <decision name='xor'>
- <transition name='forget about it' to='d' />
- <transition name='urgent' to='b'>
- <condition>#{scenario==1}<!---->condition>
- <!---->transition>
- <transition name='dont care' to='c'>
- <condition>#{scenario==2}<!---->condition>
- <!---->transition>
- <!---->decision>
- <state name='b' />
- <state name='c' />
- <state name='d' />
- <!---->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>属性??
发表评论
-
for download
2008-03-18 20:25 3http://www.softii.com/downinfo/ ... -
文档地址
2008-03-07 09:24 23http://wiki.redsaga.com/conflue ... -
jbpm 与 工作流模式 鉴别器(Discriminator)
2006-11-30 18:04 4210鉴别器(Discriminator) Description ... -
jbpm 与工作流模式 多路聚合(Multiple Merge)
2006-11-27 14:06 2934多路聚合(Multiple Merge) Descripti ... -
jbpm与工作流模式 同步汇聚(Synchronizing Merge)
2006-11-24 18:56 2134同步汇聚(Synchronizing Me ... -
jbpm 使用日记10
2006-11-24 18:05 1461日期: 第五周. 第五天. 经过了近一个多月的努 ... -
jbpm 使用日记9
2006-11-21 16:24 2503日期: 第五周 第 ... -
jbpm 使用日记8
2006-11-20 15:59 1415jbpm 用户组织结构 日期: 第五周, 第一天 ... -
jbpm 与 工作流模式 多路选择(Multiple Choice)
2006-11-17 16:01 7933多路选择(Multiple Choice) Descript ... -
jbpm 与 工作流模式 基本控制模式(三)
2006-11-16 20:25 4304好像源代码功能有点问题. /* * JBoss, Home ... -
jbpm 与 工作流模式 基本控制模式(一)
2006-11-16 16:17 10530工作流模式 本文以jdpl/jar/sr ... -
jbpm 使用日记7
2006-11-15 18:26 1169日期: 第四周 第二天 继续了一天理论知识学 ... -
jbpm 使用日记6 理论知识学习.
2006-11-13 10:54 1555日期: 第四周.第一天 经过jbpm 的一段时间研 ... -
jbpm 使用日记5 一个简单会签示例
2006-11-10 15:52 10048经过3周的努力,终于看到点收获的希望. 基本实现目前项目 ... -
jbpm 使用日记4
2006-11-09 17:49 1559用了整整一天的时间, 实现了个比较简单的会签的功能. ... -
jbpm 使用日记3
2006-11-08 12:01 5474又用了3天,终于对jbpm 集成有了一个比较明确的思路. ... -
jbpm 使用日记2
2006-11-02 14:39 1805改写 jbpm 自带的 应用 jsf 遇到很多问题和工作量. ... -
jbpm 使用日记1
2006-11-01 10:56 2020进度. 1.使用 jbpm 3.1.2 build jbpm. ...
相关推荐
**jbpm工作流简介** jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了一整套解决方案,用于设计、执行和管理业务流程。jbpm不仅支持BPMN(Business Process Model and Notation)...
**JBPM工作流详解** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了一整套解决方案,用于设计、执行和管理业务流程。在本示例中,我们将深入探讨如何利用JBPM实现销售批复这一具体...
【jbpm工作流引擎介绍】 工作流引擎是用于自动化业务流程的软件系统,它通过预定义的流程模版,管理并执行诸如请假、报销、审批等业务操作。工作流引擎的核心功能包括流程定义、执行、管理和监控。在业界,工作流...
在这个名为"企业OA 完整的jbpm工作流实例"的项目中,开发者使用了Java SSH框架来构建了一个集成jbpm的工作流系统,特别适合初学者了解和学习工作流的实现。 SSH框架是Struts、Spring、Hibernate三个开源项目的首...
### jBPM4工作流应用开发指南:深入解析工作流技术与企业现代化管理 #### 工作流概览 工作流技术,作为一种先进的自动化手段,旨在优化和加速业务流程的执行,通过计算机辅助或自动化的手段,确保业务过程在正确的...
##### 2.2 对JBPM工作流的二次开发 - **功能扩展**:根据业务需求,开发新的功能模块,如自定义活动类型、动态任务分配等。 - **流程定义工具**:设计图形化界面工具,简化流程的设计与维护过程。 - **流程实例监控...
【jbpm工作流引擎介绍】 工作流引擎是用于自动化业务流程的软件,它负责定义、执行和管理这些流程。在企业环境中,常见的业务流程包括请假、报销、公文审批等。工作流引擎通过内置的人工任务功能,确保在流程自动化...
Struts、Hibernate、Spring 和 jBPM 是四个在企业级应用开发中广泛使用的开源框架,它们结合在一起可以构建出高效且灵活的智能工作流系统。下面将分别介绍这些技术及其在工作流系统中的作用。 **Struts** Struts 是...
jBPM4.4工作流开发指南 jBPM4.4是一种流行的工作流引擎,它提供了一个强大且灵活的工作流管理系统。本指南将详细介绍jBPM4.4的安装、部署、使用、开发和原理等方面的知识点。 一、开发环境搭建 要开发jBPM4.4工作...
**JBPM综合实例:OA工作流系统源码分析** JBPM(Java Business Process Management)是一个开源的工作流程管理系统,它提供了一套完整的业务流程自动化解决方案,包括流程设计、部署、执行、监控和管理等功能。在本...
将Jbpm工作流与SSH框架集成,可以实现业务逻辑和数据持久化的高效协同,为复杂的企业应用提供流畅的流程控制。 集成Jbpm工作流和SSH框架的过程主要包括以下几个步骤: 1. **环境准备**:首先,确保已下载并安装了...
配置文件是JBPM工作流框架的重要组成部分,它定义了JBPM的运行环境,并决定了如何与数据库交互以及其他系统服务的集成方式。 - **配置文件的重要性**:配置文件对于JBPM而言至关重要,它是工作流组件的一个主要入口...
这个工作流可能涵盖了文章的提交、审核、审批和发布等一系列步骤,通过jBPM定义和控制这些步骤的顺序和条件。同时,Struts处理用户请求,Spring负责组件管理,Hibernate管理数据持久化,整个系统协同工作,实现智能...
流程调度控制是工作流引擎的核心,JBPM中的运行标记(token)代表流程实例的一次执行,维护着流程设计的结构。流程实例的每个步骤都由工作流引擎根据流程定义自动控制,确保流程按照预定规则顺畅运行。 此外,任务...
这些库文件确保了jbpm-designer能够正确解析和执行工作流定义,同时也支持与其他系统和服务的集成。 META-INF目录则是Java类加载机制所必需的,其中的MANIFEST.MF文件描述了jar包的元数据,如版本信息、依赖关系等...
【jbpm4.4+s2sh请假流程例子】是一个典型的结合了jbpm4.4工作流引擎和Struts2、Spring、Hibernate(S2SH)框架的实战项目,旨在演示如何在企业级应用中实现一个完整的请假流程。在这个例子中,jbpm4.4作为流程管理的...
### JBPM工作流管理系统知识点详解 #### 一、基本流程概念与实例执行概念 JBPM(JBoss Business Process Management)是Red Hat旗下的一款开源工作流引擎,它支持BPMN 2.0标准,用于自动化业务流程。JBPM提供了...