`
royzhou1985
  • 浏览: 249649 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JBPM-HelloWorld

    博客分类:
  • JBPM
阅读更多
在Eclipse下创建一个新的process-project工程jbpm-test,目录结构如下图所示:

可以看出,通过前面指定jbpm的运行环境,工程自动为我们引入了第三方jar包和需要的配置文件,这个我喜欢,哈,不用自己去导入那么多的jar包,同时工程中还自动生成了一个名叫sample的流程定义文件及其相关的测试用例。使用eclipse流程设计器打开这个processdefinition.xml文件,就可以看到流程设计器的界面:

打开junit测试用例类SimpleProcessTest运行测试用例,可以得到如下结果:


具体的代码我们暂时不需要去理会。下面我们开始我们的HelloWorld之旅。

新建一个helloworld流程,New->Other->jBoss-jBpm->processdefinition,process-name为helloworld,finish之后我们来到流程设计界面,流程设计器分为上下两部分,上面是流程设计主框体,下面是一些属性的配置。虽然jboss为我们提供了流程设计器,但是它不能帮助我们完成全部的流程设计工作,实际开发中我们仍然需要手动去增加一些工作

对于任何流程,都必须有且只有一个start节点和一个end节点。如果缺少了其中一个,流程将不能正常运转。我们的helloworld流程还需要一个node节点和一个state节点
Node节点是JBPM中的自动类型节点,可以对它定义一个Action(实现ActionHandler接口),流程流转到node节点是将会触发Action的执行,然后流程就是处于等待状态,等待流程触发到下一个节点。注意,如果我们没有对Node节点设置action的话,流程将不会在这个节点停留,而是直接流往node节点的下一个节点。State节点与Node节点不同之处在于State节点没有自动流转的功能,必须通过代码触发流程流转。通过Transition指定流程流转的路径。

现在我们开始我们的helloworld流程的设计。Statr -> Node -> State -> End

对应的流程定义文件xml为:
<?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="node1"></transition>
	</start-state>
	<state name="state1">
		<transition to="end-state1"></transition>
	</state>
	<node name="node1">
		<transition to="state1"></transition>
	</node>
	<end-state name="end-state1"></end-state>
</process-definition>


下面我们编写一个测试类来测试我们的流程
package com.royzhou.test;

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

public class HelloWorld {
	
	public static void main(String[] args) {
		//获取流程定义
		ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("helloworld/processDefinition.xml");
		/**
		 * 生成流程实例
		 * 此时流程还没有开始流转
		 * 必须给令牌发送信令驱动流程流转
		 */
		ProcessInstance processInstance = new ProcessInstance(processDefinition);
		//得到流程令牌
		Token token = processInstance.getRootToken();
		
		//打印流程当前所处节点
		System.out.println("1:流程现在所处节点:" + token.getNode().getName());
		
		//触发流程流转到下一个节点Node
		token.signal();
		
		/**
		 * 注意因为Node节点没有设置Action
		 * 所以流程会自动流转到下一个节点
		 * 也就是State1
		 */
		System.out.println("2:流程现在所处节点:" + token.getNode().getName());
		
		//触发流程流转到下一个节点End
		token.signal();
		System.out.println("3:流程现在所处节点:" + token.getNode().getName());
		System.out.println("流程状态是否结束:" + token.getProcessInstance().hasEnded());
	}
}


运行上面的测试类,得到预期的输出结果:
1:流程现在所处节点:start-state1
2:流程现在所处节点:state1
3:流程现在所处节点:end-state1
流程状态是否结束:true
(测试例子中所使用的代码我们在后面的文章中会专门介绍)

通过helloworld的例子,相信大家已经对jbpm建立了一定的感觉了,不过应该还有很多不明白的东西,,  哈哈  ……  那就加油把 。。。


  • 大小: 49.1 KB
  • 大小: 17.7 KB
  • 大小: 9.7 KB
  • 大小: 8.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics