我们要把 processdefinition.xml 的流程定义的数据部署到数据库中,因为 jBPM 在正式运行的时候不是去读 processdefinition.xml 文件,而是去读数据库中的流程定义。 这里写了一个个 JUnit 程序来部署 processdefinition.xml ,当然你用普通的 Java Main 也可以。
package com.sample;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import junit.framework.TestCase;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.graph.def.ProcessDefinition;
/**
* 部署 processdefinition.xml
*
* @author chengang
*
*/
public class DeployProcessTest extends TestCase {
/**
* 在本方法执行完毕后,检查 jbpm_processdefinition 表会多了一条记录
*
* @throws FileNotFoundException
*/
public void testDeployProcessDefinition() throws FileNotFoundException {
// 从 jbpm.cfg.xml 取得 jbpm 的配置
JbpmConfiguration config = JbpmConfiguration.getInstance ();
// 创建一个 jbpm 容器
JbpmContext jbpmContext = config.createJbpmContext();
// 由 processdefinition.xml 生成相对应的流程定义类 ProcessDefinition
InputStream is = new FileInputStream("processes/simple/processdefinition.xml" );
ProcessDefinition processDefinition = ProcessDefinition.parseXmlInputStream (is);
// 利用容器的方法将流程定义数据部署到数据库上
jbpmContext .deployProcessDefinition(processDefinition);
// 关闭 jbpmContext
jbpmContext .close();
}
}
运行此程序,在控制台打印了一些日志,通过。如果出错,仔佃阅读出错信息以判断错误原因,并确定你按照前面两节:“修改 hibernate.cfg.xml ”和“完善库引用”的内容做好了设置。
无论是 MySQL 还是 Oracle ,查询 jbpm_processdefinition 表,你会发现多了一条记录,如下图 ( 以 PLSQL Developer 的显示为例 )
依次检查各表我们可以发现有如下变化:
并由此简单判断出各表的作用,表中各字段的作用由字段名也能知晓一二。
jbpm_processdefinition |
一个流程定义文件对应一条记录,可记录多个流程定义文件,可记录一个流程定义文件的对个版本。 |
jbpm_action |
记录 ActionHandler 的对象实例(以名称为标识) |
jbpm_delegation |
记录了 ActionHandler 全类名,以便于用反射方式来加载 |
jbpm_envent |
它的 transition 引用了 Jbpm_transition 表的 id ,再看其它字段,估计此表是表示流程转向事件的一个实例,或者是一个各表之间的联接表。 |
jbpm_node |
流程结点 |
jbpm_transition |
流程的转向定义 |
jbpm_variableaccess |
流程中携带的变量。 ACCESS 字段是这些变量的读写权限 |