jBPM4開發入門指南
------------------------------------------------------------------------------------------
1.1、安裝JDK
------------------------------------------------------------------------------------------
1.2、安裝Ant
Ant 是使用 jBPM 必須的一個工具。 jBPM 中的很多操作都要用到 Ant 。
安裝方法:
( 1 )先下載: 為了執行ant指令碼,你需要1.7.0或更高版本的apache ant:
http://ant.apache.org/bindownload.cgi
( 2 )解壓到 D:/ant (當然其他目錄也可以)。
( 3 )設定如下系統變數: ANT_HOME=d:/ant 。
( 4 )把 %ANT_HOME%/bin 加入到系統變數 PATH 中。
安裝 jBPM
jBPM 的:http://sourceforge.net/projects/jbpm/files/
------------------------------------------------------------------------------------------
2 、建庫
MySQL 中建立一個庫,庫名: jbpmdb
3 、產生建表的 SQL 陳述式並建表
這個構建檔案${jbpm.home}/db/build.xml包含了指令碼 用來建立和刪除資料庫結構的操作。
進入到這個目錄下,運行ant -p 可以獲得更多細節。
在你的資料庫中建立表結構:
首先,更新${jbpm.home}/db/jdbc中的資料庫設定檔。
然後,在D:/jbpm-4.0/db/build.xml
<!-- DEFAULT PROPERTY VALUES -->
<property name="database" value="mysql" />
更改為
mysql
然後在db目錄下執行ant create.jbpm.schema
可以看到 MySQL 用戶端中執行“ mysql.create.sql ”指令碼,這樣
將在 jbpmdb 庫中建立一個個的資料表。
------------------------------------------------------------------------------------------
4
安裝 jBPM 4的 Eclipse 開發外掛程式
jBPM 4的 Eclipse 開發外掛程式 只有GPD
流程設計器(GPD)
圖形化流程設計器(GPD)使用Eclipse作為其平台, 並把GPD外掛程式安裝到eclipse上。
使用Eclipse軟體升級(Software Update)機制安裝設計器是非常簡單的。
在gpd目錄下有一個gpd/jbpm-gpd-site.zip檔案, 這就是更新網站(archived update site)的 壓縮包。
在Eclipse裡添加更新網站的方法:
協助 --> 安裝新軟體...
點擊 添加...
在 添加網站 對話方塊中,單擊 壓縮包...
找到 gpd/jbpm-gpd-site.zip 並點擊 '開啟'
點擊 確定 在 添加網站 對話方塊中,會返回到 '安裝'對話方塊
選擇出現的 jPDL 4 GPD 更新網站
點擊 下一步.. 然後點擊 完成
接受協議
當它詢問的時候重啟eclipse
5
配置jBPM運行時
點擊 Window --> Preferences
選擇 JBoss jBPM --> jBPM 4 --> Runtime Locations
點擊 Add...
在 Add Location 對話方塊中,輸入一個名字,比如 jbpm-4.0 然後點擊 Search...
在 Browse For Folder 對話方塊中,選擇你的jbpm根目錄,然後點擊 OK
點擊 OK 在 Add Location 對話方塊中
6
定義jBPM使用者庫
如何在你的工作空間定義一個使用者庫, 用來放置jBPM的庫檔案。 如果你建立一個新工程, 只需要將使用者庫全部添加到build path下
點擊視窗 --> 屬性(Windows --> Preferences)
選擇Java --> 建立路徑 --> 使用者類庫(Java --> Build Path --> User Libraries)
點擊建立(New)
類型名字jBPM Libraries
點擊添加JARs(Add JARs...)
找到jBPM安裝程式下的lib目錄
選擇lib下的所有jar檔案並點擊開啟(Open)
選擇jBPM Libraries作為入口
重新點擊添加JARs(Add JARs)
在jBPM的安裝程式的根目錄下選擇jbpm.jar檔案
點擊開啟(Open)
在jbpm.jar下選擇源碼附件(Source attachment)作為入口
點擊編輯(Edit)
在源碼附件的配置(Source Attachment Configuration)對話方塊中,點擊目錄(External Folder...)
找到jBPM安裝程式下的src目錄
點擊選擇(Choose)
點擊兩次'確定'(Ok)會關閉所有對話方塊
7 jBPM 的 demo
建立jBPM項目
主菜單“檔案->建立->項目”,在彈出的對話方塊裡,有“ java Project ”項
選上好,單擊“下一步”,起個名“ myjbpm ”,然後就可以單擊“完成”了。然後手動
建立src/test/config
copy
D:/jbpm-4.0/examples/src
2009-07-07 15:40 546 jbpm.cfg.xml
2009-07-07 15:40 1,085 jbpm.hibernate.cfg.xml
2009-07-07 15:40 72 jbpm.mail.properties
2009-07-07 15:40 418 jbpm.mail.templates.examples.xml
2009-07-07 15:40 637 logging.properties
到
config下
8 修改jbpm.hibernate.cfg.xml
hibernate.cfg.xml 的預設設定是用 HSQL ,這是一個記憶體資料庫,這種記憶體資料庫用來代替項
目實際所用的資料庫來做單元測試挺不錯的。不過我們這裡是要試試用 MySQL 、 Oracle ,那就改一下
設定吧。
註:配置值可參考 D:/jbpm-4.0/db/hibernate.cfg對應子目錄下的 hibernate.properties 文
件。
8.1 、 MySQL 的更改如下:
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpm</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
8.2 、 Oracle 的更改如下:
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property
name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property
name="hibernate.connection.url">jdbc:oracle:thin:@192.168.123.10:1521:wxxrDB</property>
<property name="hibernate.connection.username">xiong</property>
<property name="hibernate.connection.password">xiong</property>
如果你裝了 Oracle 的用戶端,並且 D:/oracle/ora92/network/ADMIN/tnsnames.ora 裡做了如下的設
置
WXXRDB_192.168.123.10 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.123.10)(PORT = 1521))
)
(CONNECT_DATA =
(SID = wxxrDB)
(SERVER = DEDICATED)
)
)
則 Oracle 的 hibernate.connection.url 項也可以設為: jdbc:oracle:oci:@WXXRDB_192.168.123.10
9 開始demo
10定義流程
流程的定義檔案是 pd.jpdl.xml ,這個是一個關鍵檔案, jBPM 4的很大一部份內容都是關於
它的。
------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<process name="pd" xmlns="http://jbpm.org/4.0/jpdl
">
<start name="start1" g="207,62,48,48">
<transition name="to state1" to="state1" g="-59,-17"/>
</start>
<end name="end1" g="208,293,48,48"/>
<state name="state1" g="185,155,92,52">
<transition name="to end1" to="end1" g="-47,-17"/>
</state>
</process>
------------------------------------------------------------------------------------------
說明:
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
OK ,背景程式就算寫完了(前台用戶端的程式還沒寫),下面開始部署。
11部署pd.jpdl.xml
我們要把pd.jpdl.xml 的流程定義的資料部署到資料庫中,因為 jBPM 在正式運行
的時候不是去讀 pd.jpdl.xml 檔案,而是去讀資料庫中的流程定義。 這裡寫了一個
JUnit 程式來部署 processdefinition.xml ,當然你用普通的 Java Main 也可以。
參考
D:/jbpm4/src/org/jbpm/examples/services/ServicesTest.java
------------------------------------------------------------------------------------------
在本方法執行完畢後,檢查jbpm4_deployment表會多了一條記錄
jbpm4_deployprop表會多了三條記錄,對應id,key,version
jbpm4_lob 表會多了一條記錄,儲存流程圖
package deploy;
import junit.framework.TestCase;
import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.ManagementService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
public class ServicesTest extends TestCase {
public void testObtainServicesAndDeployProcess() {
Configuration configuration = new Configuration();
ProcessEngine processEngine = configuration.buildProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ExecutionService executionService = processEngine.getExecutionService();
TaskService taskService = processEngine.getTaskService();
HistoryService historyService = processEngine.getHistoryService();
ManagementService managementService = processEngine.getManagementService();
// 開始部署一個新的流程檔案
String deploymentId = repositoryService.createDeployment()
// .addResourceFromClasspath("org/jbpm/examples/services/Order.jpdl.xml")
.addResourceFromClasspath("pd.jpdl.xml")
.deploy();
// repositoryService.deleteDeployment(deploymentId);
}
}
------------------------------------------------------------------------------------------
運行此程式,在控制台列印了一些日誌,通過。如果出錯,仔佃閱讀出錯資訊以判斷錯誤原因
12 從資料庫中的查看部署效果
無論是 MySQL 還是 Oracle ,查詢 jbpm4_deployment表,你會發現多了一條記錄
jbpm4_deployprop表會多了三條記錄,對應id,key,version
jbpm4_lob 表會多了一條記錄,儲存流程圖
Service就是PVM對外發布的服務,包括RepositoryService(比如部署jpdl檔案),
ExecutionService(負責管理執行),TaskService,ManagementService等等.可以說這是給使用者調用的API.比如我們看下他們的一些方法.
RepositoryService介面的一些方法:
public interface RepositoryService {
NewDeployment createDeployment();
ProcessDefinitionQuery createProcessDefinitionQuery();
...
}
ExecutionService的一些方法:
public interface ExecutionService {
ProcessInstance startProcessInstanceById(String processDefinitionId);
ProcessInstance signalExecutionById(String executionId);
...
}
ManagementService的介面:
public interface ManagementService {
void executeJob(long jobDbid);
JobQuery createJobQuery();
}
------------------------------------------------------------------------------------------
13 jBPM4 的用戶端開發
有了前面的 後台流程,我們就要開始用戶端程式了。正如前面提到的,本文不寫 JSP ,而
改採用 JUnit 的形式,輸出則用 System.out.println 。舉一反三,知道在方法中輸入及用 println
輸出,在 JSP 和 SWING 等 GUI 介面還不是一樣嘛。
這個 JUnit 用戶端,我們就借用建立項目時自動產生的 SimpleProcessTest.java 了,改寫後如下:
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
這個例子還是很簡單
不過沒關係。下面的
內容我將完成一個更完整的執行個體。