import junit.framework.TestCase;
import org.jbpm.context.exe.ContextInstance;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
public class ContextTest extends TestCase {
public void testContext(){
ProcessDefinition processDefinition=ProcessDefinition.parseXmlString(
"<process-definition>"+
" <start-state>"+
" <transition to='s'/>"+
" </start-state>"+
"<state name='s'>"+
" <transition to='end'/>"+
"</state>"+
" <end-state name='end' />" +
"</process-definition>"
);
//一个流程实例ProcessInstance就是某个流程定义的一次执行。一个流程定义ProcessDefinition可以有多个流程实例。
//当流程实例ProcessInstance创建的时候,一个主路径就随之创建,这个主路径称为root token。此时主路径指向开始节点start-state
ProcessInstance processInstance=new ProcessInstance(processDefinition);
//一个运行标记Token代表一个Process Definitio中的一个执行。token是运行时的概念,用来维护指向图节点的指针。
//token需要一个信号(signal)来让流程向前执行。当一个signal来到的时候。Token就会通过弧(transition)离开当前的节点走到下一个节点。
Token token=processInstance.getRootToken();
Token token2=new Token(processInstance);
ContextInstance contextInstance=processInstance.getContextInstance();
contextInstance.setVariable("amount",new Integer(500));
contextInstance.setVariable("reason", "i met my deadline");
token2.signal();
//processInstance.signal();
System.out.println(contextInstance.getVariable("amount"));
System.out.println(contextInstance.getVariable("reason"));
assertEquals(token2.getNode(), processDefinition.getNode("s"));
token2.signal();
//processInstance.signal();
assertEquals(contextInstance.getVariable("reason"),"i met my deadline");
System.out.println(token2.getNode().getName());
}
}
例子是jbpm中自带的。
驱动流程向下运行的方式上面采用
prcessInstance.signal();或token.signal();
通过查看流程实例ProcessInstance的源码可以发现
他的构造函数中会将成员变量rootToken初始化为rootToken=new Token(this);
this表示当前的流程实例对象;在调用processInstance.signal()方法时该方法的实现是
public void signal() {
if ( hasEnded() ) {
throw new IllegalStateException("couldn't signal token : token has ended");
}
rootToken.signal();
}
最终还是调用Token的signal()方法。
获得root Token的方式
Token token=processInstance.getRootToken();
Token token2=new Token(processInstance);
分享到:
相关推荐
个人学习jbpm的文档,其中包括一些bug的修改。主要以《jbpm流程》一书为参考
jbpm学习资料 1. 新建一个项目 2. 在项目里面添加流程定义,如下图所示:
最近通过使用jbpm,学习了一下,自己整理的一份jbpm的学习笔记,,希望对你们有帮助
3.4 学习使用JBPM控制台 11 3.5 学习使用drools-guvnor设计器 13 4 用TOMCAT+SSH+JOTM+MYSQL+JBPM移植DEMO 14 4.1 环境准备 14 4.1.1 安装JDK 14 4.1.2 安装Ant 14 4.1.3 安装Eclipse 15 4.1.4 安装Tomcat 15 4.1.5 ...
1 工作流的概念 5 2 工作流的过程 7 3 Jbpm4.4介绍 7 3.1工作流引擎 8 3.2jpdl 8 3.3数据库 8 3.3.1资源库和运行时表结构 8 3.3.2历史数据库表 9 3.3.3身份认证表 9 3.4jbpm.cfg.xml 9 3.5 jbpm.hibernate.cfg.xml ...
JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBPM是公开源代码项目,它使用要遵循 Apache ...
jBPM 即java Business Process Management,是基于java的业务流程管理系统,它是一组J2SE组件,可以作为J2EE应用集群部署。jBPM是公开源代码项目。jBPM是市面上相当流行的一款开源工作流引擎,引擎底层基于Active ...
Jbpm实例代码,供学习参考。里面包含源代码!
相关资料:《jBPM学习笔记(V3.2环境部署)》《jBPM学习笔记(流程设计与控制)》概述:jBPM(JBossBusinessProcessManagement业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易...
我感觉还不错,拿来和大家分享一下,通过xml配置实现
jbpm学习资料,对你有帮助!近几年来,工作流管理技术迅速发展,其产品广泛应用于办公自动化OA(Office Automation)、电子政务、计算机集成制造系统CIMS(Computer Integrated Manufacturing System)等领域。工作流...
这是本人学习jbpm以来看过的写的最有条理的一个例子,基于现在网上jbpm的例子比较的少,所以上传上来和大家一起分享
jbpm是一款免费开源的工作流引擎,虽然现在还不完善,但是用起来还是不错的..... 我学习jbpm的一些笔记心得
这是我自己在这里几天学习jbpm做的一个小实例,完全用JSP+JBPM,接下来我会和spring结合在一起,希望在学习的你有帮助
里面有关于jbpm4.4相关的文档,api,操作手册已经一个简单的web工程实例, 刚接触的人很有帮助
jBPM(JBoss Business Process Management业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。 jPDL是构建于jBPM框架上的流程语言之一。在jPDL...
本例子网上也有,只是有点问题,本人经过修改后想留给第一次学习jbpm的人,希望不让他们为一个问题而花费很长时间. 由于所有的jar包已上传,所以不在用QQ发jar包给各位下载的朋友, 请在以下页面下载本项目的jar包: ...
在学习jbpm5的过程中,发现很难找到一个合适的,能跑的起来的,整合ssh的例子,之前在csdn上花费不少分下了好多个,能跑起来的好像就1个,不是jar包不匹配就是些其他的莫名奇妙的错误,对应刚刚接触jbpm的人来说,一...
三、学习JPDL 11 3.1 、简介 11 3.2 、流程版本(Version) 11 3.3 、流程定义 12 3.3.1 process-definition(流程定义) 12 3.3.2 node(自动节点) 13 3.3.3 start-state(开始状态) 13 3.3.4 end-state(结束节点) 14 ...