1. 程式人生 > >jBPM4常見概念

jBPM4常見概念

轉載地址:http://inotgaoshou.iteye.com/blog/684581

1. 流程定義(Process Definition)
   流程定義是記錄在xml檔案中的對流程的描述,它包含唯一的流程開始節點和多個流程功能節點,每個節點之間使用transition進行連線。
    Process Definition使用id, key和version進行標識,jBPM中可能包含多個key值相同的Process Definition,key值相同的Process Definition會擁有不同的version值,而id是使用key-version的形式用來表示唯一的Process Definition的。
   jBPM中使用RepositoryService來控制流程定義的釋出,瀏覽,刪除等操作。

2. 流程例項(Process Instance)


   以流程定義為藍本生成的流程例項,在jBPM屬於Execution的一種。
   當我們執行start時,會根據流程定義啟動一個新的流程例項,然後它會根據流程定義裡的節點執行,在遇到state或task時停頓,等待外部使用者呼叫signal,最後會執行到end節點,結束整個流程。
   jBPM中只允許有一個start節點,所以每個流程都是單一入口的,jBPM4中可以允許有多個end節點,所以我們可以在任意位置結束流程。
   jBPM中使用ExecutionService來控制流程例項的啟動,瀏覽,執行,刪除等操作

3. state節點
   狀態結點是一個典型的等待狀態。同任務結點不同的是,狀態結點不會向任務列表新增任務例項。當業務程序需要等待外部系統的干預時,這種結點是很有用的。(需要外部系統干預,但又不是讓人去幹預)假設如下情況:在進入該結點時,通過node-enter事件向外部系統傳送一個訊息,然後結點進入等待狀態;當外部系統完成處理,並回送一個訊息,這將導致觸發一個signal()方法的執行,該方法重新啟用正在等待的流程繼續下行
   jBPM中使用ExecutionService來控制對state的signal操作。

4. task節點

   任務結點(task-node)任務結點是代表由人介入的一個或多個任務。因此當流程執行到一個任務結點時,會生成“任務例項物件(task instances)”,並新增到參與人的任務列表中,之後結點會處於等待狀態,直到參與人完成他們的任務,並激活流程繼續向下執行。
   task節點可以使用assignee, swimelane等方式為任務定義分配到某個人或者某個組,對應的使用者可以執行completeTask()結束任務,並控制任務結束後流程例項向哪個方向前進。
   jBPM中使用TaskService控制task的各項操作。

5. Identity身份驗證
   jBPM中的身份驗證分為User, Group和Membership三部分,使用者表示登陸使用者,Group表示使用者組,使用者和使用者組之間的關聯關係儲存在Membership中。User和Group與Task中的assignee和swimelane是息息相關的。
   
6.事件

   Event反映的是流程執行中的各個時刻。在流程執行中 JBPM引擎會在計算下一個狀態的時候觸發各種事件。一個事件通常和流程定義中的一個元素相關聯,比如流程定義本身,節點或者轉移。大部分的元素能夠觸發不同型別的事件,比如一個節點可以觸發節點進入事件,節點離開事件。事件其實是和動作連線在一起的。每個事件維護一個動作列表。當JBPM引擎觸發一個事件的時候,該事件維護的動作列表中的動作將被執行。

JBPM中事件型別是寫死在事件類中的,共有16種:
EVENTTYPE_TRANSITION = "transition"; // 轉移
EVENTTYPE_BEFORE_SIGNAL = "before-signal"; // 發訊號前
EVENTTYPE_AFTER_SIGNAL = "after-signal"; // 發訊號後
EVENTTYPE_PROCESS_START = "process-start"; // 處理開始狀態
EVENTTYPE_PROCESS_END = "process-end"; // 處理結束狀態
EVENTTYPE_NODE_ENTER = "node-enter"; // 進入節點
EVENTTYPE_NODE_LEAVE = "node-leave"; // 離開節點
EVENTTYPE_SUPERSTATE_ENTER = "superstate-enter"; // 進入超級狀態
EVENTTYPE_SUPERSTATE_LEAVE = "superstate-leave"; // 離開超級狀態
EVENTTYPE_SUBPROCESS_CREATED = "subprocess-created"; // 子流程建立
EVENTTYPE_SUBPROCESS_END = "subprocess-end"; // 子流程結束
EVENTTYPE_TASK_CREATE = "task-create"; // 任務建立
EVENTTYPE_TASK_ASSIGN = "task-assign"; // 任務分派
EVENTTYPE_TASK_START = "task-start"; // 任務啟動
EVENTTYPE_TASK_END = "task-end"; // 任務結束
EVENTTYPE_TIMER = "timer"; // 定時器

