JBPM4之选择实例

1. 流程图

如果传入的条件为“you are good” 则走good 分支并执行完成操作,good分支转向completed ,此操作之心hello操作。

如果传入的条件为“you are bad”则走bad 分支并结束流程

2. 流程定义文件

<?xml version="1.0" encoding="UTF-8"?>

<process key="PurchaseOrder2" name="PurchaseOrder2" xmlns="http://jbpm.org/4.4/jpdl">

	<start g="17,80,80,40">
		<transition to="CheckOrder"/>
	</start>
	<decision g="209,81,80,40" name="CheckOrder">
		<handler class="com.spring.order.purchaseOrderHandler" />
		<transition g="-22,-18" name="good" to="Completed">
		</transition>
		<transition name="bad" to="Error" g="-23,-18">
		</transition>
	</decision>

	<java class="com.spring.hello.Hello" g="297,12,80,40" method="sayHello" name="Completed"/>

	<end g="307,166,80,40" name="Error"/>

</process>

 
这里当执行到checkOrder选择条件时,执行一个处理句柄通过handler标签定义,具体处理类通过com.spring.order.purchaseOrderHandler处理

3. 处理类实现

    此类实现 如果传入的参数为&quot;you are greate&quot; 则让流程走向 good 分支 否则执行bad 分支、

    此类需要实现接口DecisionHandler

   

package com.spring.order;

import org.jbpm.api.jpdl.DecisionHandler;
import org.jbpm.api.model.OpenExecution;

public class purchaseOrderHandler implements DecisionHandler {

	/**
	 * 
	 */
	private static final long serialVersionUID = -1063124149556228361L;

	@Override
	public String decide(OpenExecution execution) {
		String content = (String) execution.getVariable("content");
		if (content.equals("you are great")) {
			System.out.println("good---");
			return "good";
		} else if (content.equals("you are bad")) {
			System.out.println("bad---");
			return "bad";
		}
		return "good";
	}

}

 

 

4. 执行流程

 

package com.spring.order;

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

import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.history.HistoryProcessInstance;
import org.jbpm.api.history.HistoryProcessInstanceQuery;

public class ProcessEngineLearn {

	public static String deployProcess(ProcessEngine pe, String jpdlPath) {
		return pe.getRepositoryService().createDeployment()
				.addResourceFromClasspath(jpdlPath).deploy();
	}

	public static void deleteProcessInst(ProcessEngine pe, String processInstId) {
		pe.getRepositoryService().deleteDeployment(processInstId);
	}

	public static ProcessInstance excuteProcess(ProcessEngine pe, String key,
			Map<String, Object> variables) {
		return pe.getExecutionService().startProcessInstanceByKey(key,
				variables);
	}

	public static void findHisProcessInstance(ProcessEngine pe) {
		HistoryProcessInstanceQuery hpq = pe.getHistoryService()
				.createHistoryProcessInstanceQuery();
		System.out.println(hpq.count());
		System.out.println(hpq.processDefinitionId("Hello-3").list().size());
		for (java.util.Iterator<HistoryProcessInstance> it = hpq
				.processDefinitionId("Hello-3").list().iterator(); it.hasNext();) {
			HistoryProcessInstance hpi = (HistoryProcessInstance) it.next();
			System.out.println("hpi.getProcessInstanceId()="
					+ hpi.getProcessInstanceId());
			System.out.println("hpi.getProcessDefinitionId()="
					+ hpi.getProcessDefinitionId());
			pe.getExecutionService().startProcessInstanceById(
					hpi.getProcessDefinitionId());
		}
	}

	/**
	 * @param args
	 * @throws InterruptedException
	 */
	public static void main(String[] args) throws InterruptedException {
		ProcessEngine pe = new Configuration().buildProcessEngine();
		deployProcess(pe, "com\\spring\\order\\perchaseOrder2.jpdl.xml");
		Map<String, Object> variables = new HashMap<String, Object>();
		variables.put("content", "you are bad");// 传入流程的参数
		excuteProcess(pe, "PurchaseOrder2", variables);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值