深入浅出JBPM读书笔记(三)_helloworld

1.建立一个jbpm project,这里就不作讲解。

2.在项目的jpdl目录下建立一个名为helloworld的process Definition.也就是定义一个流程。并打开流程设计器。

3.在流程设计器中设计一个简单的流程图,如下图

深入浅出JBPM读书笔记(三)_helloworld

代码如下:
<?xml version="1.0" encoding="UTF-8"?>

<process-definition  xmlns="urn:jbpm.org:jpdl-3.2"  name="helloworld">

	<start-state name="start-state1">
		<transition to="state1"></transition>
	</start-state>

	<state name="state1">
		<transition to="node1"></transition>
	</state>

	<node name="node1">
		<transition to="state2"></transition>
	</node>

	<state name="state2">
		<transition to="end-state1"></transition>
	</state>

	<end-state name="end-state1"></end-state>

</process-definition>


4.节点讲解
Start节点:开始
End节点:结束
Node节点:自动类型的节点.
在该节点里可以定义一个Action,当流程到达该节点时会触发该Action的执行,然后流程就会停留在该节点上。
如果没有定义Action,到达该节点后不会停留,如果有定义事件就会触发相关事件,然后流转到下一个节点。
State节点:当流程走到State节点后不会自动往下运行,而会处于等待状态,直到通过代码触发后才会流转到下一个节点。
Transition:是流程节点之间流转路径,可以使流程从一个节点流转到另一个节点。

5.测试helloworld流程
package com.test;

import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
import org.junit.Test;

public class HelloWroldProcessTest {
	@Test
	public void testSimpleProcess() {
		//解析流程模板对应的XML文件来创建一个流程模板对象
		ProcessDefinition processDefinition = ProcessDefinition
				.parseXmlResource("helloworld/processdefinition.xml");
		//通过processDefinition创建一个流程实例
		ProcessInstance processInstance = processDefinition
				.createProcessInstance();
		
		//通过绝对路径读取流程模板XML文件生成流程模板对象
//		String processDefinitionFileLocation="D://myeclipse8.5/workspace/jpbm-test/src/main/jpdl/helloworld/processdefinition.xml";
//		try {
//			InputStream inputStream = new FileInputStream(new File(processDefinitionFileLocation));
//			ProcessDefinition processDefinition = ProcessDefinition.parseXmlInputStream(inputStream);
//		} catch (FileNotFoundException e) {
//			e.printStackTrace();
//		}

		Token token = processInstance.getRootToken();

		//因为只建立了流程实例,流程实例并没有向下流转,所以该实例停留在start-state1节点上
		System.out.println("1 当前流程所处的节点名称:" + token.getNode().getName());

		//让流程实例向下流转一步
		token.signal();
		
		//state1
		System.out.println("2 当前流程所处的节点名称:" + token.getNode().getName());

		token.signal();

		//自动执行node1节点,流程向下流转,停留在state2
		System.out.println("3 当前流程所处的节点名称:" + token.getNode().getName());

		token.signal();

		System.out.println("4 当前流程所处的节点名称:" + token.getNode().getName());

		//打印出当前流程是否结束
		System.out.println("5 当前流程状态:" + token.getProcessInstance().hasEnded());
	}
}


你可能感兴趣的:(xml,jbpm,JUnit,ITeye,读书)