论坛首页 Java企业应用论坛

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

浏览 2778 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-04-03   最后修改:2011-04-04
1.建立一个jbpm project,这里就不作讲解。

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

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



代码如下:
<?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());
	}
}


  • 大小: 41.9 KB
   发表时间:2011-05-02  
如果每一个流程都需要个对应的代码来控制,是否显得太麻烦了?
0 请登录后投票
   发表时间:2011-05-06  
#  ProcessDefinition processDefinition = ProcessDefinition 
#                 .parseXmlResource("helloworld/processdefinition.xml"); 

可否把JBPM解析XML文档的代码介绍一下,大家对这个比较有兴趣
0 请登录后投票
   发表时间:2011-06-14  
是否可以推出一个JBPM的常用流程图的运行控制代码集合呢? 方便大家使用,而不是每一次画图都要自己重新写一段代码
0 请登录后投票
   发表时间:2011-06-14  
解析XML那部分与Spring的处理方式类似吗?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics