Jbpm学习一


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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值