ProcessDefinition,流程定義:ui
一個流程的步驟說明。如一個請假流程、報銷流程、借款流程等,是一個規則。spa
例:指針
ProcessInstance,流程實例:xml
表明流程定義的一次執行。如張三昨天按請假流程請了一次假。一個流程實例包括了全部運行階段, 其中最典型的屬性就是跟蹤當前節點的指針。對象
Execution,執行:blog
通常狀況下,一個流程實例是一個執行樹的根節點。 排序
使用樹狀結構的緣由在於, 這一律念只有一條執行路徑, 使用起來更簡單。 業務API不須要了解流程實例和執行之間功能的區別。 所以, API裏只有一個執行類型來引用流程實例和執行。接口
假設匯款和存檔能夠同時執行,那麼主流程實例就包含了2個用來跟蹤狀態的子節點:事務
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();
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 |
|
方法調用鏈
每個方法都是流程有關的一個業務操做,默認是一個獨立的事務。
功能說明 |
相應的查詢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(); 表示查詢符合條件的記錄數量