您的位置:首页 > 产品设计 > 产品经理

jBPM4.4开发(六)-----------fork节点

2012-07-05 17:53 387 查看

分支节点fork

fork节点把一条路径分离成多条同时进行(并发)的执行路径,每条路径产生一个单独的执行,该节点适用于需要并发流程的场景,比如多部门的审批等。fork后一般会有join节点来合并流程,join节点可以设置在执行节点之前需要到达该节点的执行数目。

默认情况下join会等待所有子执行全部结束才会执行,如果设置了multiplicity,那么只要满足multiplicity的数量就会执行该join节点。

Demo:
流程定义文件:fork.jpdl.xml
<?xml version="1.0" encoding="UTF-8"?>

<process name="fork" xmlns="http://jbpm.org/4.4/jpdl">
<start name="start1" g="0,141,48,48">
<transition name="to fork1" to="fork1" g="-20,-15"/>
</start>
<fork name="fork1" g="77,141,48,48" >
<transition name="to state1" to="state1" g="100,131:4,-18"/>
<transition name="to state2" to="state2" g="100,202:2,-15"/>
</fork>
<state name="state1" g="158,108,92,52">
<transition name="to join1" to="join1" g="322,134:-60,-13"/>
</state>
<state name="state2" g="163,176,92,52">
<transition name="to join1" to="join1" g="323,200:-59,-11"/>
</state>
<join name="join1" g="294,140,48,48">
<transition name="to state3" to="state3" g="-30,-17"/>
</join>
<state name="state3" g="377,137,92,52">
<transition name="to end1" to="end1" g="-25,-18"/>
</state>
<end name="end1" g="523,144,48,48"/>
</process>



测试类:
ForkTest.java

package com.itstudio.jbpm.fork.demo;

import java.util.Set;

import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;

public class ForkTest {
public  final Configuration configuration = new Configuration();
public  final ProcessEngine processEngine=configuration.buildProcessEngine();
public  final RepositoryService repositoryService= processEngine.getRepositoryService();
public  final ExecutionService executionService=processEngine.getExecutionService();
public  final TaskService taskService=processEngine.getTaskService();

private void deploy() {
repositoryService.createDeployment().addResourceFromClasspath(
"com/itstudio/jbpm/fork/demo/fork.jpdl.xml").deploy();
System.out.println("Successful");
}

private void test() {
Set<String> set = null;
//启动流程或得流程实例
ProcessInstance processInstance = executionService.startProcessInstanceByKey("fork");
//查看当前活动节点[state1,state2]
set = processInstance.findActiveActivityNames();
System.out.println("当前节点:"+set);
//得倒活动节点
String id1 = processInstance.findActiveExecutionIn("state1").getId();
processInstance = executionService.signalExecutionById(id1);
//查看当前活动节点
set = processInstance.findActiveActivityNames();
System.out.println("当前节点:"+set);
//得倒活动节点
String id2 = processInstance.findActiveExecutionIn("state2").getId();
processInstance = executionService.signalExecutionById(id2);
//查看当前活动节点
set = processInstance.findActiveActivityNames();
System.out.println("当前节点:"+set);
//得倒活动节点
String id3 = processInstance.findActiveExecutionIn("state3").getId();
processInstance = executionService.signalExecutionById(id3);
//查看当前活动节点[无]
set = processInstance.findActiveActivityNames();
System.out.println("此时节点:"+set);
}

public static void main(String[] args) {
ForkTest demo = new ForkTest();
demo.deploy();
demo.test();
}
}


By Mr.Z
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息