JBPM4.4_核心概念與相關API

1. 核心概念與相關APIService API

1.1. 概念:Process definition, process instance ,  execution

1.1.1. Process definition

ProcessDefinition,流程定義:ui

一個流程的步驟說明。如一個請假流程、報銷流程、借款流程,是一個規則spa

例:指針

 

1.1.2. Process instance

ProcessInstance,流程實例:xml

表明流程定義的一次執行。如張三昨天按請假流程請了一次假。一個流程實例包括了全部運行階段, 其中最典型的屬性就是跟蹤當前節點的指針。對象

 

1.1.3. Execution

Execution,執行:blog

通常狀況下,一個流程實例是一個執行樹的根節點。 排序

使用樹狀結構的緣由在於, 這一律念只有一條執行路徑, 使用起來更簡單。 業務API不須要了解流程實例和執行之間功能的區別。 所以, API裏只有一個執行類型來引用流程實例和執行。接口

 

假設匯款和存檔能夠同時執行,那麼主流程實例就包含了2個用來跟蹤狀態的子節點:事務

 

1.1. ProcessEngine與Service API

1.1.1. Configuration與ProcessEngine

Interacting with jBPM occurs through services. The service interfaces can be obtained from the ProcessEngine which is build from a Configuration. A ProcessEngine is thread safe and can be stored in a static member field.ci

 

使用默認的配置文件(jbpm.cfg.xml)生成Configuration並構建ProcessEngine:

ProcessEngine processEngine = new Configuration().buildProcessEngine();

或是使用以下代碼獲取使用默認配置文件的、單例的ProcessEngine對象:

ProcessEngine processEngine = Configuration.getProcessEngine();

或是使用指定的配置文件(要放到classPath下):

ProcessEngine processEngine = new Configuration().setResource("my-own-configuration-file.xml")

      .buildProcessEngine();

 

1.1.2. jBPM Service API

jBPM全部的操做都是經過Service完成的如下是獲取Service的方式:

RepositoryService repositoryService = processEngine.getRepositoryService();

ExecutionService executionService = processEngine.getExecutionService();

TaskService taskService = processEngine.getTaskService();

HistoryService historyService = processEngine.getHistoryService();

ManagementService managementService = processEngine.getManagementService();

 

Service的做用:

RepositoryService

管理流程定義

ExecutionService

管理執行,包括啓動、推動、刪除Execution等操做

TaskService

管理任務

HistoryService

歷史管理(執行完的數據管理,主要是查詢

IdentityService

jBPM的用戶、組管理

ManagementService

 

1.1.3. API風格

方法調用鏈

 

每個方法都是流程有關的一個業務操做,默認是一個獨立的事務。

1.1.4. 查詢的有關API(風格)

功能說明

相應的查詢API

查詢「流程定義」

ProcessDefinitionQuery processDefinitionQuery =

  processEngine.getRepositoryService()

  .createProcessDefinitionQuery();

查詢「執行對象」

(流程實例)

ProcessInstanceQuery processInstanceQuery =

  processEngine.getExecutionService() //

  .createProcessInstanceQuery();

查詢「任務」

TaskQuery taskQuery = //

  processEngine.getTaskService()//

  .createTaskQuery();

查詢「執行歷史」

(流程實例歷史)

HistoryProcessInstanceQuery historyProcessInstanceQuery =

  processEngine.getHistoryService()

  .createHistoryProcessInstanceQuery();

查詢「任務歷史」

HistoryTaskQuery historyTaskQuery =

  processEngine.getHistoryService()

  .createHistoryTaskQuery();

 

以上列出的Query對象有:

1. ProcessDefinitionQuery

2. ProcessInstanceQuery

3. TaskQuery

4. HistoryProcessInstanceQuery

5. HistoryTaskQuery

 

這些Query對象的使用方法都是一致的,以下所示:

1, 添加過濾條件:調用其中的有關方法指定條件便可。如:

a) processDefinitionQuery.processDefinitionKey("請假")是指定查詢key爲請假的流程定義;

b) taskQuery.assignee("張三")是指定辦理人爲張三的任務。

2, 添加排序條件:

a) 調用 xxQuery.orderAsc(property),表示按某屬性升序排列

b) 調用 xxQuery.orderDesc(property),表示按某屬性降序排列

c) 可指定多個排序條件,就是表明第1順序,第2順序等。

d) 屬性名在各自的Query對象(接口)中有常量定義,如:

i. ProcessDefinitionQuery.PROPERTY_ID

ii. ProcessDefinitionQuery.PROPERTY_KEY

iii. TaskQuery.PROPERTY_NAME

iv. TaskQuery.PROPERTY_ASSIGNEE

3, 指定分頁有關信息:

a) 調用方法xxQuery.page(firstResult, maxResults);

b) 這是指定first與max的值(就是Hibernate中的Query.setFirstResult()與Query.setMaxResults())

c) 若是沒有調用這個方法,表明要查詢出符合條件的全部記錄。

4, 查詢獲得結果:

a) 調用方法xxQuery.list(); 表示查詢列表

b) 調用方法 xxQuery.uniqueResult(); 表示查詢惟一的結果

c) 調用方法xxQuery.count(); 表示查詢符合條件的記錄數量

相關文章
相關標籤/搜索