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. 处理类实现
此类实现 如果传入的参数为"you are greate" 则让流程走向 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);
}
}