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

          Posted on 2007-03-19 09:29 黎民 閱讀(3611) 評論(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 © 黎民

          主站蜘蛛池模板: 乌拉特后旗| 盐山县| 固始县| 阿拉善右旗| 象山县| 灵璧县| 合山市| 清涧县| 山东| 浦东新区| 伊宁市| 桦川县| 宜宾市| 阿拉尔市| 泰安市| 招远市| 英山县| 桃源县| 辉县市| 乐平市| 缙云县| 朝阳区| 高尔夫| 仪陇县| 古田县| 哈巴河县| 木里| 尚义县| 西充县| 安徽省| 双桥区| 东乡| 秭归县| 大厂| 河津市| 桦南县| 利辛县| 陇川县| 承德市| 临西县| 三明市|