7.transition
   關聯兩個節點,用於表示節點的走向 

8.常用類說明
   ProcessEngine:它是整個jBPM4的入口,並且是單例模式。通過它可以獲取processEngine,並藉此獲得工作流引擎所提供的各種服務
    
   RepositoryService:控制流程定義的釋出,瀏覽,刪除等操作
    
   ExecutionService:控制流程例項的啟動,瀏覽,執行,刪除等操作

   IdentityService:控制身份的各項操作

*********************************************************************************************

jBPM4.3資料庫的幾張表簡單介紹

JBPM4_DEPLOYMENT   流程定義表 
JBPM4_DEPLOYPROP 流程定義屬性表
 

JBPM4_EXECUTION  流程例項表 
JBPM4_HIST_ACTINST 流程活動(節點)例項表 

JBPM4_HIST_DETAIL  流程歷史詳細表 

JBPM4_HIST_PROCINST 流程例項歷史表 

JBPM4_HIST_TASK  流程任務例項歷史表 
JBPM4_HIST_VAR  流程變數(上下文)歷史表 


JBPM4_ID_GROUP 角色表 
JBPM4_ID_MEMBERSHIP 使用者角色表 
JBPM4_ID_USER  使用者表 
JBPM4_JOB  定時表 
JBPM4_LOB  儲存表
 
JBPM4_PARTICIPATION 參與者表 
JBPM4_SWIMLANE  泳道表 
JBPM4_TASK 任務表
 
JBPM4_VARIABLE 上下文表 

紅色的表為經常使用的表.這裡不使用JBPM自己的許可權角色定義.

釋出一個流程deploy後
jbpm4_deployment新增一條記錄
jbpm4_deployprop新增三條記錄
jbpm4_lob新增一條記錄

開始一個流程startProcessInstanceByKey後
jbpm4_execution新增一條記錄
jbpm4_hist_actinst新增一條記錄
jbpm4_hist_procinst新增一條記錄
jbpm4_hist_task新增一條記錄
jbpm4_task新增一條記錄

流程定義相關的佈署資訊就儲存在(1) JBPM4_DEPLOYMENT、(2) JBPM4_DEPLOYPROP 及(3) JBPM4_LOB 中。上傳一個包含png和jpdl.xml的zip包後,JBPM4_DEPLOYMENT多一條記錄 JBPM4_DEPLOYPROP多三條, JBPM4_LOB多兩條。 
(4)J B PM4_HIST_PROCINST (5) JBPM4_HIST_ACTINST 分別存放的是Process Instance、Activity Instance的歷史記錄。
(6)JBPM4_EXECUTION 主要是存放JBPM4的執行資訊,Execution機制代替了JBPM3的Token機制(詳細參閱JBPM4的PVM機制,過段時間我也會進一步分析)。
(7)JBPM4_TASK 存放需要人來完成的Activities,需要人來參與完成的Activity 被稱為Task。
(8)JBPM4_PARTICIPATION 存放Participation的資訊,Participation的種類有Candidate、Client、Owner、 Replaced Assignee和Viewer。而具體的Participation既可以是單一使用者,也可以是使用者組。
(9)JBPM4_SWIMLANE。 Swim Lane是一種Runtime Process Role。通過Swim Lane,多個Task可以一次分配到同一Actor身上。
(10) JBPM4 _VARIABLE 存的是進行時的臨時變數。
(11) JBPM4_HIST_DETAIL 儲存Variable的變更記錄。 
(12)JBPM4_HIST_VAR
 儲存歷史的變數  (13) JBPM4_HIST_TASK Task的歷史資訊。 (14)JBPM4_ID_GROUP (15)JBPM_ID_MEMBERSHIP (16)JBPM4_ID_USER 這三張表很常見了,基本的許可權控制,關於使用者認證方面建議還是自己開發一套,JBPM4的功能太簡單了,使用中有很多需要難以滿足。 (17) JBPM4_JOB 存放的是Timer的定義。

  jbpm.hibernate.cfg.xml檔案中有一個配置
   <property name="hibernate.hbm2ddl.auto" value="create-drop"/> 

   幾個引數的意思,我解釋一下:
   validate    載入hibernate時,驗證建立資料庫表結構
   create      每次載入hibernate,重新建立資料庫表結構,這就是導致資料庫表資料丟失的原因。
   create-drop 載入hibernate時建立,退出是刪除表結構
   update      載入hibernate自動更新資料庫結構 
   none        不進行任何操作