jbpm4簡介

    1. 1.  JBPM簡介

JBPM,全稱是Java Business Process Management(業務流程管理),它是覆蓋了業務流程管理、工作流、服務協作等領域的一個開源的、靈活的、易擴展的基於java實現的流程業務處理框架(Business Process Management)。jBPM是公開源代碼項目,它使用要遵循 Apache License。
    支撐企業的流程性業務應用:解釋業務規則,使得協作自動化

2.JBPM最大特色

   就是它的商務邏輯定義沒有采用目前的一些規範,如WfMC´s XPDL, BPML, ebXML, BPEL4WS等,而是採用了它自己定義的JBoss jBPM Process definition language (jPdl)。jPdl認爲一個商務流程可以被看作是一個UML狀態圖。jPdl就是詳細定義了這個狀態圖的每個部分,如起始、結束狀態,狀態之間的轉換,過圖型化的流程定義,直觀地描述業務流程。

jBPM的另一個特色是它使用Hibernate來管理它的數據庫。Hibernate是目前Java領域最好的一種數據存儲層解決方案,只要是 Hibernate 支持的數據庫, jBPM 也就支持。通過Hibernate,jBPM將數據的管理職能分離出去,自己專注於商務邏輯的處理。

3.JBPM帶來的益處

實現了無紙化的工作模式;
過程可監控:便於對執行過程的跟蹤和監控
數據可管理:便於對數據進行檢索、分析
可靠性:減少人-人交互的主觀錯誤的機率
4.JBPM常見應用領域
行政管理:行政、事業單位、大中型(國有)企業
產品研發和製造:用於對整個研發、生產製造過程的管理和調度
電子商務:訂單處理
其他 如大型內容管理系統的多步審覈
5.JBPM常見場景
公文流轉、行政審批、訂單處理、產品研發、製造過程
其他需要多個角色協作、多步完成的活動

6.JBPM模型說明

加載流程定義:
定義工具可以系統提供,也可以只是讀取定義結果
啓動流程:
啓動選定的流程,創建流程實例
辦理任務(流程的每一步):
執行流程的每個步驟(不一定都需要人蔘與:自動任務節點)
記錄流程的狀態:
對狀態的管理是工作流引擎的主要職責

7.JBPM主要概念

流程定義:預先定義的業務流轉邏輯
流程實例:業務的一次實際流轉過程
參與者:任務的執行者
活動(任務):組成流程定義的節點
活動實例:組成流程實例的元素
流轉:從一個節點到另一個節點這一行爲
工作列表:當前需要辦理的任務集合
工作流引擎:工作流的核心組件,對流程實例、任務實例以及其狀態進行管理

8.JBPM套件的組成

jPDL Designer:流程定義設計器,流程建模工具
jPDL Library:流程執行引擎
WebConsole:參與者和流程執行環境的交互界面,流程運行期間的監控工具

9. 使用jBPM開發工作流的一般流程

1) jBPM的運行需要數據庫的支持,因此係統設計時要選定所用數據庫。只要是Hibernate支持的數據庫,jBPM就支持。數據庫的初始化可以由jBPM自動完成,也可以通過ant generate.ddl任務生成SQL語句,在jBPM外部自己創建所需的表。

  2) 使用jPdl定義工作流,生成processdinination.xml文件。可以採用GUI工具gpdl,但目前只支持jBPM1.0,而且bug很多。XML的DTD定義文件在jBPM下載包中。

  3) Ant create.pde生成pde包的工作目錄。將processdinination.xml文件和其它需要的文件放在指定的目錄下,使用ant build.precess.archives生成pde包。pde包的格式採用jar。

  4) 更改pde工作目錄/src/config/jbpm.properties的相關屬性,主要是設定相關的數據庫連接信息。注意要將數據庫的JDBC驅動放在pde工作目錄的lib目錄下。

  5) Ant deploy.process.archives將剛纔生成的pde部署到數據庫。實際上就是向數據庫插入一些相關數據。

6) 利用jBPM API函數開發相應的工作流程。

10.jbpm表結構介紹

10.1資源庫和運行時表結構

JBPM4_DEPLOYMENT,JBPM4_DEPLOYPROP,JBPM4_LOB存儲流程定義相關的部署信息

JBPM4_EXECUTION主要是存放JBPM4的執行信息,Execution機制代替了JBPM3的Token機制

