上接 : 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;
public class DeployProcessTest extends TestCase {
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 字段是這些變量的讀寫權限 |