- jBPM5 教程
- jBPM5 - 首頁
- jBPM5 - 概述
- jBPM5 - Eclipse 外掛
- jBPM5 - Hello World!
- jBPM5 - 元件
- jBPM5 - 工作流元件
- 繪製和驗證工作流
- jBPM5 - 示例
- jBPM5 有用資源
- jBPM5 快速指南
- jBPM5 - 有用資源
- jBPM5 - 討論
jBPM5 快速指南
jBPM5 - 概述
JBPM 代表“Java 業務流程管理”。它是一個 JBoss 產品,是一個開源框架。在繼續之前,讓我們首先定義一個業務流程。
什麼是業務流程?
根據定義,業務流程是一系列按可重複順序進行的任務,由人和/或系統執行以實現業務目標。它描述了需要執行的一系列步驟的順序(使用流程圖)。業務流程可以顯著提高業務邏輯的可見性和敏捷性。
讓我們舉個例子。以下螢幕截圖描述了一個大多數 IT 專業人員都熟悉的工作流/流程圖。這是大多陣列織中遵循的評估員工績效的常用流程。
流程按以下順序進行 -
員工進行自我評估並將報告提交給他們的專案經理。
然後,您的績效將由專案經理和人力資源經理評估。根據評估,他們會給員工評分。
然後,最終評分或績效反饋將反饋給員工。
此流程適用於幾乎所有員工,因此,它是理解業務流程的一個很好的例子。它是一系列任務,並且按照特定的順序進行。
什麼是 jBPM?
業務流程是理解任何組織框架的關鍵概念。像 jBPM 這樣的技術有助於以有效的方式管理複雜的業務流程。JBPM 是一種可以有效地協調業務流程的工具。通常,每個企業級應用程式都將有一系列按特定順序執行的任務,並且可以使用 jBPM 來協調這些流程。
jBPM 的優點在於它類似於流程圖。業務分析師也可以很容易地理解它。jBPM 可以嵌入到 Java 應用程式中並作為服務執行。
JBPM 的特性
jBPM 是一個輕量級、開源、完全可嵌入的用 Java 編寫的流程引擎。其最顯著的特性如下 -
jBPM 執行使用 BPMN 2.0 規範設計的業務流程。
jBPM 可以完全與 Eclipse 和類似的 IDE 整合,以提供拖放支援來建立工作流。
jBPM 具有可用的 UI 工具,可以從設計階段開始就讓業務分析師和使用者參與進來。
jBPM 在 JPA 和 JTA 的幫助下支援永續性和事務管理。
可以定義自定義工作項處理程式來建立使用者定義的任務,該任務稍後可以作為元件用於其他工作流。
jBPM5 - Eclipse 外掛
以下是安裝 jBPM 外掛的先決條件 -
- Java 1.5(或更高版本)SE JDK
- Eclipse 4.2 或任何版本以及 jBPM 外掛
由於 jBPM 是用 Java 編寫的,因此在本節中我們將介紹如何新增所需的外掛。考慮到大多數 Java 使用者使用 Eclipse,讓我們看看如何在 Eclipse 中新增 jBPM 外掛。
從以下連結下載二進位制檔案 - http://download.jboss.org/drools/release/5.3.0.Final/
在這裡看到 Drools 不要感到困惑。jBPM 使用相同的外掛。如果您已經安裝了 Drools 外掛,則可以跳過安裝步驟。
將其解壓縮到您的硬碟上。然後,啟動 Eclipse 並轉到幫助→安裝新軟體。
點選新增儲存庫 -
點選本地按鈕,然後選擇“.../binaries/org.drools.updatesite”(您在機器上下載的位置)
選擇Drools 和 jBPM,然後點選下一步按鈕。
再次點選下一步並選擇“我接受許可協議的條款”,然後點選完成。軟體安裝開始 -
安裝成功後,您將看到以下對話方塊 -
點選是。Eclipse 重新啟動。現在,轉到視窗→首選項→Drools→Drools 流程節點
如果您能夠看到上面螢幕截圖中顯示的節點,則證明外掛已成功安裝。現在我們準備編寫我們的第一個 jBPM 程式。
jBPM5 - Hello World!
在本節中,我們將使用 jBPM 編寫我們的第一個程式“Hello World”。請按照以下步驟操作 -
轉到檔案→新建→Drools 專案 -
點選下一步。為第一個專案提供一個合適的名稱:在本例中為“HelloWorld”。
點選下一步。選中下面的兩個複選框,即 -
- 將示例 HelloWorld 流程檔案新增到此專案
- 新增用於載入和執行 HelloWorld 流程的示例類
點選下一步。點選配置工作區設定(在以下螢幕截圖中標記為紅色) -
點選新增按鈕 -
點選新增按鈕後,將出現以下螢幕。點選“建立新的 Drools5 執行時”
提供到您已下載 droolsjbpm-tools-distribution-5.3.0.Final.zip 的二進位制檔案資料夾的路徑
然後,選擇已安裝的 Drools 執行時並點選確定。
出現以下螢幕。點選完成按鈕。
現在,在 Eclipse 中開啟包資源管理器檢視。您將看到以下螢幕 -
ProcessTest.java 類是載入規則流 (rf) 檔案的類,而ruleflow.rf 是為 HelloWorld 專案建立的基本規則流。
雙擊ruleflow.rf 檔案,您將看到以下規則流 -
綠色圓圈表示工作流的開始,而紅色圓圈表示工作流的結束。
左側顯示的面板列出了工作流中使用的不同元件。除了開始和結束之外,還有許多其他元件可用於工作流,我們將在下一節中介紹它們。
開始和結束事件之間的 Hello 是一個指令碼任務,指令碼任務的名稱為Hello。要檢視指令碼任務“Hello”中編寫了哪些程式碼,請轉到視窗→顯示檢視→其他→屬性。
注意 - 在使用 jBPM 時,請始終保持屬性檢視開啟,因為所有配置都僅在屬性檢視中可見。
點選確定按鈕。現在,選擇Hello,您就可以看到“Hello”事件的屬性 -
要檢視“Hello”事件中編寫的全部程式碼,請選擇操作屬性。
紅色標記的圓圈是操作屬性的編輯。單擊編輯後 -
您可以編輯它並編寫要在“Hello”指令碼任務中執行的程式碼。讓我們編輯它 -
點選確定。現在開啟 ProcessTest.java 類並將其作為 Java 應用程式執行。以下是其輸出 -
ProcessTest.java 類中使用的術語與 Drools 中使用的術語相同。在 ProcessTest.java 類中需要注意的是 -
ksession.startProcess("com.sample.ruleflow");
當您編寫啟動流程的程式碼時,傳遞給startProcess 方法的字串是在我們開啟工作流時顯示的 id 屬性。
jBPM5 - 元件
BPMS 核心是 BPM 的核心。下圖描述了 BPMS 核心及其元件。
語義模組
語義模組定義語言語義(每個單詞的含義)以及如何將其轉換為準備執行的流程引擎的內部結構。此模組基本上包含理解 BPMN2 語言的要素。
流程引擎
流程引擎負責實際執行我們的業務流程。流程引擎負責建立新的流程例項並維護每個例項的狀態。在流程引擎程式碼內部,定義了內部結構來表示流程定義中的每個活動。所有用於例項化這些流程定義的機制都將在流程引擎中定義的方式執行它們。
永續性和事務
在大多數企業應用程式中,所有互動都必須在事務邊界內執行,並且我們必須處理不同的系統、API 和設計。此外,我們必須有一個靈活的機制來定義 -
如何處理長期執行的流程
我們如何以及何時可以儲存有關流程狀態和流程正在處理的資訊的資訊
我們何時以及如何需要建立、提交或回滾流程引擎事務
哪些業務異常可以回滾或補償已執行的業務操作
所有上述要點都由 jBPM 內部的永續性和事務元件涵蓋。
審計/歷史日誌
此模組負責為使用者提供一種查詢我們流程如何執行的方法。此資訊包括有關已結束流程的歷史資訊以及有關正在執行的流程的最新資訊。
業務活動監控 (BAM) 工具和資訊儀表板是此模組生成的資訊的一些最常見的客戶端。審計/歷史日誌模組通常用於提取有用的資訊和指標,這些資訊和指標將與旨在相應地顯示此資訊的不同工具協作。
jBPM5 - 工作流元件
以下螢幕截圖顯示了 jBPM 5 中可用的各種工作流元件。使用這些元件,您可以建立工作流來協調您的流程。
您也可以建立自定義任務,但將在後面介紹。此外,還提供服務任務,可用於協調流程。
開始事件 - 這是每個流程中執行的第一個節點。您的流程中只能有一個開始節點。
結束事件 - 此節點表示流程的結束。在一個流程中,此型別的節點可以出現多次。
規則任務 - 它是一個評估規則流組的節點,即同一命名範圍下一組 Drools 規則。
閘道器(發散)又名分割 − 此節點在流程中建立新的路徑/分支。它有兩個或多個輸出連線。您可以選擇三種不同的分割/閘道器型別。
與門(AND GATE) − 流程同時繼續到所有輸出連線。
異或門(XOR GATE) − 根據工作流中定義的一些預定義約束,僅轉到一條輸出路徑。
或門(OR GATE) − 流程基於所有輸出約束的評估繼續執行,並在約束評估為 true 的路徑上啟用。
閘道器(匯聚)又名合併 − 此合併是分割的反向操作。它將多條路徑合併為一條。可以有四種不同的合併/閘道器型別 −
與(AND) − 當所有分支都完成後,流程繼續執行。
異或(XOR) − 當至少一個分支完成後,流程繼續執行。
區分器(Discriminator) − 與異或類似,如果其中一個分支已完成,則繼續執行。但與異或不同的是,它會註冊其他分支的完成情況,直到所有連線都完成。發生這種情況時,節點將重置,並且當傳入分支啟用時可以再次進入,迴圈重新開始。
N-of-M − 當 m 個分支中的 n 個分支完成後,流程繼續執行。在配置閘道器時,您需要指定 n(數量),即在流程退出之前應完成多少個分支。
可重用子流程 − 呼叫另一個流程。這對於將多個較小的流程組合成一個較大的流程非常有用。這個較大的流程可以是一個協調流程。您可以配置呼叫流程以等待被呼叫流程完成,並且使其具有與其父流程獨立的生命週期。
指令碼任務 − 可以執行簡單程式碼片段的節點。
定時器事件 − 此型別的節點啟動一個定時器,並在定時器到期時觸發。啟用時間相關的流程和重複性任務。
錯誤事件 − 此類節點表示流程中的錯誤條件。它沒有輸出連線。它指定一個 FaultName 和一個 FaultVariable。引擎將搜尋與 FaultName 匹配的異常處理程式,並將 Fault 資訊儲存在 FaultVariable 定義的變數中。
訊息事件 − 當發出預定義型別的事件時觸發。它可以是內部事件(在流程內部發出訊號)或外部事件(由流程引擎以外的外部實體發出訊號)。
使用者任務 − 建立人工任務的節點。此人工任務是必須由人工執行者完成的活動。
嵌入式子流程 − 有助於在父流程中建立子流程。它可以有自己的作用域。這對於較大的流程很有用,在這些流程中您希望將一些複雜的分支隔離。它可以有自己的變數和異常處理程式。
多例項又名ForEach − 它允許將元素集合饋送到子流程中。與可重用子流程結合使用時,在組合和協調較小的流程方面非常有用。
jBPM5 - 繪製和驗證工作流
要繪製工作流,您可以使用調色盤中提供的任何元件,如上文所述。所有工作流都將有一個開始節點,但可以有多個結束節點。
藉助螢幕截圖,我將向您展示如何建立工作流。
在這裡,我打開了空白的 rf 或 bpmn 檔案。
要新增任何事件,請從元件調色盤中選擇特定的事件,然後將其拖放到右側。例如,我選擇了開始事件並將其拖放到右側,以及一個發散閘道器。
現在,需要連線這兩個元件。選擇順序流並連線這兩個元件。
透過這種方式,您可以將元件拖到編輯器中,並使用順序流來連線不同的元件。只需要注意,某些元件將只有一個傳入連線和一個傳出連線,並且需要相應地設定順序流以建立有意義的流程。
在繪製工作流時,還需要設定一些屬性。我將在這裡釋出所有要設定的屬性。我剛剛建立了一個流程,但最初看起來並沒有什麼意義,因為我沒有在建立的工作流中設定任何屬性。
如上所示,這是一個沒有任何描述的空白工作流,並且無法從建立的工作流中看出任何內容。
但是,為了進一步解釋,我有一個開始元件,然後是一個發散閘道器,根據發散閘道器的條件,我將選擇一條路徑並在指令碼任務中執行一些程式碼,然後結束工作流。因此,我需要為發散閘道器、指令碼任務和匯聚閘道器設定屬性。
在此階段,我還將向您展示我的工作流存在一些錯誤,稍後將向您展示,一旦我設定了屬性,我的工作流將不再有任何錯誤,從而向您展示如何驗證建立的工作流。
提示 − 請記住,驗證器在 Windows → 首選項 → 驗證下開啟。
下面的螢幕截圖顯示了 Eclipse 中的設定。
根據螢幕截圖,您可以看到有 4 個錯誤。第一個錯誤指出指令碼沒有操作,然後另一個錯誤是定義的閘道器沒有定義型別。因此,我們需要消除這些錯誤才能執行工作流。
我們現在將逐一設定屬性,並觀察錯誤逐漸消失。
選擇第一個閘道器(發散),單擊屬性,然後單擊型別,並根據您的需求選擇閘道器。
選擇閘道器後,需要選擇一個約束。
單擊標記為紅色的圓圈,您將看到下面的螢幕截圖。
單擊編輯並根據螢幕截圖填寫詳細資訊 −
單擊匯入,並匯入將在其上執行任何操作的類。在螢幕截圖中,我們匯入了將在我們的示例中使用的乘客 POJO。
類似地,為另一個約束填寫詳細資訊 −
現在,單擊確定按鈕。
再次單擊確定。現在,選擇指令碼任務並執行與您對發散閘道器所做的相同操作。
我們只是添加了一個 SOP(列印語句)來顯示流程。任何 Java 或 MVEL 程式碼都可以在指令碼任務中編寫。
類似地,為第二個約束新增程式碼 −
最後,需要為發散閘道器新增閘道器型別。
現在,儲存工作流檔案並轉到問題檢視。所有問題都將得到解決。
問題檢視中沒有錯誤表明建立的工作流中沒有錯誤。這就是在 jBPM 中建立和驗證工作流的方式。
jBPM5 - 示例
我們將在本章中舉一個例子來解釋如何將 jBPM 應用於實踐。手頭的任務是使用 jBPM 根據乘客的收入來決定乘客是乘坐飛機還是火車。
建立專案的步驟與“Hello World”專案相同。在編輯器中開啟 .rf 檔案,並檢視標記為紅色的更改 −
在這裡,我們更改了規則流 ID(唯一)並添加了一個變數 income,因為我們將根據乘客的收入來決定路線。
如何設定變數 − 選擇標記為紅色的編輯按鈕。
點選新增按鈕 -
將彈出以下螢幕 −
將名稱設定為 income,型別設定為 Integer。
單擊確定。您將看到現在定義了 income 變數。
在 ProcessTest.java 類中需要進行的更改(載入和執行流程的類)−
Map<String, Object> params = new HashMap<String, Object>();
params.put("income", 1200);
// start a new process instance
ksession.startProcess("vivek.ruleflow", params);
您需要建立一個 MAP 並設定 MAP 中的值,並將此值傳遞給 startProcess 過載方法。如所示,我們更改了規則流 ID,因此在 startProcess 方法中使用了相同的 ID(vivek.ruleflow)。
在執行 ProcessTest.java 類之前,在與 ProcessTest.java 類相同的包中建立一個 POJO Passenger.java。
public class Passenger {
private String name;
private int income;
Getters and setters here
}
現在,將 ProcessTest.java 類作為 Java 應用程式執行,並檢視輸出 −
更改值 − params.put("income", 900); 並重新執行該類,檢視輸出的變化。