工作流雖然還在不成熟的發(fā)展階段,甚至還沒有一個公認的規(guī)范標準。但其應(yīng)用卻已經(jīng)在快速展開,這說明市場對工作流框架的需求是急迫而巨大的。
我們公司的后臺短信管理系統(tǒng)涉及短信編發(fā)、領(lǐng)導層層審核等操作,這是一個比較典型的工作流系統(tǒng)。過去我們用的工作流引擎是 shark ,然后在使用后發(fā)現(xiàn)其過于龐大,后臺數(shù)據(jù)庫操作頻繁而未進行優(yōu)化,直接導致的后果就是前臺操作緩慢。于是經(jīng)研究決定,將工作流引擎由 shark 換成 jBPM 。
jBPM 之前是一個開源軟件,后加入 JBoss 組織。正好我們公司也是用 JBoss 的。不過 jBPM 并沒有綁定在 JBOSS 上, Tomcat 等也可以使用它。
jBPM 的正處在不斷發(fā)展中,做為開源軟件的特點,其設(shè)計變化往往很大。所以一些過去的資料可能已經(jīng)不適用了。于是作者根據(jù)自己的使用經(jīng)驗,重新整理出這份文檔,以備學習參考。
注:本文使用的 jBPM 版本為
環(huán)境準備
1、安裝JDK
所有 JAVA 開發(fā)第一個需要安裝的,沒什么好說的。記得把系統(tǒng)變量 JAVA_HOME 設(shè)上。
2、安裝Ant
Ant 是使用 jBPM 必須的一個工具。 jBPM 中的很多操作都要用到 Ant 。
安裝方法:
( 1 )先下載: http://archive.apache.org/dist/ant/binaries/ ,選一個如: apache-ant-
( 2 )解壓到 D:\ant (當然其他目錄也可以)。
( 3 )設(shè)置如下系統(tǒng)變量: ANT_HOME=d:\ant 。
( 4 )把 %ANT_HOME%\bin 加入到系統(tǒng)變量 PATH 中。
3、安裝Eclipse
Eclipse 不是開發(fā) jBPM 必須的工具,但它是對 jBPM 開發(fā)很有幫助的工具,特別是 jBPM 提供了一個 Eclipse 插件用來輔助開發(fā) jBPM 。關(guān)于 Eclipse 的安裝不贅述了,本文用的版本是: Eclipse3.2
安裝 jBPM
jBPM 的下載地址: http://www.jboss.com/products/jbpm/downloads
l JBoss jBPM 是 jBPM 的軟件包
l JBoss jBPM Starters Kit 是一個綜合包,它包括了 jBPM 軟件包、開發(fā)插件、一個配置好了的基于 JBoss 的 jBPM 示例、一些數(shù)據(jù)庫配置文件示例。
l JBoss jBPM Process Designer Plugin 是輔助開發(fā) jBPM 的 Eclipse 插件。
l JBoss jBPM BPEL Extension jBPM 關(guān)于 BPEL 的擴展包
本指南選擇下載: JBoss jBPM Starters Kit 。下載后解壓到 D:\jbpm-starters-kit-3.1 ,目錄下含有五個子目錄:
l jbpm jBPM 的軟件包
l jbpm-bpel 只含有一個網(wǎng)頁
l jbpm-db 各種數(shù)據(jù)庫 hibernate 配置文件示例,有些還包含了相應(yīng)的 jdbc 驅(qū)動程序。
l jbpm-designer 輔助開發(fā) jBPM 的 Eclipse 插件,具體在 jbpm-gpd-feature 子目錄中
l jbpm-server 一個已經(jīng)配置好了的基于 JBoss 的 jBPM 示例 .
感覺下工作流
前面我們說了,在 JBoss jBPM Starters Kit 的 jbpm-server 目錄是一個已經(jīng)配置好的了 jBPM 示例,那么讓我們來感覺一下 jBPM 做出的東西吧。
雙擊 jbpm-server 目錄下的 start.bat 文件,啟動 JBoss 服務(wù)。這時會打開一個 DOS 窗口,啟動完成后,日志會不斷輸出,其中最后一句是“ 13:55:39,937 DEBUG [StaticNotifier] going to wait for (CMD_EXECUTOR, java.lang.Object@1df59bd) ”,這表示 jBPM 在開始工作了,它不斷進行輪詢。
打開網(wǎng)頁: http://localhost:8080/jbpm/ 得到如下畫面
這是一個已經(jīng)用 jBPM 開發(fā)好的用戶定單流程,具有下單、審核、估價等流程。它所用的數(shù)據(jù)庫是一個內(nèi)置的數(shù)據(jù)庫。
以 cookie monster 用戶登錄,選擇“ create new web sale order ”可以創(chuàng)建一個定單。如下圖所示,在圖左邊是填寫的定單情況,右邊一整個定貨流程的示意圖,紅色框表示流程進行到哪一步了。填寫好定單好,選擇“ Save and Close Task ”,完成定單提交。
選擇右上角的“ Login as another user ”以另外一個用戶名 ernie 登錄。這時可以看到 ernie 用戶的任務(wù)列表中多了一項。
點進去后,顯示如下畫面。這個示例對中文的支持不好,全都顯示成了 unicode 碼了。不管這什么多,反正知道是這么回事就行了。在 comment 項填寫意見,選 OK 按鈕,進入到下一步。如果選擇 more info needed 按鈕,則打回給 cookie monster 用戶修改定單。
下面的流程,這里就不再贅述了。在這個很標準的工作流示例中,我們基本可以看到 jBPM 的應(yīng)用范圍還是比較廣的。而且從這個示例,我們是看不出有 jBPM 的,也就是說 jBPM 在后臺起著作用。
從這個例子,還看不出 jBPM 的優(yōu)勢。不過,如果在一個流程不確定,經(jīng)常需要變動的項目中, jBPM 的好處將會顯然出來。應(yīng)用 jBPM 后,改變流程只需改變流程描述文件,這將在后面的內(nèi)容提到。
這是一個已做好的示例,接下來我們將仿造這個實例來開發(fā)一個請假流程。
作者簡介
陳剛,廣西桂林人,著作有《Eclipse從入門到精通》