这个指南将向你展示如何用jpdl创建基本的流程以及如何使用API管理运行期的执行。
这个指南的形式是解释一组示例,每个示例集中于一个特殊的主题,并且包含大量的注释,这些例子也可以在jBPM下载包的目录src/java.examples中找到。
最好的学习方法就是建立一个工程,并且通过在给定例子上做不同的变化进行实验。
对eclipse用户来说可以如下方式开始:下载jbpm-3.0-[version].zip并且解压到自己的系统,然后执行菜单“File”-->“Import…”-->“Existing Project into Workspace”,然后点击“Next”,浏览找到jBPM根目录,点击“Finish”。现在,在你的工作区中就有了一个jbpm.3工程,你可以在src/java.examples/…下找到本指南中的例子,当你打开这些例子时,你可以使用菜单“Run”-->“Run As…”-->“JUnit Test”运行它们。
jBPM包含一个用来创作例子中展示的XML的图形化设计器工具,你可以在“2.1 下载概述”中找到这个工具的下载说明,但是完成本指南不需要图形化设计器工具。
3.1 Hello World 示例
一个流程定义就是一个有向图,它由节点和转换组成。Hello world流程有三个节点,下面来看一下它们是怎样组装在一起的,我们以一个简单的流程作为开始,不用使用设计器工具,下图展示了hello world流程的图形化表示:

图 3. 1 hello world流程图
public void testHelloWorldProcess() {
 // 这个方法展示了一个流程定义以及流程定义的执行。
 // 这个流程定义有3个节点:一个没有命名的开始状态,
 // 一个状态“s”,和一个名称为“end”的结束状态。
 // 下面这行是解析一段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>"
 );
 
 // 下面这行是创建一个流程定义的执行。创建后,流程执行有一个
 // 主执行路径(=根令牌),它定位在开始状态。
 ProcessInstance processInstance =
      new ProcessInstance(processDefinition);
 
 // 创建后,流程执行有一个主执行路径(=根令牌)。
 Token token = processInstance.getRootToken();
 
 // 创建后,主执行路径被定位在流程定义的开始状态。
 assertSame(processDefinition.getStartState(), token.getNode());
 
 // 让我们开始流程执行,通过它的默认转换离开开始状态。
 token.signal();
 // signal 方法将会把流程阻塞在一个等待状态。
 
 // 流程执行进入第一个等待状态“s”,因此主执行路径现在定位
 // 在状态“s”。  
 assertSame(processDefinition.getNode("s"), token.getNode());
 
 // 让我们发送另外一个信号,这将通过使用状态“s”的默认转换
 // 离开状态“s”,恢复流程执行。
 token.signal();
 // 现在signal方法将返回,因为流程示例已经到达结束状态。  
 assertSame(processDefinition.getNode("end"), token.getNode());
}