Activity并行网关和排他网关

说一说activiti中的排他网关和并行网关

 

 

activiti工作流中我们经常用到的网关有两种:

1. Exclusive Gateway 排他网关

 

 

排他网关.png

排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的排他网关), 用来在流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件
解析为true的顺序流(或者没有设置条件,概念上在顺序流上定义了一个'true') 会被选
中,让流程继续运行。

注意这里的外出顺序流 与 BPMN 2.0 通常的概念是不同的。通常情况下,所有条件结果> 为true的顺序流 都会被选中,以并行方式执行,但排他网关只会选择一条顺序流执行。
就是说,虽然多个顺序流的条件结果为true, 那么XML中的第一个顺序流(也只有这一
条)会被选中,并用来继续运行流程。 如果没有选中任何顺序流,会抛出一个异常

排他网关定义非常直接,在xml里面就一句

<exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" /><sequenceFlow id="flow2" sourceRef="exclusiveGw" targetRef="theTask1"><conditionExpression xsi:type="tFormalExpression">${input == 1}</conditionExpression></sequenceFlow><sequenceFlow id="flow3" sourceRef="exclusiveGw" targetRef="theTask2"><conditionExpression xsi:type="tFormalExpression">${input == 2}</conditionExpression></sequenceFlow><sequenceFlow id="flow4" sourceRef="exclusiveGw" targetRef="theTask3"><conditionExpression xsi:type="tFormalExpression">${input == 3}</conditionExpression></sequenceFlow>

 

 

排他网关示意图.png

上图是使用activiti modeler在线设计时候的截图

排他网关有点像java里面 if ... else if ... 每一个分支线上都要指定一个条件,可以有多条分支线,分支线的的变量需要在网关之前就设置到流程变量中。

** 举个栗子,可以在我上面图里面usertask这个节点添加一个执行监听器 **

 

 

添加执行监听器.png

 

 

添加执行监听器.png

执行监听器代码

