1. 程式人生 > >JBPM4.4總結(一)——基礎知識

JBPM4.4總結(一)——基礎知識

            JBPM(Java Business Process Management),業務流程管理,是Jboss(現已被Redhat收購)旗下的開源工作流引擎,是覆蓋了業務流程管理,工作流,服務協議等領域的一個開源的,靈活的,易擴充套件的可執行流程語言框架。主要解決一些複雜,易變化等工作流程問題。

一,首先看一下工作流(workflow:

          1,介紹:工作流就是工作需要遵循一定流程,需要經過層層節點,級別才能完成的。它有三個要素:a,這個過程要做什麼,這是事情的主題;b,要經過多少個步驟,這是這類事情的特點;c,每個步驟都由誰來做,做什麼,怎麼做,這是事情節點的內容。例如一些物資的審批問題,請假的審批問題,需要經過多道關卡才能完成事,

JBPM會使其變的非常簡單。當然瞭解決工作流的問題,不僅僅有JBPM,還有OSWorkFlow,國內的普元工作流等。

          2,詳解:看一下工作流的理論知識吧,當然這個不僅僅JBPM是這樣,所有的工作流工具都是用的這些知識,所以還是非常核心的。

           a,流程定義(ProcessDefinition,基於有向圖對業務進行描述,圖是由節點(活動)和轉移(Transition構成的,節點是有型別的,節點的型別決定了到達該節點做的事情,不同的節點做的事情不一樣,轉移描述了一個流向或路徑,轉移表示了from to ..的關係。這裡相當於我們建立了一個類。

           b

,流程例項(ProcessInstance,流程例項就是流程定義的具體化,一個流程定義會有多個流程例項,相當於對上邊的類進行了例項化。

           c流程變數(Process variable,流程變數儲存了上下文資訊,流程變數採用Map結構儲存,採用鍵值對的方式,流程變數是流程例項的一部分,流程變數的生命週期是隨著流程例項的消亡而消亡的,流程變數的值在此流程中的任何節點都可以讀取和修改(和ThreadLocal類似)。

           d,任務節點(Task,當流程到達該節點將會建立任務例項(TaskInstance)分別分配給參與者,(只要有人蔘與活動,一般就使用任務節點,因為要分配給人處理

)。

           e起始節點(Start,流程定義中必須有一個起始節點,而且只能有一個。

           f,結束節點(End,流程定義中可以沒有結束節點,也可以有多個結束節點。

           g,決策節點(Decision,決策節點是由流程自動決策的,不需要人為干預,該節點相當於ifelse .決策節點可以嵌入java程式碼或使用指令碼語言進行判斷。

           h,分支節點(Fork,將一個路徑可以分解為多個併發的子路徑(併發任務,會籤),只有所有的子路徑到達聯合節點(Join,主路徑才會繼續執行事件(Event,當流程離開、到達某個節點或執行轉移的時候,都會觸發事件的。

其實細細想想,這些東西和UML中的活動圖的畫法是非常類似ActivityDiagram的,就連那些畫圖的圖表都是類似的。

二,JBPM4.4知識介紹:

          1,資料庫設計:JBPM4.4的持久層是採用的Hibernate,大大提高了程式了移植性,和資料庫進行了解耦。它通過18張表進行資料處理,我們可以通過PowerDesigner進行反向工程,匯出資料物理設計圖,進行檢視這些表之間的結構。這裡僅僅看一下表的作用吧:

表名稱

說明

jbpm4_deployment

儲存部署id

jbpm4_deployprop

部署檔案相關屬性

jbpm4_execution

存放當前執行資訊

jbpm4_hist_actinst

存放歷史活動(TaskStateForkJoin等等)資訊

jbpm4_hist_detail

儲存流程變數的變更

jbpm4_hist_procinst

儲存歷史流程例項

jbpm4_hist_task

歷史任務

jbpm4_hist_var

歷史變數

jbpm4_id_group

jbpm4_id_membership

使用者和組的關係

jbpm4_id_user

使用者

jbpm4_job

存放timer

jbpm4_lob

存放流程定義的JPDL內容和流程定義圖片

jbpm4_participation

和使用者相關

jbpm4_property

Id維護表

jbpm4_swimlane

存放泳道

jbpm4_task

存放當前任務

jbpm4_variable

存放當前流程變數

其中想提一下,這裡的每一張表採用了沒有業務含義的欄位作為主鍵,這是大力提倡的;          資料庫的命名規範都是通過下劃線來區分各個單詞,避免了不必要的衝突;           看這裡的表有存放當前資訊,存放歷史資訊的,體現了表的分層設計,大大提高了處理資料的效率;          最後就是主鍵的生成策略,這裡是通過第三方表jbpm4_property來進行維護主鍵,這也是大大提高了其移植性等。這些表設計都是非常值得我們學習的。

            2,核心類ProcessEngine,這是使用JBPM的外觀介面,通過ProcessEngine來獲取各種類,例如最重要的6Service。其實就像Hibernate中的核心工廠SessionFactory,Ibatis的核心類sqlMapClient一樣。通過此核心類來進行JBPM的各種處理。

          3,核心的6Service,當然了這6Service都是通過核心類ProcessEngine建立的,主要作用如下表:

介面名稱

作用

RepositoryService

主要和流程定義相關,如:部署流程、刪除流程、檢視流程

ExecutionService

和流程例項相關,啟動流程

HistoryService

JBPM4的資料庫設計發生了改變,區分了歷史表和當前表,主要適合於大量流程下的使用,HistoryService主要是查詢歷史的

TaskService

和任務相關,取得個人任務,組任務,結束任務、一參與者的完整任務=個人任務(findPersonalTasks + 組任務(findGroupTasks

IdentityService

身份相關,建立使用者、建立組、主要和我們組織機構整合時用的

ManagementService

管理定時任務的(job

三,工作流的優缺點:

         1,優點:

          a,可以實現流程和業務邏輯的分離,分離後流程的變化不會影響到業務邏輯,業務邏輯的改變也不會影響到流程,能夠更好的適應需求的變化。(體現了設計模式中的責任鏈模式)。

          b,轉變了開發的思路,使我們把更多的精力放到流程開發上,因為它進行了很大的封裝。

         2,缺點:

採用工作流會帶來很大的開發成本和學習成本。對於一些流程變化不頻繁的專案,使用工作流也體現不出它的優勢。

綜上為工作流的一些基礎知識,JBPM的運用前必知知識,理解好工作流這方面的業務,理解好工作流實現的原理,在對以後的運用上起著非常大的作用。後邊會帶來工作流的運用篇。