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

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

          Jbpm 介紹

          1,  項(xiàng)目介紹

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

          項(xiàng)目的 URL http://jbpm.org/

          項(xiàng)目 2004 10 月加入 jboss 組織,項(xiàng)目更名為 JBoss jBPM

          2,  jbpm 工作流系統(tǒng)介紹

          jbpm 是輕量級(jí),可擴(kuò)展的工作流管理系統(tǒng)。 Jbpm 的業(yè)務(wù)流程的定義是用 jPdl Process definition language )來描述的。系統(tǒng)的原理是:由流程管理員裝入流程,用戶或者系統(tǒng)執(zhí)行流程中的步驟, jbpm 引擎負(fù)責(zé)維護(hù)流程的狀態(tài),日志以及執(zhí)行流程中定義的自動(dòng)動(dòng)作。用用例圖描述如下 :
           1.bmp

          3,  項(xiàng)目部署( Tomcat+SQLServer

          a)         環(huán)境

          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] 目錄中執(zhí)行 ant

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

          7,  [jbpm_home] 目錄中執(zhí)行 ant , 現(xiàn)在數(shù)據(jù)庫已經(jīng)建立,并且流程已經(jīng)初始化,這里有個(gè) bug 需要修改,把數(shù)據(jù)庫中創(chuàng)建的表 JBPM_FILE bytes 的類型修改為 image

          8,  部署 web 應(yīng)用 , 拷貝 [jbpm_home]/web/target/jbpm.war [tomcat_home]/webapps

          9,  啟動(dòng) 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 描述的是流程的過程,是通過狀態(tài)表示,流程由

          <!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 >

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

          Start-state 就是開始節(jié)點(diǎn)

          State 就是流程的活動(dòng)

          Process-state 就是子流成

          Decision 是判斷節(jié)點(diǎn)

          Fork 是分支節(jié)點(diǎn)

          Join 是聯(lián)合節(jié)點(diǎn)(注意 fork join 必須成對(duì)出現(xiàn))

          End-state 是結(jié)束節(jié)點(diǎn)

           

          State 中定義參與者, state 是流程的主要環(huán)節(jié),必須要人機(jī)參與處理,調(diào)用 ExecutionService . endOfState () 來結(jié)束活動(dòng),使 jBPM 引擎流轉(zhuǎn)。 action 是用來擴(kuò)展的, 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 事件,可以對(duì)每個(gè)事件處理不同業(yè)務(wù)。實(shí)現(xiàn) Action 必須實(shí)現(xiàn)接口 org.jbpm.delegation. ActionHandler.

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

          process,fork,decision,join jBPM 引擎自動(dòng)完成的,完成執(zhí)行的操作就是節(jié)點(diǎn)的 delegation 里面注冊(cè)的類 . 如果沒有就是用系統(tǒng)默認(rèn)的。

           

          5,  工作流引擎與應(yīng)用的接口原理

           

          應(yīng)用調(diào)用 ExecutionService. StartProcessInstance() 啟動(dòng)流程,引擎產(chǎn)生任務(wù)。等待任務(wù)的所有者調(diào)用 ExecutionService. endOfState () 指令來完成任務(wù)。當(dāng) endOfState 指令被調(diào)用后,引擎就進(jìn)行運(yùn)算產(chǎn)生的新的任務(wù),然后繼續(xù)等待 endOfState 指令的調(diào)用直到流程結(jié)束。

          引擎只對(duì) State 產(chǎn)生任務(wù),對(duì)其他的節(jié)點(diǎn)比如: process-state,fork,decision,join 都不產(chǎn)生任務(wù)。只對(duì)他們進(jìn)行運(yùn)算,執(zhí)行每個(gè)節(jié)點(diǎn)的 Delegation Action.

           

          6,  JBPM 工作流引擎的優(yōu)點(diǎn)

          a)         輕巧,使用 Hibernate 實(shí)現(xiàn)

          b)        擴(kuò)展性好,支持各種事件和節(jié)點(diǎn)的擴(kuò)展,

          c)        工作流原理和實(shí)現(xiàn)簡(jiǎn)單,代碼容易維護(hù)

          d)        支持變量

          e)         支持子流成

          f)         參與者與應(yīng)用集成非常簡(jiǎn)單

          g)        項(xiàng)目加入 jboss 組織,成長樂觀

          7,  JBPM 工作流引擎的弱點(diǎn)

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

          b)        沒有圖形畫的流程監(jiān)控工具

          c)        join/fork 必須成對(duì)定義

          d)        復(fù)雜的流程定義需要自己實(shí)現(xiàn)接口


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

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

          Copyright © 黎民

          主站蜘蛛池模板: 百色市| 呼玛县| 马关县| 宕昌县| 微山县| 府谷县| 巨鹿县| 峡江县| 荥阳市| 淮安市| 宝清县| 高阳县| 嫩江县| 乌海市| 岳普湖县| 罗甸县| 老河口市| 随州市| 哈密市| 五华县| 化隆| 吉安县| 道孚县| 乌拉特中旗| 兖州市| 永清县| 巴林右旗| 万州区| 江川县| 宜兰县| 黔西| 清徐县| 金秀| 高雄市| 尉犁县| 奇台县| 东兰县| 濉溪县| 巴林右旗| 高雄市| 黄石市|