基于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,我們這里選擇了tomcatJBPM將開發一個webapp所需的類打包成jbpm.web.jar,包括自定義的tagStruts用到的類等等。開發應用時,將該jar放到WEB-INF\lib下面就可以了。

          一個基于工作流的webapp應用的開發和普通webapp的開發方式很相似。包結構也保持一貫作風:

          ??????
          所以,我們需要做的主要工作是完成客戶端應用所需的 jsp 頁面的開發,可以選用 Struts 來進行開發。需要注意的是,我們要對 lib 目錄下的 jbpm.properties 文件進行配置,主要是對數據庫 jdbc 驅動的配置。

          4. ?? 系統數據庫的創建

          JBPM 可以支持多種數據庫系統,包括MSSQL,MysqlOraclehdbsql等。它提供了很靈活的配置方式,只需要修改jbpm.properties文件,同時將相應的JDBC Driver拷貝到lib目錄就可以了。利用antgenerate.ddl命令,JBPM還支持自動生成用于創建系統表的sql腳本,而且可以生成對應于各種數據庫系統的腳本,非常便于數據庫系統的更換和系統數據庫的創建。

          5.?? 開發過程

          環境配置如下:

          JBPM 2.0

          Ant 1.6.2

          Tomcat 5.0.27

          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"?>

          <!DOCTYPE process-definition PUBLIC?"-//jBpm/jBpm Mapping DTD 2.0//EN" "http://jbpm.org/dtd/processdefinition-2.0.dtd">

          <process-definition name="pay raise process">

          <!-- SWIMLANES -->
          <swimlane name="requester" />

          ????<swimlane name="boss">
          ??? <delegation class="org.jbpm.delegation.assignment.ActorAssignmentHandler">cg</delegation>
          </swimlane>

          ????<swimlane name="erp operator">
          ??? <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

          評論

          # re: 基于JBPM的工作流應用的開發 2009-08-03 14:18 ooo

          dddddlaji  回復  更多評論   

          <2006年10月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          Java技術網站

          友情鏈接

          國內一些開源網站

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宁远县| 西盟| 铅山县| 泰宁县| 花垣县| 历史| 五大连池市| 华亭县| 开阳县| 吉隆县| 临澧县| 丹寨县| 巴彦县| 昌图县| 白水县| 灌南县| 高阳县| 孟村| 明溪县| 方正县| 县级市| 黄陵县| 武平县| 海兴县| 海阳市| 城市| 高邑县| 上杭县| 博罗县| 南宫市| 钟祥市| 梧州市| 绿春县| 同德县| 敦煌市| 荥经县| 华坪县| 禄丰县| 新化县| 丰城市| 扬中市|