基于JBPM的工作流應用的開發
利用JBPM開發一個工作流應用,相對于使用shark是比較簡單直觀的。我們之前提到過,一個工作流管理系統最基本的組件包括流程定義組件,流程執行組件和流程客戶端組件。下面從這三個方面看一下JBPM對開發工組流應用的支持。
1. ??流程的定義
JBPM
沒有采用WfMC提出的流程定義語言XPDL,而是自己開發了一種稱為JPDL的語言來定義流程。因此,在開發一個應用時我們最終需要生成一個符合該XML schema的文件processdefinition.xml來表示定義好的流程。它可以manually獲得,也可以使用可視化的定義工具自動生成。
JBPM
專門提供了一個開發流程的環境,稱為process development environment(pde)。可以
在
jbpm
根目錄下執行命令
ant create.pde
來生成
pde
工作目錄
。生成的包結構如下所示:
?????????Build.xml
文件用于配置一個流程,即利
用
ant
工具解析
processdefinition.xml
文件,并將運行流程時所需的相關信息存儲到數據庫中。
Lib
存放了開發和配置流程所需的全部庫文件,包括數據庫的
jdbc
驅動。
Src
包括開發和配置流程的全部源文件和所需資源。
Src/config
只有兩個文件,
jbpm.properties
和
log4j.properties
。其中,
jbpm.propertie
文件包含了數據庫的配置信息。因此,更換數據庫或數據庫的
jdbc
驅動都需要修改這里。
Scr/java
存放
java
源文件。
Src/process
存放工作流定義文件
(processdefinition.xml)
和相關的資源文件,如圖片和
form
文件。
Src/test
存放測試代碼。
Target/classes
是
src/java
中源碼的輸出目錄,存放編譯后的
class
文件。
Target/par
存放用命令
ant build.process.archives
生成的
par
包。
Par
包實際上就是把
src/process
中的流程定義及相關文件打包成
zip
形式存儲。
Target/test-classes
存放測試程序的編譯結果。
Target/test-report
存放測試報告。
2.?? 流程的執行
JBPM
把負責執行流程的類庫打包成jbpm.core.jar,它也是JBPM工作流引擎的核心。在開發一個工作流應用時,只需將該jar文件放到相應的lib目錄下面。而開發人員就可以專注于開發一個流程模型,完成對流程的定義,而無需過多考慮流程執行的細節。
3. ??流程的客戶端
客戶端組件的開發,需要一個應用服務器作為servlet container,我們這里選擇了tomcat。JBPM將開發一個webapp所需的類打包成jbpm.web.jar,包括自定義的tag和Struts用到的類等等。開發應用時,將該jar放到WEB-INF\lib下面就可以了。
一個基于工作流的webapp應用的開發和普通webapp的開發方式很相似。包結構也保持一貫作風:
??????
所以,我們需要做的主要工作是完成客戶端應用所需的
jsp
頁面的開發,可以選用
Struts
來進行開發。需要注意的是,我們要對
lib
目錄下的
jbpm.properties
文件進行配置,主要是對數據庫
jdbc
驅動的配置。
4. ?? 系統數據庫的創建
JBPM
可以支持多種數據庫系統,包括MSSQL,,Mysql,Oracle,hdbsql等。它提供了很靈活的配置方式,只需要修改jbpm.properties文件,同時將相應的JDBC Driver拷貝到lib目錄就可以了。利用ant的generate.ddl命令,JBPM還支持自動生成用于創建系統表的sql腳本,而且可以生成對應于各種數據庫系統的腳本,非常便于數據庫系統的更換和系統數據庫的創建。
5.?? 開發過程
環境配置如下:
JBPM 2.0
Ant
Tomcat
SQL Server 2000
SQL Server 2000 Driver for JDBC
仍以之前演示過的request a payraise為例(見下圖),介紹一下利用JBPM開發一個工作流應用需要完成的工作。
1)?????? 首先,我們需要完成流程的定義。這不僅包括定義processdefinition.xml,還要對流程執行時使用到的其他資源進行定義。比如,在web應用中用到的圖片,form等。還需要配置form.xml,該文件確定了流程中不同狀態和form的關系,如request a payraise狀態下,需要如下圖所示的form:
補充Processdefinition.xml
示例:
<?xml version="1.0" encoding="UTF-8"?>
<swimlane name="requester" />
??? <delegation class="org.jbpm.delegation.assignment.ActorAssignmentHandler">cg</delegation>
</swimlane>
??? <delegation class="org.jbpm.delegation.assignment.ActorAssignmentHandler">pf</delegation>
</swimlane>
<!-- START-STATE -->
? <start-state name="request a payraise" swimlane="requester">
??? <transition to="evaluating"/>
? </start-state>
<!-- NODES -->
? <state name="evaluating">
??? <assignment swimlane="boss" />
??? <transition name="approve"???? to="fork"/>
??? <transition name="disapprove"? to="done"/>
? </state>
?
? <fork name="fork">
? ?<transition to="updating erp asynchronously" />
? ?<transition to="treating collegues on cake and pie" />
? </fork>
????? <state name="updating erp asynchronously">
??? <assignment swimlane="erp operator" />
??? <transition to="join" />
? </state>
????? <state name="treating collegues on cake and pie">
??? <assignment swimlane="requester" />
??? <transition to="join" />
? </state>
?
? <join name="join">
? ?<transition to="done" />
? </join>
<!-- END-STATE -->
? <end-state name="done" />
</process-definition>
2)??????
有了processdefinition.xml文件,我們就可以配置流程。即使用ant命令,解析這個文件并且將執行時需要的信息存儲在數據庫中。如下圖:
3)??????
我們無需關心流程將怎么執行,完全交給jbpm.core.jar就好。
4)??????
剩下的另外一項比較繁重的工作就是開發一個用于該流程的客戶端應用。前面已經提到過,
我們需要做的主要工作是完成客戶端應用所需的
jsp
頁面的開發。包括登錄頁面,查看自己的
tasklist
頁面,執行
task
的頁面等。除此之外,還可以通過日志來完成流程的監控和管理界面。這些都由應用的需求來決定。
posted on 2006-10-08 18:14 nbt 閱讀(1320) 評論(1) 編輯 收藏 所屬分類: workflow