1. 程式人生 > >工作流總結(三)JBPM 六個流程服務介面

工作流總結(三)JBPM 六個流程服務介面

在說明六個核心服務之前,需要提到的是ProcessEngine物件。類似一個工廠提供流程過程中所需的服務,抽象工廠設計模式的體現。而ProcessEngine物件是由Configruation物件來建立的,ProcessEngine是一個執行緒安全的物件,保證我們在開發過程中可以將這個物件放置到靜態物件中,或者通過JNDI協議來獲取物件;也能夠方便開發者去開發使用。所有的請求都可以使用同一個ProcessEngine物件,讀到這裡大家也應該想到了單例模式的使用。

1.建立ProcessEngine物件

通過Configruation配置物件直接就可以獲取ProcessEngine,前提是開發者的定義配置檔案jbpm.cfg.xml放在在classpath路徑下,並且名字沒有改變。

ProcessEngine processEngine=Configuration.getProcessEngine();

當然如果要使用其他的配置檔案也是可以的。這時候通過setResource來配置

/** provide an classpath resource as the configuration file */
public Configuration setResource(String resource) 

2.六個流程操作介面

獲取操作物件

repositoryService=processEngine.getRepositoryService();
executionService=processEngine.getExecutionService();
taskService=processEngine.getTaskService();
historyService=processEngine.getHistoryService();
managementService=processEngine.getManagementService();
identityService=processEngine.getIdentityService();

RepositoryService

流程資源服務介面,提供流程部署、查詢、刪除等操作。

如:

repositoryService.createDeployment().addResourceFromClasspath("offJbpm.jpdl.xml").deploy();

ExecutionService

流程服務執行介面,負責流程執行、流程推進、流程變數的設定等。

如:

Map<String,Object> map=new HashMap<String,Object>();
map.put("userId","1");
map.put("userName","cfl"); 
//id jbpm4_deployprop 
ProcessInstance processInstance= executionService.startProcessInstanceByKey("offJbpm", map);

TaskService

任務服務介面,提供流程任務的建立、儲存、刪除、查詢、完成。
如:

 taskService.completeTask("30001"); 

HistoryService

流程歷史服務介面,提供歷史流程資訊的查詢、以及對這些歷史流程資訊的分析。

ManagementService

控制流程服務介面,提供job的非同步控制執行查詢。

IdentityService

在流程控制中存在相關人員,既然有相關人員就會相關人員但認證。

3.jbpm中的命令模式

這裡寫圖片描述

在jbpm的流程服務介面的上層定義了一個抽象的服務Abstractimpl,抽象服務介面持有一個抽象的CommandService的物件,各個服務介面實現抽象服務介面。這樣在實現過程中,具體的命令實現抽象介面後,執行自己內部的方法實際上是執行的抽象CommandServcie的excute泛型方法來實現的。

通過將訊息傳送者和消費者分開,並將訊息封裝為一個物件。達到訊息消費者和訊息傳送者之間的解耦合,以此能夠控制訊息的撤銷和恢復。並且在訊息傳遞的過程中,無需去考慮訊息具體實現。

如同其他的知識一樣,在jbpm中常用的只有那麼一些小眾的api。在這裡,筆者不是對於那些大包大攬的學習痴狂者的批評。只是在學習之初,往往需要掌握的就是這些常用的api。