博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activiti 6.x【10】BoundaryEvent【下】
阅读量:6495 次
发布时间:2019-06-24

本文共 3213 字,大约阅读时间需要 10 分钟。

版权声明:转载注明出处就OK的说,有些东西会转载,都会注明的说= =如果有冒犯麻烦见谅 https://blog.csdn.net/Pan1458689676/article/details/82720556

BoundaryEvent组件


BoundaryEvent总述

这里写图片描述

BoundaryEvent分为六种,第一种为时间Boundary事件,第二种为错误Boundary事件,第三种消息Boundary事件,第四种为取消Boundary事件,第五种为补偿Boundary事件,第六种为信号Boundary事件。边界事件依附于事件存在。

MessageBoundaryEvent

流程图总览

这里写图片描述

注意部分

这里写图片描述

ServiceTask

这里写图片描述

ServiceTask

public class ServiceTask implements JavaDelegate {
@Override public void execute(DelegateExecution execution) { System.out.println("ServiceTask"); }}
@Testpublic void MessageBoundary() throws InterruptedException{    Deployment deployment = repositoryService.createDeployment()                    .name("MessageBoundary")                    .addClasspathResource("bpmn/MessageBoundary.bpmn")                    .addClasspathResource("bpmn/MessageBoundary.png")                    .deploy();    System.out.println("部署ID:"+deployment.getId());    System.out.println("部署名称:"+deployment.getName());    ProcessInstance pi = runtimeService.startProcessInstanceByKey("MessageBoundary");    Execution ex = runtimeService.createExecutionQuery().processDefinitionId(pi.getProcessDefinitionId()).activityId("boundarymessage1").singleResult();    runtimeService.messageEventReceived("msgName", ex.getId());    Thread.sleep(1000 *10);}

这里写图片描述

SignalBoundaryEvent

如果有两个活动信号边界事件捕获相同的信号事件,则两个边界事件都会被触发,即使它们是不同流程实例的一部分。

流程图总览

这里写图片描述

流程配置

这里写图片描述

ServiceTask

这里写图片描述

XML代码

测试代码

@Testpublic void SignalBoundary() throws InterruptedException{    Deployment deployment = repositoryService.createDeployment()                    .name("SignalBoundary")                    .addClasspathResource("bpmn/SignalBoundary.bpmn")                    .addClasspathResource("bpmn/SignalBoundary.png")                    .deploy();    System.out.println("部署ID:"+deployment.getId());    System.out.println("部署名称:"+deployment.getName());    ProcessInstance pi = runtimeService.startProcessInstanceByKey("SignalBoundary");    runtimeService.signalEventReceived("SignalPTM");    Thread.sleep(1000 *10);}

事先部署三个流程之后执行signalEventReceived【三个流程全部执行了信号边界事件,信号事件是跨流程实例的,而且,与message不同message是一对一的发送要对应指定的ExecutionId对应单实例单执行对象。name不能在单个流程定义中有重复】

这里写图片描述

关于补偿与取消边界事件在我的这篇帖子里面有相关demo讲解【】

CancelBoundaryEvent

触发取消边界事件时,它首先中断当前作用域中活动的所有执行。接下来,它开始补偿范围内的所有有效补偿边界事件。补偿是同步进行的。

  • 注意:事务子流程只允许一个取消边界事件。
  • 注意:如果事务子进程承载嵌套子进程,则仅对已成功完成的子进程触发补偿。
  • 注意:如果在具有多实例特征的事务子流程上放置取消边界事件,则如果一个实例触发取消,则边界事件将取消所有实例。

CompensationBoundaryEvent

补偿边界事件在附加的活动成功完成时激活。此时,创建对补偿事件的相应订阅。在触发补偿事件或相应的流程实例结束时,将删除订阅。

  • 触发补偿时,与补偿边界事件关联的补偿处理程序的调用次数与成功完成的活动的次数相同。
  • 如果将补偿边界事件附加到具有多个实例特征的活动,则会为每个实例创建补偿事件订阅。
  • 如果补偿边界事件附加到循环内包含的活动,则每次执行活动时都会创建补偿事件订阅。
  • 如果流程实例结束,则取消对补偿事件的订阅。
  • 嵌入的子进程不支持补偿边界事件。
  • 补偿边界事件必须关联一个补偿处理程序。
你可能感兴趣的文章
Linux Tar Split压缩解压缩分片压缩解压缩
查看>>
使用scikit-learn进行文本分类
查看>>
Ansible自动化运维配置与应用(结合实例)
查看>>
下面简要介绍软件工程的七条原理
查看>>
java POI实现excel实现表格导出
查看>>
Lua(三)——语句
查看>>
TensorFlow的基本运算01
查看>>
怎么看电脑有没有安装USB3.0驱动
查看>>
overflow清除浮动的原理
查看>>
Spring Boot 使用parent方式引用时 获取值属性方式默认@
查看>>
Elasticsearch之中文分词器插件es-ik(博主推荐)
查看>>
解决maven下载jar慢的问题(如何更换Maven下载源)
查看>>
linux安装gitLab
查看>>
concurrent包的实现示意图
查看>>
详解Java中的clone方法 -- 原型模式
查看>>
golang os.Args
查看>>
Linux常用命令
查看>>
【重磅】云栖社区2017年度内容特辑
查看>>
Java WEB开发时struts标签 显示set内容
查看>>
spring-data-elasticsearch 概述及入门(二)
查看>>