@Service("taskFinishedLicenser")@Transactional(propagation = Propagation.NOT_SUPPORTED)public class TaskFinishedLicenser implements ExecutionListener {private static final long serialVersionUID = 2105979050046650949L;@Overridepublic void notify(DelegateExecution execution){try{//set global flow varibleexecution.getEngineServices().getRuntimeService().setVariableLocal(execution.getProcessInstanceId(),"input",1);}catch(Exception e){execution.getEngineServices().getRuntimeService().setVariableLocal(execution.getProcessInstanceId(),"input",2);logger.error(e.getMessage());}}
}

设置了流程变量后,分支条件获取的时候就可以读取到变量了。

2. Parallel Gateway 并行网关

 

 

并行网关.png

网关也可以表示流程中的并发情况。最简单的并发网关是 并行网关,它允许将流程分成
多条分支,也可以把多条分支 汇聚到一起。
并行网关的功能是基于进入和外出的顺序流的:

  • 分支: 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。

  • 汇聚: 所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。

注意,如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功
能。这时,网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。

与其他网关的主要区别是,并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。

这里需要强调的是,** 并行网关一定是成对出现的,有分支也要有汇聚 **

** 一个分支执行完毕后,需要等待其他分支全部执行完流程才会走到下一个节点 **

还有一个有意思的点是,流程开始执行后,点击流程监控发现,执行到并行网关中间的节点时,当前执行节点是显示在并行网关节点上,并不会显示到中间具体的一个节点,所以activiti是把两个并行节点间的所有任务节点,看作是一个事务。

 

 

并行网关.png

<startEvent id="theStart" /><sequenceFlow id="flow1" sourceRef="theStart" targetRef="fork" /><parallelGateway id="fork" /><sequenceFlow sourceRef="fork" targetRef="receivePayment" /><sequenceFlow sourceRef="fork" targetRef="shipOrder" /><userTask id="receivePayment" name="Receive Payment" />  <sequenceFlow sourceRef="receivePayment" targetRef="join" /><userTask id="shipOrder" name="Ship Order" /> <sequenceFlow sourceRef="shipOrder" targetRef="join" /><parallelGateway id="join" /><sequenceFlow sourceRef="join" targetRef="archiveOrder" /><userTask id="archiveOrder" name="Archive Order" /> <sequenceFlow sourceRef="archiveOrder" targetRef="theEnd" /><endEvent id="theEnd" />

 

转载于:https://www.cnblogs.com/shuchen007/p/9280134.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ValueError: too many values to unpack

Error msg: 执行: python manage,py makemigrations 报错:Value: too many values to unpack 问题: django第一次数据库迁移之后, apps中的model位置改变了, 导致之前生成的迁移文件检测不到原来的位置 解决: 删除所有的迁移文件重新迁移, 或者将之前的迁移文件的路径修改正确 …

安徽省计算机二级考试vfp试题,安徽省计算机二级VFP考试理论模拟试题附答案

《安徽省计算机二级VFP考试理论模拟试题附答案》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《安徽省计算机二级VFP考试理论模拟试题附答案(19页珍藏版)》请在人人文库网上搜索。1、一、单项选择题(每题1分&#xff0c;共40分) 1. 计算机能够自动工作&#xff0c;主…

你不懂js系列学习笔记-异步与性能- 02

第二章&#xff1a;回调 原文&#xff1a;You-Dont-Know-JS 主要理解 “回调地狱&#xff08;callback hell&#xff09;”痛苦的点到底是哪&#xff0c;以及尝试拯救回调。 1. 首先从实际生活中模拟 我相信大多数读者都曾经听某个人说过&#xff08;甚至你自己就曾这么说&…

c# 计算空格宽度像素_关于C#中换算像素和毫米的说明

在C#中是以像素作为尺寸单位的&#xff0c;像素是一种相对的尺寸概念&#xff0c;与毫米的转换跟当前显示器的分辨率有关&#xff0c;在不同分辨率下转换的系数也不同。借助C#中的GDI可以实现像素与毫米的换算&#xff1a;一、根据Win32 API定义函数获取显示器设备信息&#xf…

使用Apache Commons Net SMTP以Java(和Android)发送邮件:STARTTLS,SSL

最近我正在做一个Android实验&#xff0c;我想使用SMTP服务器通过android应用程序通过身份验证和加密来发送电子邮件。 好吧&#xff0c; 我发现Android上的javax.mail并不是一个很好的选择 &#xff0c;因为它取决于awt类&#xff08;我猜是传统&#xff09;&#xff1b; 有些…

列名无效

数据库增加新&#xff0c;视图没有更新转载于:https://www.cnblogs.com/Neil-Peng/p/9283355.html

天津天河计算机技术有限公司,“天河一号”超级计算机落户天津,命名为“天河”,取天津与“银河团队...

注意问题&#xff1a;一、对语句排序试题一般应注意以下几个问题&#xff1a;1.揣摩语段的整体意义&#xff0c;理清选项内容所提供的信息和表达内容的主旨。2.分析选项内容与整体语段的语境联系。3.进行对比分析&#xff0c;排除干扰项。该类试题几个选项在语句的数量或内容上…

tan和cot的梗_cot和tan的关系

各位家长好&#xff0c;我是51学霸(51xueba.cn)专栏作者&#xff0c;甜老师全文共计521字&#xff0c;建议阅读2分钟cot和tan的关联&#xff1a;tanαcotα1。在三角函数中&#xff0c;cotθcosθ/sinθ&#xff0c;当θ≠kπ&#xff0c;k∈Z时&#xff0c;cotθ1/tanθ&#…

基于 Webpack2、Vue2、iView2 的可视化脚手架 iView Cli 发布 2.0 版本

谷歌今天发布了一系列“性感”的软件&#xff0c;我们也发布了一款大家期待已久的开发者工具&#xff0c;同样很性感 &#xff1a;) iView 2.0 已经发布有两个月了&#xff0c;在 2.0 发布后&#xff0c;npm 下载量、issues 数量都提升了很多&#xff08;可以 watch 下项目&…

在OSGi中为Karaf构建Camel-CXF REST服务–组播和聚合

请查看我在Karaf的OSGi中构建普通CXF服务&#xff08;不使用Camel&#xff09;的其他文章 。 这是有关如何 创建一个CXF REST服务 使用骆驼多播&#xff08;并并行化&#xff09;传入的请求 来自两个不同服务的源数据 汇总响应并 最后将合并结果作为JSON返回给最终用户。…

Myeclipse debug时出现跳行问题的解决

1.删除Myeclipse中部署的类似的重复项目&#xff08;例如将测试项目中的代码包直接复制粘贴到另一个项目中&#xff09;。 2.project->clean 3.删除服务器中部署的项目并重新部署。 4.开启debug模式&#xff0c;问题解决。转载于:https://www.cnblogs.com/abortre/p/9999323…

2017计算机三级哪个好考,快速突破2017年计算机三级考试的几大复习阶段

原标题&#xff1a;快速突破2017年计算机三级考试的几大复习阶段为某种原因&#xff0c;本人共考过2次笔试&#xff0c;3次上机。其中笔试在70左右&#xff0c;3次上机均为满分&#xff0c;看着大批的同学在为三级发愁不知道如何准备和应考。我想我应该把经验和学习的方法写下来…

cgcs2000大地坐标系地图_为什么要从北京54和西安80统一到CGCS2000?测绘人必知!...

导 读北京54坐标和西安80坐标&#xff0c;使用了很多年&#xff0c;为何要统一成CGCS2000坐标&#xff1f;启用CGCS2000坐标有何重大意义&#xff1f;概述北京54坐标系和西安1980坐标系的建立极大的促进了新中国测绘的发展,然而随着空间大地测量技术的兴起,这两种经典的局部大地…

Amazon Elastic Map Reduce使用Apache Mahout计算建议

Apache Mahout是一个“可扩展的机器学习库”&#xff0c;其中包含各种单节点和分布式推荐算法的实现。 在我的上一篇博客文章中&#xff0c; 我描述了如何在单个节点上实现在线推荐系统来处理数据。 如果数据太大而无法放入内存&#xff08;> 100M首选项数据点&#xff09;怎…

基于element-ui实现table可配置化

写在前面 感谢 饿了么前端团队提供组件化框架elememt-ui&#xff0c;本文基础组件使用element-ui。 大背景 在开发一些系统过程中&#xff0c;使用table作数据展示在所难免。先来看看el-table组件。 非常简单易用的组件&#xff0c;根据提供的data数据&#xff0c;配置table…

一种思路,隐藏input标签,通过label关联

一种思路&#xff0c;隐藏input标签&#xff0c;通过label关联 <label class"btn btn-default btn-file">上传图片 <input hidden type"file" class"btn btn-default"></label>posted on 2018-07-09 16:59 .Tang 阅读(...)…

微信小程序 反编译

反编译处于技术学习角度&#xff0c;瞻仰大神代码。 使用工具 node mumu安卓模拟器获取小程序文件 小程序的代码压缩之后 会形成一个后缀为 wxapkg 的文件&#xff0c;下载到微信客户端打开mumu模拟器&#xff0c;安装微信登录之后&#xff0c;打开步步换小程序 &#xff0c;这…

麟龙指标通达信指标公式源码_通达信指标公式源码波段极限副图源码

做价值的传播者&#xff0c;一路同行&#xff0c;一起成长问题&#xff1a;怎样才能每天都收到这类文章&#xff01;答案&#xff1a;只需点击上方《通达信公式指标》{买卖公式}AA:(2*CHIGHLOW)/4;BB:AA-REF(C,12);CC:EMA(BB,13);DD:EMA(CC,2);EE:EMA(BB,34);FF:EMA(BB,55);GG:…

计算机系统备份的原则和策略,计算机系统数据备份机制与策略

计算机系统数据备份机制与策略20年第5 05期华中电力第 l卷 8计算机系统数据备份机制与策略耿煜(樊学院机械系&#xff0c;北襄樊襄湖 4 15 ) 4 03摘要&#xff1a;针对当今计算环境中不断增长的数据量&#xff0c;系统地分析、论述了完整的数据备份机制&#xff0c;出了相应的策…

用Java递增Map值的最有效方法–仅搜索一次键

这个问题可能被认为太基础了&#xff0c;但是在论坛上经常被问到。 在本文中&#xff0c;我将讨论一种仅在Map ONCE中搜索键的方法。 让我们首先来看一个例子。 假设我正在使用Map创建一个字符串频率列表&#xff0c;其中每个键是一个正在计数的String &#xff0c;值是一个In…