Activiti 6.x【10】BoundaryEvent【下】

简介: 版权声明:转载注明出处就OK的说,有些东西会转载,都会注明的说= =如果有冒犯麻烦见谅 https://blog.csdn.net/Pan1458689676/article/details/82720556 ...
版权声明:转载注明出处就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");
    }
}
AI 代码解读
@Test
public 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);
}
AI 代码解读

这里写图片描述

SignalBoundaryEvent

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

流程图总览
这里写图片描述

流程配置

这里写图片描述

ServiceTask
这里写图片描述

XML代码

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
  <signal id="Signal" name="SignalPTM"></signal>
  <process id="SignalBoundary" name="My process" isExecutable="true">
    <startEvent id="startevent1" name="Start"></startEvent>
    <userTask id="usertask1" name="User Task"></userTask>
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
    <boundaryEvent id="boundarysignal1" name="Signal" attachedToRef="usertask1" cancelActivity="true">
      <signalEventDefinition signalRef="Signal"></signalEventDefinition>
    </boundaryEvent>
    <serviceTask id="servicetask1" name="Service Task" activiti:class="com.ptm.prdemo.servicetask.ServiceTask"></serviceTask>
    <sequenceFlow id="flow3" sourceRef="boundarysignal1" targetRef="servicetask1"></sequenceFlow>
    <endEvent id="endevent1" name="End"></endEvent>
    <sequenceFlow id="flow4" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_SignalBoundary">
    <bpmndi:BPMNPlane bpmnElement="SignalBoundary" id="BPMNPlane_SignalBoundary">
      <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="130.0" y="160.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
        <omgdc:Bounds height="55.0" width="105.0" x="240.0" y="150.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="boundarysignal1" id="BPMNShape_boundarysignal1">
        <omgdc:Bounds height="30.0" width="30.0" x="280.0" y="190.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="servicetask1" id="BPMNShape_servicetask1">
        <omgdc:Bounds height="55.0" width="105.0" x="366.0" y="260.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="500.0" y="160.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
        <omgdi:waypoint x="165.0" y="177.0"></omgdi:waypoint>
        <omgdi:waypoint x="240.0" y="177.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
        <omgdi:waypoint x="295.0" y="220.0"></omgdi:waypoint>
        <omgdi:waypoint x="418.0" y="260.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
        <omgdi:waypoint x="345.0" y="177.0"></omgdi:waypoint>
        <omgdi:waypoint x="500.0" y="177.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>
AI 代码解读

测试代码

@Test
public 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);
}
AI 代码解读

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

这里写图片描述

关于补偿与取消边界事件在我的这篇帖子里面有相关demo讲解【https://blog.csdn.net/Pan1458689676/article/details/82711607#cancelendevent

CancelBoundaryEvent

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

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

CompensationBoundaryEvent

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

  • 触发补偿时,与补偿边界事件关联的补偿处理程序的调用次数与成功完成的活动的次数相同。
  • 如果将补偿边界事件附加到具有多个实例特征的活动,则会为每个实例创建补偿事件订阅。
  • 如果补偿边界事件附加到循环内包含的活动,则每次执行活动时都会创建补偿事件订阅。
  • 如果流程实例结束,则取消对补偿事件的订阅。
  • 嵌入的子进程不支持补偿边界事件。
  • 补偿边界事件必须关联一个补偿处理程序。
目录
打赏
0
0
0
0
2
分享
相关文章
|
10月前
|
C 标准库 - <signal.h> 详解
`&lt;signal.h&gt;` 是 C 标准库中的头文件,提供信号处理功能,用于通知程序特定事件,如非法操作或定时器到期。它定义了多种信号常量(如 `SIGINT`、`SIGTERM`、`SIGKILL`、`SIGSEGV`、`SIGUSR1` 和 `SIGUSR2`),并允许通过 `signal()` 或 `sigaction()` 设置信号处理函数。
keepalived详解(一)——keepalived理论基础
keepalived详解(一)——keepalived理论基础
277 0
零门槛体验DeepSeek-R1满血版
本文介绍了阿里云通过百炼平台的API调用DeepSeek开源模型的体验过程,如何开通服务、获取API-KEY、下载并配置chatbox客户端。此外,文中展示了多种部署方案,方便用户根据自身需求选择最优方式。
1325 9
零门槛体验DeepSeek-R1满血版
|
10月前
网站维护更新简易单页404页html代码
一个简约风格的单页html页面,可用于网站维护中或更新网站时挂个首页使用,如果不喜欢现在的颜色请F12修改设置既可。
184 1
网站维护更新简易单页404页html代码
mybatis映射关系(1-1 1-n n-n)
Mybatis 中的关系映射包括一对一、一对多和多对多。一对一映射可以通过ResultMap定义属性与字段的对应。一对多示例中,User类包含List&lt;Role&gt;,在User的mapper.xml中使用&lt;collection&gt;标签。多对一的情况,如Author与Blog,Blog的ResultMap中使用&lt;association&gt;来映射Author属性。多对多时,如部门与用户,通常需要中间表,并在双方实体中通过&lt;collection&gt;引用中间类,如UserForDept,来维护关系。
云上智能制造:重塑工业未来,驱动智能升级的新篇章
云上智能制造平台作为智能制造领域的重要创新成果,正以其独特的优势和广泛的应用场景引领着制造业的智能化升级。未来,随着技术的不断进步和应用的不断拓展,云上智能制造平台将在推动产业升级、提升生产效率、优化资源配置等方面发挥更加重要的作用。我们有理由相信,在云上智能制造平台的助力下,制造业将迎来更加辉煌的未来。
652 0
Java性能优化(三):Java基础-HashMap的设计与优化
HashMap核心特性数据结构:HashMap采用哈希表数据结构来存储键值对,利用哈希函数和哈希表快速定位元素位置,提供高效的键值对查询。参数设置初始容量:HashMap允许用户根据使用场景设定初始容量,以优化性能。在预知数据量时,可以通过计算(初始容量=预知数据量/加载因子)来设定合适的初始容量,以减少扩容操作,提高效率。加载因子:加载因子定义了哈希表何时进行扩容的阈值。加载因子较小时,哈希表会更早地进行扩容,减少哈希冲突;加载因子较大时,会提高内存利用率但可能增加哈希冲突。
567 2
相关系数 r 和决定系数 R2 的那些事
有人说相关系数(correlation coefficient, r)和决定系数(coefficient of determination, R2,读作R-Squared)都是评价两个变量相关性的指标,且相关系数的平方就是决定系数?这种说法对不对呢?请听下文分解!
2116 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问