JBPM6学习笔记(三)创建并运行Human Task

人工任务是工作流当中相当重要的一部分,现在我们自己创建一个包含人工任务的流程。

在之前创建的helloworld工程中,新建BPMN2 Process文件,然后打开如下图:


鼠标移到开始节点,会出现选项卡,从上到下从右至左,依次是删除、属性、添加activity、添加Gateway、添加Event、创建连接。

选择添加acitvity,添加一个User Task,双击打开,设置一些属性:


actors中添加一个john,On entry script执行System.out.println("Start: This is User Task 1.....")这段代码,On exit script执行

System.out.println("End: This is User Task 1.....")这段代码。

在User Task1节点后添加一个User Task节点,设置Actors为mary,On entry script:System.out.println("Start: This is User Task 2.....");

On exit script:System.out.println("End: This is User Task 2.....");然后添加end节点,最终流程如下:


点击流程空白处,在Eclipse的Properties视图当中,可以看到流程的属性:


在Process当中设置流程Id为com.zxl.hello(这个随意),下面开始测试这个流程的代码:

package com.sample;

import java.util.List;

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

import junit.framework.TestCase;

import org.jbpm.test.JBPMHelper;
import org.junit.BeforeClass;
import org.junit.Test;
import org.kie.api.KieBase;
import org.kie.api.io.ResourceType;
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.runtime.process.ProcessInstance;
import org.kie.api.task.TaskService;
import org.kie.api.task.model.TaskSummary;
import org.kie.internal.KnowledgeBase;
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.io.ResourceFactory;

public class TaskTest extends TestCase{

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@Test
	public void test() {
		KnowledgeBase kbase = null;
		try {
			kbase = createKnowledgeBase("helloworld.bpmn");
		} catch (Exception e) {
			e.printStackTrace();
		}
		RuntimeManager manager = createRuntimeManager(kbase);
		RuntimeEngine engine = manager.getRuntimeEngine(null);
		KieSession ksession = engine.getKieSession();
		TaskService taskService = engine.getTaskService();
		
		//启动流程
		ProcessInstance processInstance = ksession.startProcess("com.zxl.hello");
		//测试User Task 1
		List<TaskSummary> tasks = taskService.getTasksAssignedAsPotentialOwner("john", "en-UK");
		TaskSummary task1 = tasks.get(0);
		//启动任务
		taskService.start(task1.getId(), "john");
		//完成任务
		taskService.complete(task1.getId(), "john", null);
		
		//测试User Task 2
		tasks = taskService.getTasksAssignedAsPotentialOwner("mary", "en-UK");
		TaskSummary task2 = tasks.get(0);
		//启动任务
		taskService.start(task2.getId(), "mary");
		//完成任务
		taskService.complete(task2.getId(), "mary", null);
		
		manager.disposeRuntimeEngine(engine);
		System.exit(0);
	}

	private KnowledgeBase createKnowledgeBase(String process) throws Exception {
		System.out.println("Loading process " + process); 
		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
		kbuilder.add(ResourceFactory.newClassPathResource( process), ResourceType.BPMN2);
		return kbuilder.newKnowledgeBase();
	}
	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).knowledgeBase(kbase);  
        return RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(builder.get());  
    }  
}

运行代码,控制台输出:





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值