package org.jbpm.tutorial.helloworld;
import junit.framework.TestCase;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
public class HelloWorldTest extends TestCase {
public void testHelloWorldProcess() {
/*
这个段测试方法演示了一个流程的在代码中以字符串形式定义和这个流程定义的具体执行。
这个流程定义包含三个节点:一个未命名的开始状态(start-state),
一个名字为's'的状态(state)和一个名字为'end'的结束状态(end-state)。
下一行的功能是把一段xml文本解析为一个ProcessDefinition,
一个ProcessDefinition是一个java对象的形式对流程的正式的描述。
*/
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>"
);
/*
下边的一行根据流程定义构造了的一个具体的执行实例。 构造以后,执行的流程就有了一个被定位在开始
状态(start-state)上的主要的执行路径
*/
ProcessInstance processInstance =
new ProcessInstance(processDefinition);
/*
构造以后,执行的流程就有了一个主要的执行路径(root token)
*/
Token token = processInstance.getRootToken();
/*
当然,构造以后,流程定义的主要的执行路径被定位在开始状态(start-state)
*/
assertSame(processDefinition.getStartState(), token.getNode());
/*
开始流程执行,通过默认的转换(transition)离开开始状态(start-state)
*/
token.signal();
/*
直到运行的流程进入一个等待状态,signal方法将一直被阻塞,运行的流程将要进入第一个等待状态:状
态‘s’.因此现在主要的执行路径,定位到了状态‘s’上。
*/
assertSame(processDefinition.getNode("s"), token.getNode());
/*
执行signal,流程将继续执行,将通过默认的转换(transition)离开状态‘s’
*/
token.signal();
/*
流程实例已经到达了结束状态。
*/
assertSame(processDefinition.getNode("end"), token.getNode());
}
}