因为工作的关系,需要使用jbpm,可自己以前根本就没有接触过,算是从零开始吧。以后会记下的学习中的点滴,我使用的教程是《jBPM jPDL 用户开发手册 3.2.3 》的中译版,说实话,有的地方译的的确不怎么样,但总比自己慢慢看英文要快,现在讲的是效率,而且作者算是个有心的人。
下载:(jbpm sourceforge 文件列表)
jbpm-jpdl-suite-3.2.3.zip
没有什么特殊原因,教程中用的就是这个版本,配套嘛。
eclipse-jee-europa-winter-win32.zip
要使用jbpm 3.2.3的设计器插件,需要eclipse 3.3版本的支持,只能暂时搁置eclipse 3.5了。
安装:
当然,使用jbpm的前提是你已经安装并配置了jdk,这个不必多谈吧,
- 解压jbpm-jpdl-stuite-3.2.3.zip
- 解压eclipse-jee-europa-winter-win32.zip
- 安装图形设计器插件。
将jbpm-jpdl-stuite-3.2.3.zip解压后的designer目录下的eclipse文件夹中的内容复制到eclipse 3.3的根目录下,重启eclipse,即可完成插件的安装。插件安装后,可以在新建对话框中找到jbpm的相关项。
- 配置jBPM插件运行环境。
在Eclipse的“window > Preferences”中展开“JBoss jBPM”分支,添加一个Runtime Location,路径为jbpm-jpdl-stuite-3.2.3解压后的路径。可以在Server Deployment分支中看到jbpm的布署配置 。
Hello,World:
以教程中的Hello,World为例,流程如下。
在eclipse中新建一个“Process Project”项目,然后新建一个HelloWorld类。
package org.zym.helloworld;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
import junit.framework.TestCase;
public class HelloWorld extends TestCase {
public void testHelloWorldProcess() {
// 这个方法显示一个流程定义和一个流程定义的执行。
// 流程定义有三个节点:
// 未命名的start-state, state's'和命名为'end'的end-state节点
// 下一行解析xml文本到ProcessDefinition类
// ProcessDefinition是作为java对象的流程的正规描述。
String xml = "<process-definition>" + "<start-state>"
+ "<transition to='s'/>" + "</start-state>"
+ "<state name='s'>" + "<transition to='end'/>" + "</state>"
+ "<end-state name='end'/>" + "</process-definition>";
ProcessDefinition processDefinition = ProcessDefinition
.parseXmlString(xml);
// 下一行建立一个流程定义的执行,在创建后,流程执行有一个执行的主路径
// (=root token),定位在start-state节点位置。
ProcessInstance processInstance = new ProcessInstance(processDefinition);
// 创建流程执行的主路径(=root token)
Token token = processInstance.getRootToken();
// 在创建流程定义后,确定主路径牌开始状态节点处
assertSame(processDefinition.getStartState(), token.getNode());
// 让我们开始流程执行,通过它的缺省流程转换离开开始节点
token.signal();
// signal方法将阻止直到流程执行进入一个等待状态
// 所以执行的主路径现在定位在状态's'
assertSame(processDefinition.getNode("s"), token.getNode());
// 让我们发送一个信号。假设执行离开状态's'通过缺省的流程转换
token.signal();
// 现在信息方法返回,因为这个流程实例已经到达结束节点(end-state)
assertSame(processDefinition.getNode("end"), token.getNode());
}
}
使用JUnit运行这个hello,world即可。