上接 : jBPM開發入門指南(3)
6.5 部署processdefinition.xml
我們要把 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 ”和“完善庫引用”的內容做好了設置。
6.6 從數據庫中的查看部署效果
無論是 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 字段是這些變量的讀寫權限 |