1. 程式人生 > 實用技巧 >jBPM4.x入門教程

jBPM4.x入門教程

什麼是JBPM?

全稱是Java Business Process Management(業務流程管理),它是覆蓋一業務流程管理、工作流、服務協作等領域的一個開源的、靈活的、易擴充套件的可執行流程語言框架。它給我們提供流程邏輯的定義方法,給我們提供根據流程邏輯來排程業務物件的功能。能使我們避免在程式碼中硬編碼流程邏輯,因為硬編碼的邏輯難於理解和複用,並且非常容易受到變化的影響,維護起來極度困難。

注意:JBPM中是工作流中的一種,其它的還有activiti、OSWorkflow等等。

JBPM安裝配置

開發環境:Eclipse+GPD外掛+tomcat

安裝過程:

1、下載並安裝Eclipse3.x、jbpm4.x、tomcat6.x

2、安裝GPD外掛(eclipse圖形化流程設計器):"eclipse->help->Install New Software...->add->Archive",選擇jbpm安裝目錄install/src/gdp目錄下的jbpm-gpd-site.zip進行安裝。安裝成功後,配置jbpm執行環境"eclipse->Preference->JBoss jBPM->Runtime Location->add"選擇jbpm的安裝目錄。

3、配置JPDL xml的schema:"eclipse->Preference->XML->XML Catalog->add->File System

"選擇jbpm安裝目錄下的src中的jpdl-4.x.xsd

4、匯入開發用的jbpm jar包(包含jbpm安裝目錄中的jbpm.jar和lib下的所有包,最好建立User Libary)

5、建立配置檔案jbpm.cfg.xml和jbpm.hibernate.cfg.xml:若不知怎麼寫可參看jbpm安裝目錄中examples/src中的,然後根據自己需要修改即可。

6、設計自己的流程定義和Java類,正式開發

JBPM開發步驟

1、業務人員進行業務分析,建立process definition(其實是活動圖)。

2、根據業務人員建立的process definition建立JBPM的流程定義(即*.jpdl.xml檔案)。

3、開發人員編寫流程處理程式碼

4、開發人員,或者系統管理員進行流程部署,通常情況下系統都會有流程釋出的UI。

5、使用者進行流程操作。

JBPM例項

1、管理流程定義

  • 部署流程定義

    String deploymentId=repositroyService.createDeployment().addResourceFromClasspath("asdf.jpdl.xml").deploy();

  • 查詢流程定義:List<ProcessDefinition> list=repositroyService.createProcessDefinitionQuery().list();

  • 刪除流程定義:repositroyService.deleteDeploymentCascade(deploymentId);

2、管理流程例項:

  • 發起新流程:ProcessInstance pi=executionService.startProcessInstanceByKey("test",map);

  • 執行等待的流程:pi=executionService.signalExecutionById(pi.getId());

  • 檢視流程例項:List<ProcessInstance> list=executionService.createProcessInstanceQuery().list();

  • 終止流程例項:executionService.endProcessInstance(pi.getId(),"終結理由");

  • 刪除流程例項:executionService.deleteProcessInstanceCascade(pi.getId());

3、查詢當前任務例項:executionService.findProcessInstanceById("test.1001");

4、查詢角色任務:taskService.findPersonalTasks("科長");

5、完成提交:taskService.completeTask("2001");

JBPM核心物件

101204710.jpg

Configuration和ProcessEngine

Configuration是jbpm的配置檔案管理物件即資源載入物件,負責載入jbpm的各種配置,如資料庫連線配置,身份認證,jpdl等相關配置。

ProcessEngine是一個服務工廠,有點類似hibernate的sessionFactory,負責建立jbpm的每個服務。

1、ProcessEngine通過Configuration類構建,Configuration以單例模式獲取ProcessEngine物件

2、ProcessEngine是執行緒安全的,所有的執行緒和請求都可以使用同一個ProcessEngine物件

3、ProcessEngine processEngine=Configuration.getProcessEngine();

JBPM服務

1、RepositoryService:流程資源服務介面。提供對流程定義的部署、查詢、刪除和流程圖檢視等操作。

2、ExecutionService:流程執行服務介面。提供啟動流程例項、推進、刪除等操作。

3、TaskService:人工任務服務介面。提供對任務的建立、提交、查詢、儲存、刪除等操作。

4、HistoryService:流程歷史服務介面。提供對任務的管理操作。提供對流程歷史庫中流程例項、歷史活動例項等記錄的查詢。

5、ManagementService:流程管理介面,通常用來管理Job(非同步服務)。

6、IdentityService:身份認證服務介面。提供對流程使用者、使用者組管理。

JBPM流程變數

1、流程例項變數ProcessInstance

新增變數:

Map<String,Object> avriable=new HashMap<String,Object>();

variable.put("userId","001");

variable.put("userName","tom");

ProcessInstance processInstance=executionService.startProcessInstanceByKey("test",variable);

獲取變數:

String userId=executionService.getVariable("test.3001","userId").toString();

修改變數:

executionService.setVariable("test.3001","userId","10098");

移除變數:流程結束,便移除了流程變數。

2、任務變數Task

新增變數:

Map<String,Object> avriable=new HashMap<String,Object>();

variable.put("taskUserId","001");

variable.put("taskUserName","tom");

taskService.setVariable("5004",variable);

獲取變數:

String userId=taskService.getVariable("5004","taskUserName");

移除變數:

3、變數作用域,兩種變數之間的關係。

任務變數與流程變數:流程變數>任務變數

流程變數與流程變數:不同的流程例項變數不能互相訪問。

任務變數與任務變數:不同任務的任務變數不能互相訪問。

JBPM EL表示式

1、JBPM使用EL表示式獲取變數${name}

2、使用EL表示式執行物件方法

流程定義語言JPDL

JPDL(JBoss jBPM Process Definition Language)是構建於jBPM構架上的流程語言之一。在JPDL中提供了任務(task)、待處理狀態(wait states)、計時器(timers)、自動處理(automated actions)...等術語,並通過圖型化的流程定義,很直觀地描述業務流程。

JPDL常用活動(Activity)節點

1、控制流程的活動:能改變流程狀態的活動

  • Start(開始活動)

  • End(結束活動)

  • Decision(判斷活動)

  • Fork-join(分支活動);

  • sub-process(子流程)

  • State(狀態活動)

  • Task(人工任務活動)

2、原子活動:並不會對流程進行排程,而是執行相關程式碼。

  • java

  • script

  • sql

  • hql

  • email

JBPM Task人工任務活動

1、任務分配的幾種方式

  • Assignee

  • Candidate-groups

  • assingmentHander

  • Swimlanes

2、表單屬性form

113032819.jpg


轉載於:https://blog.51cto.com/netbloomy/1205533