JBPM4_TASK存放需要人來完成的Activities(活動),需要人來參與完成的Activity 被稱爲Task

JBPM4_PARTICIPATION參與者表,存放參與者信息,參與者的種類有Candidate、Client、Owner、Replaced Assignee和Viewer。而具體的參與者既可以是單一用戶,也可以是用戶組

JBPM4_SWIMLANE泳道表。SwimLane是一種Runtime Process Role。通過SwimLane,多個Task可以一次分配到同一Actor身上

JBPM4_JOB  存放的是Timer 的定義

JBPM4_VARIABLE 存的是進行時的臨時變量。

10.2歷史數據庫表結構

JBPM4_HIST_PROCINST 與JBPM4_HIST_ACTINST 分別存放Process Instance和Activity Instance的歷史記錄

JBPM4_HIST_DETAIL 保存 Variable的變更記錄

JBPM4_HIST_VAR 保存歷史的變量 JBPM4_HIST_TASK Task的歷史信息

身份認證表結構

JBPM4_ID_GROUP ,JBPM_ID_MEMBERSHIP ,JBPM4_ID_USER 這三張表很常見,基本的權限控制,關於用戶認證方面建議還是自己開發一套,組件自帶的功能太簡單,使用中有很多需求難以滿足

除了前面述及的17張表外,還有一張引擎參數表,這是一張獨立的表,在此沒有單獨列出

 

11.GPD(圖形化流程設計器) for Eclipse插件安裝

  • · 幫助-->軟件更新(Help --> Software Updates)
  • · 選擇“有效軟件”標籤(Available Software)
  • · 點擊添加站點(Add Site)
  • · 在對話框裏添加站點擊(Add Site)對話框,點擊壓縮包(Archive)
  • · 找到gpd/jbpm-gpd-site.zip
  • · 點擊“確定”(ok)自動回到“軟件更新和擴展”對話框
  • · 選擇jPDL 4 流程設計器更新站點(jPDL 4 GPD Update Site)
  • · 點擊安裝(Install)
  • · 在安裝(Install)對話框中,選擇Flow Common Feature 和jPDL 4 Feature
  • · 點擊下一步(Next)
  • · 選擇接受(Accept),並點完成(Finish)
  • · 重啓Eclipse

12. 基於Web的Signavio流程設計器

jBPM3開始,這個著名的開源項目就因爲沒有基於瀏覽器的圖形化流程設計器而飽受用戶詬病,沒錯,進入了Web時代,流程設計器沒有理由總是停留在CS(Client Server)階段。有很多公司認識到了這一點,因此市場上的jBPM Web流程設計器並不少見,但它們或不開放源代碼、或基於特定的業務、或存在支持升級問題。總之,沒有RedHat JBoss jBPM的官方認證和支持,您用着總會不放心,不是嗎?

現在您不用擔心了。從Version 4.1開始,jBPM官方發佈包綁定了一個完全開源的基於Web的BPM流程設計器,代號爲Signavio。

12.1jBPM Web流程設計器簡介

Signavio Web流程建模工具是和JBoss jBPM團隊、德國的Signavio公司和Hasso Plattner Institute(HPI軟件工程研究所)緊密協作的成果。Signavio項目基於Web建模工具Oryx,Oryx是由HPI主持的開源項目。HPI和Signavio公司都會持續地在Oryx項目和Signavio項目中投入人員和資金的支持。關於這兩個項目,您可以在Google Code上找到:http://code.google.com/p/oryx-editor/downloads/list

使用Signavio可以讓業務流程分析人員通過瀏覽器建立業務流程模型。Signavio輸出的流程文件格式正是jPDL。這意味着Signavio設計出的流程定義文件可以直接導入到Eclipse GPD,反之亦然。流程定義文件會保存在硬盤上,位於 $jbpm_home/signavio-repository中,這個參數在安裝腳本中有默認值。

下圖是Signavio流程設計器的使用界面,它能很好地支持IE和Firefox瀏覽器。

 

注意:Signavio是基於web的業務流程建模工具,綁定在jBPM中,是100%開源的(基於MIT開放源代碼許可證)。同時,Signavio公司也提供商業版的同名工具,毫無疑問,商業版的Signavio有更多的功能。

12.2獨立安裝Signavio

