一、工做流數據庫
工做流是一項分離業務操做和系統流程的技術。工做流由實體(Entity)、參與者(Participant)、流程定義(Flow Definition)、工做流引擎(Engine) 四部分組成。api
① 實體是工做流的主體,是須要隨着工做流一塊兒流動的物件(Object)。例如,在一個採購申請批准流程中,實體就是採購申請單;在公文審批流程中,實體就是公文。數據結構
② 參與者是各個處理步驟中的責任人,多是人,也多是某個職能部門,還多是某個自動化的設備;工具
③ 流程定義是預約義的工做步驟,它規定了實體流動的路線。它多是徹底定義的,即對每種可能的狀況都能徹底肯定下一個參與者,也多是不徹底定義的,須要參與者根據狀況決定下一個參與者;學習
④ 工做流引擎是驅動實體按流程定義從一個參與者流向下一個參與者的機制優化
前三個要素是靜態的,而第四個要素是動態的,它將前三者結合起來,是工做流的核心組成元素。hibernate
二、JBPM插件
jBPM,全稱是Java Business Process Management,是一種基於J2EE的輕量級工做流管理系統。ip
① jBPM的一個特點是採用了它本身定義的JBoss jBPM Process definition language (jPdl)。jPdl認爲一個商務流程能夠被看做是一個UML狀態圖。jPdl就是詳細定義了這個狀態圖的每一個部分,如起始、結束狀態,狀態之間的轉換等。內存
② jBPM的另外一個特點是它使用Hibernate來管理它的數據庫。Hibernate是目前Java領域最好的一種數據持久層解決方案。經過Hibernate,jBPM將數據的管理職能分離出去,本身專一於商務邏輯的處理。
jbpm工做流步驟:
一、加載(發佈)流程定義
這個意思是,咱們經過jbpm的designer插件,或者是用其餘工具,制定出processDefinition,而後將其加載到應用中的過程。這個加載能夠是寫入內存中,或者是直接寫入數據庫等。
二、啓動流程
建立流程實例的過程。具體建立實例的方法有多種,可根據本身的須要自行選擇。
三、處理任務
在流程流轉的過程當中,JBPM引擎會爲咱們生成任務的實例,咱們就須要針對這些任務實例來進行處理,而後結束這些任務實例,並推進流程的流轉。
四、記錄流程的相關狀態
記錄流程狀態這點包括且不限於如下內容:
1)流程實例的開啓
2)任務實例的建立
3)任務實例的開始執行
4)任務實例的結束
5)流程實例的結束
將業務流程複雜的系統結構清晰話,提供系統運行時的靈活性
一、 解耦系統業務流程
流程獨立,可使用工具定義和建模,利於跟蹤、監控、管理、調度、優化和重整
二、 提升系統的靈活性
系統流程定義生產環境的修改和調整,用戶和外部工具交互,任務的動態分派
一、 對當前任務的條件查詢
jBPM不提供靈活進行條件查詢的api,若是須要,能夠自定義hibernate查詢,從jbpm相應的數據表中查詢任務數據。但須要對jBPM機制比較瞭解,並且有些複雜條件難以用jBPM自己的信息查到。
二、 當前任務的分頁
在上一問題的基礎上,使用hibernate分頁。
三、 統計各個流程實例的狀態
能夠經過流程實例,在jbpm系統表中查詢,也能夠在業務表的相應數據上加上狀態列來統計。前一個比較麻煩,後一個比較直觀,但不會因使用jBMP而使用工做量減小。
四、 工做流數據與業務數據結合
通常經過在流程實例中添加相應的一筆數據的標識做爲變量來關聯。也能夠有針對性的擴展jbpm的系統表來實現與業務的關聯性。
五、 修改流程後的歷史數據兼容性問題
Jbpm工做流流程定義有版本的概念,修改流程後要從新發布,與舊的流程不是一個同一個版本。系統能夠區別開新舊流程來。
一、 工做量
初步的結論是:引入工做流技術不會明顯減小系統開發工做量。相反,在通常狀況下,會增長一部分工做量。
若是項目流程比較少,並且比較固定,則使用工做流技術會明顯增長開發工做量。
若是項目流程多,並且比較複雜,則使用工做流技術會使項目結構層次更加清晰、更具備擴展性,根據需求有可能要修改和擴展示有開源工做流類庫與數據庫結構,也會增長額外的工做量。但權衡之下,利大於弊。
二、 關於業務數據與jBPM自己的數據
理論上說,若是使用jBPM,能夠將全部業務數據放到jBPM的context中管理,再也不維護業務數據表。但這樣的結果是在流程以外的環境(好比在統計報表中)中沒法容易的獲得業務數據。因此通常會創建業務數據表,我不使用工做流時同樣,而後讓jBMP從業務數據表中獲得業務數據,而不在jBPM中保留業務數據。所以,使用jBPM後,在業務數據方面基本不會減小工做
三、 工做流學習成本
工做流自己的概念較複雜,使用jbpm,須要學習其工做流的定義和結構,流程定義工具和語言、瞭解其數據結構。與其它工做流產品(如Shark)相比,jBPM對Java開發人員來講學習較低成本,在作流程複雜的項目時,學習成本能夠接受。
四、 系統用戶和角色與工做流整合
流程的流轉和任務的分派完成,都是用戶在控制,因此須要將用戶、角色和權限整合到jbpm工做流中。
五、 系統業務的整合和調整
將流程抽取後,本來連續的業務處理變成一個個的任務節點。須要在每一個業務相關處理處添加工做流流程控制、在每一個節點處實現相關的業務和流程切入點。
六、 適用範圍
Jbpm工做流適用於:
n 項目流程比較多,流程複雜的項目。
n 系統運行和維護、升級時,流程可能須要修改、調整和跟蹤、控制的項目。