JBoss jBPM2.0工作流引擎完全解密

          Posted on 2007-03-19 09:29 黎民 閱讀(3605) 評論(0)  編輯  收藏

          Jbpm 介紹

          1,  項目介紹

          項目是 2003 1 月由 Tom Baeyens sourceforge 創建。 Tom Baeyens JSR207 Process Definition for Java )的專家組成員

          項目的 URL http://jbpm.org/

          項目 2004 10 月加入 jboss 組織,項目更名為 JBoss jBPM

          2,  jbpm 工作流系統介紹

          jbpm 是輕量級,可擴展的工作流管理系統。 Jbpm 的業務流程的定義是用 jPdl Process definition language )來描述的。系統的原理是:由流程管理員裝入流程,用戶或者系統執行流程中的步驟, jbpm 引擎負責維護流程的狀態,日志以及執行流程中定義的自動動作。用用例圖描述如下 :
           1.bmp

          3,  項目部署( Tomcat+SQLServer

          a)         環境

          JBoss jBPM 2.0, Tomcat 4.1.31, SQLServer 2000 , ant 1.5.4

          b)        步驟

          1,  解壓 jboss-jbpm-2.0.zip ,路徑為 [jbpm_home]

          2,  添加 jdbc driver [jbpm_home]/lib/hibernate

          3,  [jbpm_home]/.classpath 文件中添加 jdbc driver

          4,  [jbpm_home]/ web/src/jbpm.war/WEB-INF/classes/jbpm.properties 文件中 hibernate 使用 SQLServer jdbc 配置

          5,  重新編譯和打包 , [jbpm_home] 目錄中執行 ant

          6,  發布流程 , 修改 [jbpm_home]/build.xml 文件,在 38 行修改為     <ant antfile="web/build.xml" target="deploy.process.archives" inheritall="false" />

          7,  [jbpm_home] 目錄中執行 ant , 現在數據庫已經建立,并且流程已經初始化,這里有個 bug 需要修改,把數據庫中創建的表 JBPM_FILE bytes 的類型修改為 image

          8,  部署 web 應用 , 拷貝 [jbpm_home]/web/target/jbpm.war [tomcat_home]/webapps

          9,  啟動 tomcat

          10,              拷貝 commons-digester.jar, commons-fileupload.jar, jakarta-oro.jar, 文件到 [tomcat_home]/webapps/jbpm/WEB-INF/lib 目錄

          11,              打開瀏覽器 輸入地址 http://localhost:8080/jbpm

          12,  恭喜部署成功

          4,  jPdl 介紹

           

          jPdl 描述的是流程的過程,是通過狀態表示,流程由

          <!ELEMENT start-state ( description?, transition+ ) >

          <!ELEMENT state ( description?, assignment?, action*, transition+ ) >

          <!ELEMENT process-state ( description?, delegation, action*, transition+ ) >

          <!ELEMENT decision ( description?, delegation, action*, transition+ ) >

          <!ELEMENT fork ( description?, delegation?, action*, transition+ ) >

          <!ELEMENT join ( description?, delegation?, action*, transition ) >

          <!ELEMENT end-state EMPTY >

          幾個元素組成。流程的走向由 transition 元素指定。

          Start-state 就是開始節點

          State 就是流程的活動

          Process-state 就是子流成

          Decision 是判斷節點

          Fork 是分支節點

          Join 是聯合節點(注意 fork join 必須成對出現)

          End-state 是結束節點

           

          State 中定義參與者, state 是流程的主要環節,必須要人機參與處理,調用 ExecutionService . endOfState () 來結束活動,使 jBPM 引擎流轉。 action 是用來擴展的, action 的定義如下

           

          <!ELEMENT action ( delegation ) >

          <!ATTLIST action event-type (process-start|process-end|state-enter|state-leave|state-after-assignment|milestone-enter|milestone-leave|decision-enter|decision-leave|process-state-enter|process-state-leave|fork-enter|fork-every-leave|join-every-enter|join-leave|transition) #IMPLIED>

           

          <!ELEMENT delegation ( #PCDATA ) >

          <!ATTLIST delegation class CDATA #REQUIRED>

           

          state Action 支持 state-enter state-leave state-after-assignment 事件,可以對每個事件處理不同業務。實現 Action 必須實現接口 org.jbpm.delegation. ActionHandler.

           process-state, decision, fork, join Action 一樣都可以支持事件機制

          process,fork,decision,join jBPM 引擎自動完成的,完成執行的操作就是節點的 delegation 里面注冊的類 . 如果沒有就是用系統默認的。

           

          5,  工作流引擎與應用的接口原理

           

          應用調用 ExecutionService. StartProcessInstance() 啟動流程,引擎產生任務。等待任務的所有者調用 ExecutionService. endOfState () 指令來完成任務。當 endOfState 指令被調用后,引擎就進行運算產生的新的任務,然后繼續等待 endOfState 指令的調用直到流程結束。

          引擎只對 State 產生任務,對其他的節點比如: process-state,fork,decision,join 都不產生任務。只對他們進行運算,執行每個節點的 Delegation Action.

           

          6,  JBPM 工作流引擎的優點

          a)         輕巧,使用 Hibernate 實現

          b)        擴展性好,支持各種事件和節點的擴展,

          c)        工作流原理和實現簡單,代碼容易維護

          d)        支持變量

          e)         支持子流成

          f)         參與者與應用集成非常簡單

          g)        項目加入 jboss 組織,成長樂觀

          7,  JBPM 工作流引擎的弱點

          a)         流程圖形畫定義工具太弱

          b)        沒有圖形畫的流程監控工具

          c)        join/fork 必須成對定義

          d)        復雜的流程定義需要自己實現接口


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          posts - 57, comments - 3, trackbacks - 0, articles - 1

          Copyright © 黎民

          主站蜘蛛池模板: 隆化县| 新兴县| 仁寿县| 开江县| 灵璧县| 武义县| 桂阳县| 来凤县| 孝昌县| 开江县| 镇平县| 太和县| 耿马| 巫山县| 金阳县| 盐源县| 南平市| 张北县| 丹棱县| 赤壁市| 门源| 清流县| 库尔勒市| 高州市| 青龙| 吕梁市| 安乡县| 巴南区| SHOW| 盐山县| 新民市| 卢氏县| 衡南县| 德阳市| 达州市| 喜德县| 郸城县| 余庆县| 遂平县| 乌拉特后旗| 镇平县|