複製 $jbpm_home/install/src/signavio/jbpmeditor.war 到您的目標Web容器中。

12.3配置Signavio

Signavio配置很簡單,大多數參數在web.xml中修改即可,您可以在 jbpmeditor.war/WEB-INF/ 目錄中找到。其中最重要的是 fileSystemRootDirectory 參數。這個參數的值必須爲一個物理上存在的本地目錄,它指定了流程定義文件(即*.jpdl.xml 文件)存儲的位置,以下是此參數的web.xml片段:

12.3 Signavio缺點:

1:不支持中文。

2:只能用firefox打開頁面。

13.在目錄中添加jPDL4模式

  • · 點擊窗口-->屬性(Windows-->Preferences)
  • · 選擇XML-->目錄(XML-->CataLog)
  • · 點擊添加(Add)
  • · 添加XML目錄(Add XML Catalog Entry)的窗口打開
  • · 點擊map-icon的圖標下面的按鈕並選擇文件系統(File System)
  • · 在打開的對話框中,選擇jBPM安裝目錄下src文件夾中jpdl.xsd文件
  • · 點擊打開(Open)並且關閉所有的對話框

14.ssh+jbpm整合

  • · 加入jbpm.jar包, 文件位置在jbpm發佈包根目錄下
    • 加入jbpm配置文件,文件位置在jbpm發佈包根目錄/examples/src下:  
    • · Spring配置文件加入以下代碼:
    • · Hibernate配置文件加入以下代碼:      第一次執行時需放開第一行代碼 以便在目標數據庫中創建jBPM 表結構;創建之後需手動註釋第一行代碼;
              或者在jbpm-4.4/install目錄下執行cmd命令: ant create.jbpm.schema 。

15.部署到tomcat6.0

需刪除tomcat6.0 lib目錄下el-api.jar 包,因爲會和jbpm的包產生衝突。然後導入jbpm發佈包lib目錄下的以下三個包:

 

Ok,啓動服務。

16.示例項目

         TestJBPM是一個簡單的jbpm+ssh+oracle10g+tomcat6整合項目,實現了一個簡單的請假流程。工程由myeclipse打開。

流程圖如下:

部署前需修改jbpm.hibernate.cfg.xml文件,改爲您自己的數據庫連接方式

導入庫文件 testJbpm.dmp

apache-tomcat-6.0.20 下有部署好的Signavio流程設計器,啓動tomcat前,需要在c盤下創建test文件夾。

17.JBPM工作流小結

經過兩週的學習和討論,我們瞭解了工作流的概念、並逐步分析和熟悉了jbpm工作流的特點和應用,現對jbpm工作流總結如下。
   17.1關於JBPM工作流
        17.1.1工作流
     工作流是一項分離業務操作和系統流程的技術。工作流由實體(Entity)、參與者(Participant)、流程定義(Flow Definition)、工作流引擎(Engine) 四部分組成。
      實體是工作流的主體,是需要隨着工作流一起流動的物件(Object)。例如,在一個採購申請批准流程中,實體就是採購申請單;在公文審批流程中,實體就是公文。 
  參與者是各個處理步驟中的責任人,可能是人,也可能是某個職能部門,還可能是某個自動化的設備; 
  流程定義是預定義的工作步驟,它規定了實體流動的路線。它可能是完全定義的,即對每種可能的情況都能完全確定下一個參與者,也可能是不完全定義的,需要參與者根據情況決定下一個參與者; 
  工作流引擎是驅動實體按流程定義從一個參與者流向下一個參與者的機制 
      前三個要素是靜態的,而第四個要素是動態的,它將前三者結合起來,是工作流的核心組成元素。
        17.1.2JBPM

    jBPM,全稱是Java Business Process Management,是一種基於J2EE的輕量級工作流管理系統。
       jBPM的一個特色是採用了它自己定義的JBoss jBPM Process definition language (jPdl)。jPdl認爲一個商務流程可以被看作是一個UML狀態圖。jPdl就是詳細定義了這個狀態圖的每個部分,如起始、結束狀態,狀態之間的轉換等。 
       jBPM的另一個特色是它使用Hibernate來管理它的數據庫。Hibernate是目前Java領域最好的一種數據持久層解決方案。通過Hibernate,jBPM將數據的管理職能分離出去,自己專注於商務邏輯的處理。
   17.2JBPM工作流的應用分析
       17.2.1jbpm工作流步驟:
       1、加載(發佈)流程定義 
       這個意思是,我們通過jbpm的designer插件,或者是用其他工具,制定出processDefinition
