`
suhuanzheng7784877
  • 浏览: 702560 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ff8d036b-05a9-33b5-828a-2633bb68b7e6
读金庸故事,品程序人生
浏览量:47708
社区版块
存档分类
最新评论

JBPM4学习总结之5——Fork-join(分支/聚合活动)

    博客分类:
  • jbpm
阅读更多

当我们需要流程并发处理、执行的时候就需要分支、聚合。当出现fork的时候,流程实例不是仅仅进入其中一个分支,而是所有分支都会被激活,直到外界接口执行此分支才会往下走,所有的分支节点都聚合到join的时候,整个分支才会继续往下面走,否则,最先到达join分支的节点会一直等待在join那里等待其他。

流程图如下:

 

流程描述如下:

 

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

 

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

    <start g="286,17,48,48" name="start1">

       <transition g="-52,-22" name="to fork" to="fork" />

    </start>

    <fork g="287,96,48,48" name="fork">

       <transition g="113,119:-56,-22" name="to sendEmail" to="sendEmail" />

       <transition g="314,200:0,-30" name="to sendMSN" to="sendMSN" />

       <transition g="548,120:-56,-22" name="to QQ" to="QQ" />

    </fork>

    <state g="66,175,92,52" name="sendEmail">

       <transition g="110,304:-49,-22" name="to join1" to="join1" />

    </state>

    <state g="181,173,92,52" name="sendMSN">

       <transition g="228,304:-49,-22" name="to join1" to="join1" />

    </state>

    <state g="503,225,92,52" name="QQ">

       <transition g="551,455:-49,-22" name="to join2" to="join2" />

    </state>

    <join g="143,281,48,48" name="join1">

       <transition g="-56,-22" name="to state4" to="drive" />

    </join>

    <state g="121,369,92,52" name="drive">

       <transition g="167,453:-49,-22" name="to join2" to="join2" />

    </state>

    <join g="265,432,48,48" name="join2">

       <transition g="-50,-22" name="to end1" to="end1" />

    </join>

    <end g="267,532,48,48" name="end1" />

</process>

测试代码如下:

package code;

import java.util.Set;

import junit.framework.TestCase;

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;

public class Forkjoin extends TestCase {

	// 加载myjbpm.cfg.xml文件
	ProcessEngine processEngine = new Configuration().setResource(
			"myjbpm.cfg.xml").buildProcessEngine();

	// 资源服务,流程模板的部署、查询、删除

	RepositoryService repositoryService = processEngine.getRepositoryService();

	// 执行服务,设置流程实例的发起、执行
	ExecutionService executionService = processEngine.getExecutionService();

	/**
	 * 发布流程
	 */
	public void test01Deploy() {

		String deployId = repositoryService.createDeployment()
				.addResourceFromClasspath("forkjoin.jpdl.xml").deploy();

		System.out.println(deployId);
	}

	/**
	 * 发起流程,开始分开流程
	 */
	public void test02startFork() {

		// 开始process流程
		ProcessInstance processInstance = executionService
				.startProcessInstanceByKey("forkjoin");

		// 流程实例的ID
		String pid = processInstance.getId();

		System.out.println(pid);// forkjoin.10001

	}

	/**
	 * 判断有三个活动的,等待着的节点
	 */
	public void test03EqualActiveNames() {

		ProcessInstance processInstance = executionService
				.createProcessInstanceQuery().processInstanceId(
						"forkjoin.10001").uniqueResult();

		Set<String> activeNames = processInstance.findActiveActivityNames();

		System.out.println(activeNames);
	}

	/**
	 * 执行SendEmail节点
	 */
	public void test04ExeSendEmail() {

		ProcessInstance processInstance = executionService
				.createProcessInstanceQuery().processInstanceId(
						"forkjoin.10001").uniqueResult();

		String eid = processInstance.findActiveExecutionIn("sendEmail").getId();

		processInstance = executionService.signalExecutionById(eid);

		Set<String> activeNames = processInstance.findActiveActivityNames();

		System.out.println(activeNames);

	}

	/**
	 * 执行SendMSN节点
	 */
	public void test04ExeSendMSN() {

		ProcessInstance processInstance = executionService
				.createProcessInstanceQuery().processInstanceId(
						"forkjoin.10001").uniqueResult();

		String eid = processInstance.findActiveExecutionIn("sendMSN").getId();

		processInstance = executionService.signalExecutionById(eid);

		Set<String> activeNames = processInstance.findActiveActivityNames();

		System.out.println(activeNames);

	}
	
	/**
	 * 执行QQ节点
	 */
	public void test04ExeQQ() {

		ProcessInstance processInstance = executionService
				.createProcessInstanceQuery().processInstanceId(
						"forkjoin.10001").uniqueResult();

		String eid = processInstance.findActiveExecutionIn("QQ").getId();

		processInstance = executionService.signalExecutionById(eid);

		Set<String> activeNames = processInstance.findActiveActivityNames();

		System.out.println(activeNames);

	}
	
	/**
	 * 执行drive节点
	 */
	public void test05Exedrive() {

		ProcessInstance processInstance = executionService
				.createProcessInstanceQuery().processInstanceId(
						"forkjoin.10001").uniqueResult();

		String eid = processInstance.findActiveExecutionIn("drive").getId();

		processInstance = executionService.signalExecutionById(eid);

		Set<String> activeNames = processInstance.findActiveActivityNames();

		System.out.println(activeNames.size());
		
		System.out.println(processInstance.isEnded());

	}

}

 

执行test02startFork()发起流程的时候,会有3state节点同时等待着被处理,test04ExeSendEmail()执行的后,sendEmailstate继续往下执行,因为此时sendMSNstate并未执行,所以join1join现在处于等待状态。test04ExeSendMSN()执行后sendMSNstate被执行了,所以这个时候join1不在处于等待状态了,而直接往下走到了drivetest04ExeQQ()执行后QQstate继续往下走,和刚才的情况一样,因为drive还处于中断等待状态,所有流程一直在join2等待中…………。test05Exedrive()执行后,大功告成,所有节点都已经执行完毕,流程走向终结。

  • 大小: 30.7 KB
分享到:
评论

相关推荐

    jBPM4学习总结

    【jBPM4学习总结】 jBPM,全称为Java Business Process Management,是一个开源的、灵活且可扩展的业务流程管理框架,涵盖了业务流程管理、工作流和服务协作等多个领域。自2004年10月加入JBoss组织后,jBPM逐渐成为...

    jbpm工作流引擎——jbpm-3.1.4.jar

    jbpm-3.1.4.jar,jbpm工作流引擎jbpm工作流引擎

    jbpm5.2学习1------安装与配置

    5. **jbpm-examples**: 示例项目,用于学习和测试jbpm的功能。 **安装步骤**: 1. **设置环境变量**:确保JDK已安装并设置好`JAVA_HOME`环境变量,因为jbpm需要Java运行环境。 2. **配置数据库**:jbpm默认使用H2...

    jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)

    jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载

    jeecg-jbpm-framework 20130202.zip

    jeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202.zipjeecg-jbpm-framework 20130202....

    jbpm4.4 会签 测试( fork & join)

    "fork"在jbpm中指的是流程分支,当流程到达一个fork节点时,流程会分裂为多个并行的路径,每个路径可以独立执行不同的任务或者活动。这在会签场景中意味着,当需要多个部门或人员同时对一个请求进行审批时,流程会...

    JBPM4学习经验总结

    JPDL4 schema效验是在jbpm-4.4.zip中的src文件夹下的jpdl-4.0.xsd——jpdl-4.4.xsd的xml效验,将其引入到Eclipse中来,就可以使用快捷键编辑xml流程了。引入步骤如下:Preferences-&gt;Myeclipse-&gt;files and editors-&gt;...

    jbpm-jpdl-suite-3.2GA -(3)分开压缩(共5个文件)jbpm下载

    jbpm-jpdl-suite-3.2GA -(3)分开压缩(共5个文件)jbpm下载 jbpm-jpdl-suite-3.2GA -(3)分开压缩(共5个文件)jbpm下载

    jbpm-jpdl-suite-3.2GA -(2)分开压缩(共5个文件)jbpm下载

    jbpm-jpdl-suite-3.2GA -(2)分开压缩(五个文件)jbpm下载 jbpm-jpdl-suite-3.2GA -(2)分开压缩(五个文件)jbpm下载

    jbpm-workitems-5.1.0.Final-sources.jar

    jbpm-workitems-5.1.0.Final-sources.jar jbpm5 源码

    jbpm-jpdl-suite-3.2GA -(4)分开压缩(共5个文件)jbpm下载

    jbpm-jpdl-suite-3.2GA -(4)分开压缩(共5个文件)jbpm下载 jbpm-jpdl-suite-3.2GA -(4)分开压缩(共5个文件)jbpm下载

    JBPM采购申请系统——08_JBPM流程节点.7z

    JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...

    JBPM采购申请系统——02_Eclipse与JBPM.7z

    JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z ...

    工作流jbpm中join与fork用法

    总结一下,`Fork`和`Join`是JBPM工作流中的关键概念,它们负责流程的分支和合并,实现并行和同步。了解和熟练掌握这两个节点的用法,对于设计高效、灵活的工作流程至关重要。在实际操作中,开发者可以通过JBPM的图形...

    jbpm7示例(jbpm-7.3.0.Final-examples)

    2017年jBPM 正式发布了全新的 7版本。jBPM 是一个完全开源的业务流程管理(BPM)和案例管理... &lt;artifactId&gt;jbpm-test&lt;/artifactId&gt; &lt;version&gt;7.3.0.Final&lt;/version&gt; &lt;/dependency&gt; 这与Gradle,Ivy和Buildr类似。

    JBPM采购申请系统——05_构建JBPM数据库.7z

    JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM...

    JBPM采购申请系统——06_JBPM版本控制及Token对象.7z

    JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z ...

    jBPM-jPDL学习笔记——流程设计与控制(转载)

    《jBPM-jPDL学习笔记——流程设计与控制》 在IT行业中,流程管理和自动化是企业提升效率的关键。jBPM(Java Business Process Management)是一个开源的工作流和业务流程管理套件,它允许开发者通过定义流程定义...

    jBPM-jPDL学习笔记——流程设计与控制

    jBPM-jPDL流程设计与控制 jBPM-jPDL是基于Java的业务流程管理(BPM)系统,它提供了一个灵活的流程设计和控制机制,允许开发者定义、执行和监控业务流程。下面,我们将通过学习笔记,了解jBPM-jPDL的流程设计与控制...

    完整工作流JBPM项目实战全过程教程2---项目详细讲解

    1. **jbpm-src-3.1.4.jar和jbpm-3.1.4.jar**:这是JBPM的核心库,包含流程引擎、工作流服务、持久化等核心组件。 2. **hibernate3.jar**:Hibernate是流行的对象关系映射(ORM)框架,用于将Java对象与数据库交互,...

Global site tag (gtag.js) - Google Analytics