jBPM Evaluation 示例具有悠久的历史,也是传统的jBPM示例,jBPM首页(http://www.jboss.org/jbpm)就有Evaluation 示例的介绍,jBPM默认安装完成Evaluation 示例也被默认安装,Evaluation 示例流程如下图:
Evaluation流程有7个节点:
根据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"); } }
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
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 6 发布,快速安装,新功能介绍中介绍的步骤,或jBPM 6 使用 Mysql 替换默认的 H2 数据库中介绍的步骤启动jBPM 6,登录jBPM console(http://localhost:8080/jbpm-console)。我们通过如下步骤运行示例。
使用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为灰色,表示已经执行完成。
退出当前登录,使用mary/mary登录jBPM console,选择Task-> Task List,可以列出mary所有权限的HR Manager Evaluation,在列表右边点击Cliam图标,Start图标会变化为Complete图标,点击Complete图标,在流程右边输入good点击Complete按钮:
退出当前登录,使用john/john登录jBPM console,选择Task-> Task List,可以列出mary所有权限的Project Manager Evaluation,在列表右边点击Cliam图标,Start图标会变化为Complete图标,点击Complete图标,在流程右边输入good点击Complete按钮: