- 浏览: 163630 次
- 性别:
- 来自: 北京
最新评论
-
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)
好像源代码功能有点问题.
/*
* 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.*;
import org.jbpm.graph.def.*;
import org.jbpm.graph.exe.*;
/**
* http://is.tm.tue.nl/research/patterns/download/swf/pat_5.swf
*
* <p>in jbpm every node has an implicit merge in front of it.
* so it's not necessary to use the merge node. in fact, i can
* not think of a situation where implicit merge nodeMap are not
* sufficient. for the sake of workflow patterns, we leave if in.
* jbpm supports merging of both alternative paths of execution
* and concurrent paths of execution.
* </p>
*
* <p>first the merge node is demonstrated exactly as in the pattern.
* then the implicit variant is demonstrated, then the merging of
* concurrent paths is demonstrated.
* </p>
*/
public class Wfp05SimpleMergeTest extends TestCase {
private static ProcessDefinition simpleMergeProcessDefinition = createSimpleMergeProcessDefinition();
public static ProcessDefinition createSimpleMergeProcessDefinition() {
ProcessDefinition pd = new ProcessDefinition(
new String[]{"start-state start",
"state a",
"state b",
"merge xor",
"state c"},
new String[]{"start --to a--> a",
"start --to b--> b",
"a --> xor",
"b --> xor",
"xor --> c"});
return pd;
}
public void testSimpleMergeScenario1() {
ProcessDefinition pd = simpleMergeProcessDefinition;
ProcessInstance pi = new ProcessInstance( pd );
pi.signal("to a");
Token root = pi.getRootToken();
assertSame( pd.getNode("a"), root.getNode() );
root.signal();
assertSame( pd.getNode("c"), root.getNode() );
}
public void testSimpleMergeScenario2() {
ProcessDefinition pd = simpleMergeProcessDefinition;
ProcessInstance pi = new ProcessInstance( pd );
pi.signal("to b");
Token root = pi.getRootToken();
assertSame( pd.getNode("b"), root.getNode() );
root.signal();
assertSame( pd.getNode("c"), root.getNode() );
}
private static ProcessDefinition implicitMergeProcessDefinition = createImplicitMergeProcessDefinition();
public static ProcessDefinition createImplicitMergeProcessDefinition() {
ProcessDefinition pd = new ProcessDefinition(
new String[]{"start-state start",
"state a",
"state b",
"state c"},
new String[]{"start --to a--> a",
"start --to b--> b",
"a --> c",
"b --> c"});
return pd;
}
public void testImplicitMergeScenario1() {
ProcessDefinition pd = implicitMergeProcessDefinition;
ProcessInstance pi = new ProcessInstance( implicitMergeProcessDefinition );
pi.signal("to a");
Token root = pi.getRootToken();
assertSame( pd.getNode("a"), root.getNode() );
root.signal();
assertSame( pd.getNode("c"), root.getNode() );
}
public void testImplicitMergeScenario2() {
ProcessDefinition pd = implicitMergeProcessDefinition;
ProcessInstance pi = new ProcessInstance( implicitMergeProcessDefinition );
pi.signal("to b");
Token root = pi.getRootToken();
assertSame( pd.getNode("b"), root.getNode() );
root.signal();
assertSame( pd.getNode("c"), root.getNode() );
}
}
createSimpleMergeProcessDefinition()
创建如下流程定义文件
testSimpleMergeScenario1()
节点执行顺序
start --> a --> xor --> c
testSimpleMergeScenario2()
start --> b --> xor --> c
createImplicitMergeProcessDefinition()
创建如下流程定义文件
testImplicitMergeScenario1()
节点执行顺序
start --> a --> c
testImplicitMergeScenario2()
节点执行顺序
start --> b --> c
以上是对基本控制流程的一些说明, 本人水平有限, 难免有不当之处. 欢迎批评指正.
/*
* 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.*;
import org.jbpm.graph.def.*;
import org.jbpm.graph.exe.*;
/**
* http://is.tm.tue.nl/research/patterns/download/swf/pat_5.swf
*
* <p>in jbpm every node has an implicit merge in front of it.
* so it's not necessary to use the merge node. in fact, i can
* not think of a situation where implicit merge nodeMap are not
* sufficient. for the sake of workflow patterns, we leave if in.
* jbpm supports merging of both alternative paths of execution
* and concurrent paths of execution.
* </p>
*
* <p>first the merge node is demonstrated exactly as in the pattern.
* then the implicit variant is demonstrated, then the merging of
* concurrent paths is demonstrated.
* </p>
*/
public class Wfp05SimpleMergeTest extends TestCase {
private static ProcessDefinition simpleMergeProcessDefinition = createSimpleMergeProcessDefinition();
public static ProcessDefinition createSimpleMergeProcessDefinition() {
ProcessDefinition pd = new ProcessDefinition(
new String[]{"start-state start",
"state a",
"state b",
"merge xor",
"state c"},
new String[]{"start --to a--> a",
"start --to b--> b",
"a --> xor",
"b --> xor",
"xor --> c"});
return pd;
}
public void testSimpleMergeScenario1() {
ProcessDefinition pd = simpleMergeProcessDefinition;
ProcessInstance pi = new ProcessInstance( pd );
pi.signal("to a");
Token root = pi.getRootToken();
assertSame( pd.getNode("a"), root.getNode() );
root.signal();
assertSame( pd.getNode("c"), root.getNode() );
}
public void testSimpleMergeScenario2() {
ProcessDefinition pd = simpleMergeProcessDefinition;
ProcessInstance pi = new ProcessInstance( pd );
pi.signal("to b");
Token root = pi.getRootToken();
assertSame( pd.getNode("b"), root.getNode() );
root.signal();
assertSame( pd.getNode("c"), root.getNode() );
}
private static ProcessDefinition implicitMergeProcessDefinition = createImplicitMergeProcessDefinition();
public static ProcessDefinition createImplicitMergeProcessDefinition() {
ProcessDefinition pd = new ProcessDefinition(
new String[]{"start-state start",
"state a",
"state b",
"state c"},
new String[]{"start --to a--> a",
"start --to b--> b",
"a --> c",
"b --> c"});
return pd;
}
public void testImplicitMergeScenario1() {
ProcessDefinition pd = implicitMergeProcessDefinition;
ProcessInstance pi = new ProcessInstance( implicitMergeProcessDefinition );
pi.signal("to a");
Token root = pi.getRootToken();
assertSame( pd.getNode("a"), root.getNode() );
root.signal();
assertSame( pd.getNode("c"), root.getNode() );
}
public void testImplicitMergeScenario2() {
ProcessDefinition pd = implicitMergeProcessDefinition;
ProcessInstance pi = new ProcessInstance( implicitMergeProcessDefinition );
pi.signal("to b");
Token root = pi.getRootToken();
assertSame( pd.getNode("b"), root.getNode() );
root.signal();
assertSame( pd.getNode("c"), root.getNode() );
}
}
createSimpleMergeProcessDefinition()
创建如下流程定义文件
xml 代码
- <process-definition name="process">
- <start-state name='start'>
- <transition name='to a' to='a' />
- <transition name='to b' to='b' />
- </start-state>
- <state name='a'>
- <transition to='xor' />
- </state>
- <state name='b'>
- <transition to='xor' />
- </state>
- <state name='xor'>
- <transition to='c' />
- </state>
- <state name='c' />
- </process-definition>
testSimpleMergeScenario1()
节点执行顺序
start --> a --> xor --> c
testSimpleMergeScenario2()
start --> b --> xor --> c
createImplicitMergeProcessDefinition()
创建如下流程定义文件
xml 代码
- <process-definition name="process">
- <start-state name='start'>
- <transition name='to a' to='a' />
- <transition name='to b' to='b' />
- </start-state>
- <state name='a'>
- <transition to='c' />
- </state>
- <state name='b'>
- <transition to='c' />
- </state>
- <state name='c' />
- </process-definition>
testImplicitMergeScenario1()
节点执行顺序
start --> a --> c
testImplicitMergeScenario2()
节点执行顺序
start --> b --> c
以上是对基本控制流程的一些说明, 本人水平有限, 难免有不当之处. 欢迎批评指正.
发表评论
-
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 4223鉴别器(Discriminator) Description ... -
jbpm 与工作流模式 多路聚合(Multiple Merge)
2006-11-27 14:06 2941多路聚合(Multiple Merge) Descripti ... -
jbpm与工作流模式 同步汇聚(Synchronizing Merge)
2006-11-24 18:56 2136同步汇聚(Synchronizing Me ... -
jbpm 使用日记10
2006-11-24 18:05 1463日期: 第五周. 第五天. 经过了近一个多月的努 ... -
jbpm 使用日记9
2006-11-21 16:24 2507日期: 第五周 第 ... -
jbpm 使用日记8
2006-11-20 15:59 1416jbpm 用户组织结构 日期: 第五周, 第一天 ... -
jbpm 与 工作流模式 多路选择(Multiple Choice)
2006-11-17 16:01 7948多路选择(Multiple Choice) Descript ... -
jbpm 与 工作流模式 基本控制模式(二)
2006-11-16 20:18 5591xml 代码 <process-defi ... -
jbpm 与 工作流模式 基本控制模式(一)
2006-11-16 16:17 10549工作流模式 本文以jdpl/jar/sr ... -
jbpm 使用日记7
2006-11-15 18:26 1172日期: 第四周 第二天 继续了一天理论知识学 ... -
jbpm 使用日记6 理论知识学习.
2006-11-13 10:54 1560日期: 第四周.第一天 经过jbpm 的一段时间研 ... -
jbpm 使用日记5 一个简单会签示例
2006-11-10 15:52 10049经过3周的努力,终于看到点收获的希望. 基本实现目前项目 ... -
jbpm 使用日记4
2006-11-09 17:49 1561用了整整一天的时间, 实现了个比较简单的会签的功能. ... -
jbpm 使用日记3
2006-11-08 12:01 5479又用了3天,终于对jbpm 集成有了一个比较明确的思路. ... -
jbpm 使用日记2
2006-11-02 14:39 1809改写 jbpm 自带的 应用 jsf 遇到很多问题和工作量. ... -
jbpm 使用日记1
2006-11-01 10:56 2021进度. 1.使用 jbpm 3.1.2 build jbpm. ...
相关推荐
**jbpm工作流简介** jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了一整套解决方案,用于设计、执行和管理业务流程。jbpm不仅支持BPMN(Business Process Model and Notation)...
【jbpm工作流引擎介绍】 工作流引擎是用于自动化业务流程的软件系统,它通过预定义的流程模版,管理并执行诸如请假、报销、审批等业务操作。工作流引擎的核心功能包括流程定义、执行、管理和监控。在业界,工作流...
**JBPM工作流详解** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了一整套解决方案,用于设计、执行和管理业务流程。在本示例中,我们将深入探讨如何利用JBPM实现销售批复这一具体...
在这个名为"企业OA 完整的jbpm工作流实例"的项目中,开发者使用了Java SSH框架来构建了一个集成jbpm的工作流系统,特别适合初学者了解和学习工作流的实现。 SSH框架是Struts、Spring、Hibernate三个开源项目的首...
### jBPM4工作流应用开发指南:深入解析工作流技术与企业现代化管理 #### 工作流概览 工作流技术,作为一种先进的自动化手段,旨在优化和加速业务流程的执行,通过计算机辅助或自动化的手段,确保业务过程在正确的...
- **完成对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而言至关重要,它是工作流组件的一个主要入口...
基于SOA和JBPM的工作流引擎模型包含三个主要部分:服务提供者、服务请求者和服务代理。服务提供者是工作流引擎,它将流程定义转换为XML格式的流程实例,并通过Web服务接口发布。服务请求者寻找并绑定所需服务,与...
这个工作流可能涵盖了文章的提交、审核、审批和发布等一系列步骤,通过jBPM定义和控制这些步骤的顺序和条件。同时,Struts处理用户请求,Spring负责组件管理,Hibernate管理数据持久化,整个系统协同工作,实现智能...
这些库文件确保了jbpm-designer能够正确解析和执行工作流定义,同时也支持与其他系统和服务的集成。 META-INF目录则是Java类加载机制所必需的,其中的MANIFEST.MF文件描述了jar包的元数据,如版本信息、依赖关系等...
例如,Spring可以通过AOP来插入工作流的控制,Struts可以处理流程中的用户交互,而Hibernate则负责流程中涉及的数据操作。jbPM的流程定义文件(.bpmn或.bpmn2)可以被Spring管理,流程的启动、审批等操作可以通过...
【jbpm4.4+s2sh请假流程例子】是一个典型的结合了jbpm4.4工作流引擎和Struts2、Spring、Hibernate(S2SH)框架的实战项目,旨在演示如何在企业级应用中实现一个完整的请假流程。在这个例子中,jbpm4.4作为流程管理的...