,然後將其加載到應用中的過程。這個加載可以是寫入內存中,或者是直接寫入數據庫等。 
       2、啓動流程
       創建流程實例的過程。具體創建實例的方法有多種,可根據自己的需要自行選擇。 
       3、處理任務 
       在流程流轉的過程中,JBPM引擎會爲我們生成任務的實例,我們就需要針對這些任務實例來進行處理,然後結束這些任務實例,並推動流程的流轉。 
       4、記錄流程的相關狀態 
       記錄流程狀態這點包括且不限於以下內容: 
       1)流程實例的開啓 
       2)任務實例的創建 
       3)任務實例的開始執行 
       4)任務實例的結束 
       5)流程實例的結束
       17.2.2使用jBPM的優勢
       將業務流程複雜的系統結構清晰話,提供系統運行時的靈活性
       1、解耦系統業務流程
       流程獨立,可以使用工具定義和建模,利於跟蹤、監控、管理、調度、優化和重整
       2、提高系統的靈活性
       系統流程定義生產環境的修改和調整,用戶和外部工具交互,任務的動態分派
       17.2.3使用jBPM時的問題
       1、對當前任務的條件查詢
       jBPM不提供靈活進行條件查詢的api,如果需要,可以自定義hibernate查詢,從jbpm相應的數據表中查詢任務數據。但需要對jBPM機制比較瞭解,而且有些複雜條件難以用jBPM本身的信息查到。
       2、當前任務的分頁
       在上一問題的基礎上,使用hibernate分頁。
       3、統計各個流程實例的狀態
       可以通過流程實例,在jbpm系統表中查詢,也可以在業務表的相應數據上加上狀態列來統計。前一個比較麻煩,後一個比較直觀,但不會因使用jBMP而使用工作量減少。
       4、工作流數據與業務數據結合
       一般通過在流程實例中添加相應的一筆數據的標識作爲變量來關聯。也可以有針對性的擴展jbpm的系統表來實現與業務的關聯性。
       5、修改流程後的歷史數據兼容性問題
       Jbpm工作流流程定義有版本的概念,修改流程後要重新發布,與舊的流程不是一個同一個版本。系統可以區別開新舊流程來。
   17.3結論
   1、工作量
   初步的結論是:引入工作流技術不會明顯減少系統開發工作量。相反,在一般情況下,會增加一部分工作量。如果項目流程比較少,而且比較固定,則使用工作流技術會明顯增加開發工作量。如果項目流程多,而且比較複雜,則使用工作流技術會使項目結構層次更加清晰、更具有擴展性,根據需求有可能要修改和擴展現有開源工作流類庫與數據庫結構,也會增加額外的工作量。但權衡之下,利大於弊。
    2、關於業務數據與jBPM本身的數據
    理論上說,如果使用jBPM,可以將所有業務數據放到jBPM的context中管理,不再維護業務數據表。但這樣的結果是在流程之外的環境(比如在統計報表中)中無法容易的得到業務數據。所以一般會建立業務數據表,我不使用工作流時一樣,然後讓jBMP從業務數據表中得到業務數據,而不在jBPM中保留業務數據。因此,使用jBPM後,在業務數據方面基本不會減少工作
    3、工作流學習成本
    工作流本身的概念較複雜,使用jbpm,需要學習其工作流的定義和結構,流程定義工具和語言、瞭解其數據結構。與其它工作流產品(如Shark)相比,jBPM對Java開發人員來說學習較低成本,在做流程複雜的項目時,學習成本可以接受。
    4、系統用戶和角色與工作流整合
    流程的流轉和任務的分派完成,都是用戶在控制,所以需要將用戶、角色和權限整合到jbpm工作流中。
    5、系統業務的整合和調整
    將流程抽取後,原本連續的業務處理變成一個個的任務節點。需要在每個業務相關處理處添加工作流流程控制、在每個節點處實現相關的業務和流程切入點。
    6、適用範圍
    Jbpm工作流適用於:
    1、項目流程比較多,流程複雜的項目。
    2、系統運行和維護、升級時,流程可能需要修改、調整和跟蹤、控制的項目

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章