JBoss 系列七十九: jBPM 6 示例之 evaluation

概述

jBPM Evaluation 示例具有悠久的歷史,也是傳統的jBPM示例,jBPM首頁(http://www.jboss.org/jbpm)就有Evaluation 示例的介紹,jBPM默認安裝完成Evaluation 示例也被默認安裝,Evaluation 示例流程如下圖:


Evaluation流程有7個節點:

  • Start Event - 表示流程開始
  • User Task - Self Evaluation 
  • Gateway - Diverging,表示流程執行到此分開兩支
  • User Task - HR Manager Evaluation
  • User Task - Project Manager Evaluation
  • Gateway - Converging, 表示流程執行到此合併
  • End Event - 表示流程執行結束
Evaluation描述的是一個評估流程,首先自我評估,然後分別是HR評估和PM評估。本示例中設計到三種角色,krisv爲普通員工,john爲PM,mary爲HR,接下來我們分別演示在Eclipse 中運行Evaluation 示例,和在jBPM console中運行Evaluation 示例。

在Eclipse 中運行Evaluation 示例

根據jBPM 6 發佈,快速安裝,新功能介紹中介紹的步驟安裝jBPM 6,jbpm-installer目錄下會有sample目錄,該目錄中的sample爲jBPM Evaluation 示例。我將此示例整合到Github jBPM 6示例,詳細代碼見:https://github.com/kylinsoong/jbpm-6-examples/tree/master/evaluation

根據軟件安裝及資料下載中描述的方法下載jBPM Evaluation 示例到本地導入Eclipse,運行org.jbpm.demo.evaluation.ProcessMain可以執行Evaluation流程。ProcessMain代碼如下:

package org.jbpm.demo.evaluation;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.jbpm.services.task.identity.JBossUserGroupCallbackImpl;
import org.jbpm.test.JBPMHelper;
import org.kie.api.KieBase;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.manager.RuntimeEngine;
import org.kie.api.runtime.manager.RuntimeEnvironmentBuilder;
import org.kie.api.runtime.manager.RuntimeManager;
import org.kie.api.runtime.manager.RuntimeManagerFactory;
import org.kie.api.task.TaskService;
import org.kie.api.task.model.TaskSummary;

public class ProcessMain {

	public static void main(String[] args) {
		
		KieServices ks = KieServices.Factory.get();
		KieContainer kContainer = ks.getKieClasspathContainer();
		KieBase kbase = kContainer.getKieBase("kbase");

		RuntimeManager manager = createRuntimeManager(kbase);
		RuntimeEngine engine = manager.getRuntimeEngine(null);
		KieSession ksession = engine.getKieSession();
		TaskService taskService = engine.getTaskService();

		// start a new process instance
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("employee", "krisv");
		params.put("reason", "Yearly performance evaluation");
		ksession.startProcess("org.jbpm.demo.evaluation", params);
		System.out.println("Process started ...");
		
		// complete Self Evaluation
		List<TaskSummary> tasks = taskService.getTasksAssignedAsPotentialOwner("krisv", "en-UK");
		TaskSummary task = tasks.get(0);
		System.out.println("'krisv' completing task " + task.getName() + ": " + task.getDescription());
		taskService.start(task.getId(), "krisv");
		Map<String, Object> results = new HashMap<String, Object>();
		results.put("performance", "exceeding");
		taskService.complete(task.getId(), "krisv", results);
		
		// john from HR
		tasks = taskService.getTasksAssignedAsPotentialOwner("john", "en-UK");
		task = tasks.get(0);
		System.out.println("'john' completing task " + task.getName() + ": " + task.getDescription());
		taskService.start(task.getId(), "john");
		results = new HashMap<String, Object>();
		results.put("performance", "acceptable");
		taskService.complete(task.getId(), "john", results);
		
		// mary from PM
		tasks = taskService.getTasksAssignedAsPotentialOwner("mary", "en-UK");
		task = tasks.get(0);
		System.out.println("'mary' completing task " + task.getName() + ": " + task.getDescription());
		taskService.start(task.getId(), "mary");
		results = new HashMap<String, Object>();
		results.put("performance", "outstanding");
		taskService.complete(task.getId(), "mary", results);
		
		System.out.println("Process instance completed");
		
		manager.disposeRuntimeEngine(engine);
		manager.close();
		
		System.exit(0);
	}

	private static RuntimeManager createRuntimeManager(KieBase kbase) {
		JBPMHelper.startH2Server();
		JBPMHelper.setupDataSource();
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");
		RuntimeEnvironmentBuilder builder = RuntimeEnvironmentBuilder.Factory.get().newDefaultBuilder().entityManagerFactory(emf).userGroupCallback(new JBossUserGroupCallbackImpl("classpath:/usergroups.properties")).knowledgeBase(kbase);
		return RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(builder.get(), "org.jbpm.demo:evaluation:1.0");
	}

}

運行ProcessMain輸出的結果如下:

Process started ...
'krisv' completing task Self Evaluation: Please perform a self-evalutation.
'john' completing task Project Manager Evaluation: You need to evaluate krisv.
'mary' completing task HR Manager Evaluation: You need to evaluate krisv.
Process instance completed

另外JUnit運行org.jbpm.demo.evaluation.ProcessTest同樣可以運行流程,同樣輸出結果:

Process started ...
'krisv' completing task Self Evaluation: Please perform a self-evalutation.
'john' completing task Project Manager Evaluation: You need to evaluate krisv.
'mary' completing task HR Manager Evaluation: You need to evaluate krisv.
Process instance completed

在jBPM console中運行Evaluation 示例

任意根據jBPM 6 發佈,快速安裝,新功能介紹中介紹的步驟,或jBPM 6 使用 Mysql 替換默認的 H2 數據庫中介紹的步驟啓動jBPM 6,登錄jBPM console(http://localhost:8080/jbpm-console)。我們通過如下步驟運行示例。

啓動流程並進行Self Evaluation

使用krisv/krisv登錄jBPM console:


Authoring -> Project Authoring,在Project Explorer中選擇jbpm-playground,在jbpm-playground中選擇Evaluation,在右邊Project欄點擊Build & Deploy:


選擇Deploy -> Deployments會顯示部署的流程,選擇Process Management -> Process Definitions會列出所有定義部署的流程,在最右端點擊開始按鈕,開始執行流程,在彈出的輸入如下信息點擊開始:


選擇Task-> Task List,可以列出krisv所有權限的Self Evaluation,在列表右邊點擊Start圖標,Start圖標會變化爲Complete圖標,點擊Complete圖標,在流程右邊輸入good點擊Complete按鈕:


選擇Process Management -> Process Instance,接着在右邊Instance Details欄選擇Views -> Process Model,查看流程執行狀況:


如上圖Self Evaluation爲灰色,表示已經執行完成。

HR Manager Evaluation

退出當前登錄,使用mary/mary登錄jBPM console,選擇Task-> Task List,可以列出mary所有權限的HR Manager Evaluation,在列表右邊點擊Cliam圖標,Start圖標會變化爲Complete圖標,點擊Complete圖標,在流程右邊輸入good點擊Complete按鈕:


Project Manager Evaluation

退出當前登錄,使用john/john登錄jBPM console,選擇Task-> Task List,可以列出mary所有權限的Project Manager Evaluation,在列表右邊點擊Cliam圖標,Start圖標會變化爲Complete圖標,點擊Complete圖標,在流程右邊輸入good點擊Complete按鈕:




發佈了113 篇原創文章 · 獲贊 3 · 訪問量 73萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章