基于JBPM的工作流應(yīng)用的開發(fā)

          利用JBPM開發(fā)一個(gè)工作流應(yīng)用,相對(duì)于使用shark是比較簡(jiǎn)單直觀的。我們之前提到過,一個(gè)工作流管理系統(tǒng)最基本的組件包括流程定義組件,流程執(zhí)行組件和流程客戶端組件。下面從這三個(gè)方面看一下JBPM對(duì)開發(fā)工組流應(yīng)用的支持。

          1. ??流程的定義

          JBPM 沒有采用WfMC提出的流程定義語言XPDL,而是自己開發(fā)了一種稱為JPDL的語言來定義流程。因此,在開發(fā)一個(gè)應(yīng)用時(shí)我們最終需要生成一個(gè)符合該XML schema的文件processdefinition.xml來表示定義好的流程。它可以manually獲得,也可以使用可視化的定義工具自動(dòng)生成。

          JBPM 專門提供了一個(gè)開發(fā)流程的環(huán)境,稱為process development environment(pde)。可以 jbpm 根目錄下執(zhí)行命令 ant create.pde 來生成 pde 工作目錄 。生成的包結(jié)構(gòu)如下所示:


          ?????????Build.xml
          文件用于配置一個(gè)流程,即利 ant 工具解析 processdefinition.xml 文件,并將運(yùn)行流程時(shí)所需的相關(guān)信息存儲(chǔ)到數(shù)據(jù)庫中。

          Lib 存放了開發(fā)和配置流程所需的全部庫文件,包括數(shù)據(jù)庫的 jdbc 驅(qū)動(dòng)。

          Src 包括開發(fā)和配置流程的全部源文件和所需資源。

          Src/config 只有兩個(gè)文件, jbpm.properties log4j.properties 。其中, jbpm.propertie 文件包含了數(shù)據(jù)庫的配置信息。因此,更換數(shù)據(jù)庫或數(shù)據(jù)庫的 jdbc 驅(qū)動(dòng)都需要修改這里。

          Scr/java 存放 java 源文件。

          Src/process 存放工作流定義文件 (processdefinition.xml) 和相關(guān)的資源文件,如圖片和 form 文件。

          Src/test 存放測(cè)試代碼。

          Target/classes src/java 中源碼的輸出目錄,存放編譯后的 class 文件。

          Target/par 存放用命令 ant build.process.archives 生成的 par 包。 Par 包實(shí)際上就是把 src/process 中的流程定義及相關(guān)文件打包成 zip 形式存儲(chǔ)。

          Target/test-classes 存放測(cè)試程序的編譯結(jié)果。

          Target/test-report 存放測(cè)試報(bào)告。

          2.?? 流程的執(zhí)行

          JBPM 把負(fù)責(zé)執(zhí)行流程的類庫打包成jbpm.core.jar,它也是JBPM工作流引擎的核心。在開發(fā)一個(gè)工作流應(yīng)用時(shí),只需將該jar文件放到相應(yīng)的lib目錄下面。而開發(fā)人員就可以專注于開發(fā)一個(gè)流程模型,完成對(duì)流程的定義,而無需過多考慮流程執(zhí)行的細(xì)節(jié)。

          3. ??流程的客戶端

          客戶端組件的開發(fā),需要一個(gè)應(yīng)用服務(wù)器作為servlet container,我們這里選擇了tomcatJBPM將開發(fā)一個(gè)webapp所需的類打包成jbpm.web.jar,包括自定義的tagStruts用到的類等等。開發(fā)應(yīng)用時(shí),將該jar放到WEB-INF\lib下面就可以了。

          一個(gè)基于工作流的webapp應(yīng)用的開發(fā)和普通webapp的開發(fā)方式很相似。包結(jié)構(gòu)也保持一貫作風(fēng):

          ??????
          所以,我們需要做的主要工作是完成客戶端應(yīng)用所需的 jsp 頁面的開發(fā),可以選用 Struts 來進(jìn)行開發(fā)。需要注意的是,我們要對(duì) lib 目錄下的 jbpm.properties 文件進(jìn)行配置,主要是對(duì)數(shù)據(jù)庫 jdbc 驅(qū)動(dòng)的配置。

          4. ?? 系統(tǒng)數(shù)據(jù)庫的創(chuàng)建

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

          5.?? 開發(fā)過程

          環(huán)境配置如下:

          JBPM 2.0

          Ant 1.6.2

          Tomcat 5.0.27

          SQL Server 2000

          SQL Server 2000 Driver for JDBC

          仍以之前演示過的request a payraise為例(見下圖),介紹一下利用JBPM開發(fā)一個(gè)工作流應(yīng)用需要完成的工作。

          1)?????? 首先,我們需要完成流程的定義。這不僅包括定義processdefinition.xml,還要對(duì)流程執(zhí)行時(shí)使用到的其他資源進(jìn)行定義。比如,在web應(yīng)用中用到的圖片,form等。還需要配置form.xml,該文件確定了流程中不同狀態(tài)和form的關(guān)系,如request a payraise狀態(tài)下,需要如下圖所示的form

          ?

          補(bǔ)充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命令,解析這個(gè)文件并且將執(zhí)行時(shí)需要的信息存儲(chǔ)在數(shù)據(jù)庫中。如下圖:

          3)?????? 我們無需關(guān)心流程將怎么執(zhí)行,完全交給jbpm.core.jar就好。

          4)?????? 剩下的另外一項(xiàng)比較繁重的工作就是開發(fā)一個(gè)用于該流程的客戶端應(yīng)用。前面已經(jīng)提到過, 我們需要做的主要工作是完成客戶端應(yīng)用所需的 jsp 頁面的開發(fā)。包括登錄頁面,查看自己的 tasklist 頁面,執(zhí)行 task 的頁面等。除此之外,還可以通過日志來完成流程的監(jiān)控和管理界面。這些都由應(yīng)用的需求來決定。



          posted on 2006-10-08 18:14 nbt 閱讀(1320) 評(píng)論(1)  編輯  收藏 所屬分類: workflow

          評(píng)論

          # re: 基于JBPM的工作流應(yīng)用的開發(fā) 2009-08-03 14:18 ooo

          dddddlaji  回復(fù)  更多評(píng)論   

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊(cè)

          收藏夾

          Java技術(shù)網(wǎng)站

          友情鏈接

          國(guó)內(nèi)一些開源網(wǎng)站

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 广西| 盐城市| 建水县| 清水县| 句容市| 吐鲁番市| 辉南县| 东源县| 乐都县| 年辖:市辖区| 诸暨市| 客服| 西畴县| 渝中区| 大石桥市| 抚松县| 陆良县| 广德县| 曲麻莱县| 临朐县| 罗平县| 红桥区| 衡阳县| 井陉县| 休宁县| 洛宁县| 武乡县| 都昌县| 平邑县| 江孜县| 西盟| 元江| 泾阳县| 社会| 隆化县| 浮山县| 阿图什市| 高邮市| 图木舒克市| 高雄市| 濮阳市|