SpringBoot整合Activiti7—— 补偿边界/补偿中间事件(十五)

文章目录

  • 补偿边界/补偿中间事件
    • 代码实现
      • xml文件
      • 测试流程
      • 流程执行步骤


补偿边界/补偿中间事件

补偿事件可以被触发来回滚或修复之前已经完成的任务或活动。

补偿事件通常与错误边界事件(Error Boundary Event)结合使用。当任务或活动发生异常时,错误边界事件将被触发,进而触发相应的补偿事件。

补偿任务必须设置isForCompensation=true,否则报错。

<!-- 补偿边界事件 -->
<boundaryEvent id="sid-e212b29a-ee63-44e7-aa0d-dc3747d65292" name="补偿边界事件" attachedToRef="sid-27eea210-df9e-4d0f-baee-5e14af7fa0a5" cancelActivity="true"><compensateEventDefinition/>
</boundaryEvent>
<!-- 补偿中间事件-抛出 -->
<intermediateThrowEvent id="sid-d1d8eca9-f921-4e29-9112-2872519f0a3b" name="补偿中间事件"><compensateEventDefinition/>
</intermediateThrowEvent >
<!-- 虚线连接 -->
<association id="sid-ea9e367e-b7ed-46ed-9403-acea8418ffef" sourceRef="sid-e212b29a-ee63-44e7-aa0d-dc3747d65292" targetRef="sid-0cafc7be-15c3-403d-bbfc-b7ac67d2f768" associationDirection="None"/>

代码实现

在这里插入图片描述

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/processdef"><!-- 定义错误 --><error id="error1" name="errorCode1" errorCode="123456"/><process id="compensate" name="补偿事件" isExecutable="true"><documentation>补偿事件流程</documentation><!-- 开始事件 --><startEvent id="sid-7dc3694c-934a-4d35-881b-70bbe4301fcf" name="开始事件"/><!-- 钱包出账 --><serviceTask id="sid-f12484f1-2a44-49c2-80b9-efcac32b9cf1" activiti:exclusive="true" activiti:delegateExpression="${myServiceTaskListener}" name="钱包出账"/><sequenceFlow id="sid-383f9645-2666-4319-8f3a-60029387d412" sourceRef="sid-7dc3694c-934a-4d35-881b-70bbe4301fcf" targetRef="sid-f12484f1-2a44-49c2-80b9-efcac32b9cf1"/><!-- 银行入账 --><serviceTask id="sid-941a247c-a43b-44b7-bf2a-c4c6c1b97f99" activiti:exclusive="true" activiti:delegateExpression="${myServiceTaskListener}" name="银行入账"/><sequenceFlow id="sid-05d783bf-185d-4220-83d8-ae2beccc79f4" sourceRef="sid-f12484f1-2a44-49c2-80b9-efcac32b9cf1" targetRef="sid-941a247c-a43b-44b7-bf2a-c4c6c1b97f99"/><!-- 检验结果 --><serviceTask id="sid-7ef12140-baa4-4bff-a229-74b368c49fd8" activiti:exclusive="true" activiti:delegateExpression="${myThrowErrorDelegateListener}" name="检验结果"/><sequenceFlow id="sid-fc528896-5253-4ecd-814d-45b04e7675fb" sourceRef="sid-941a247c-a43b-44b7-bf2a-c4c6c1b97f99" targetRef="sid-7ef12140-baa4-4bff-a229-74b368c49fd8"/><!-- 结束事件1 --><endEvent id="sid-86a2c6a3-6e83-46c5-ae45-92820324b502" name="结束事件1"/><sequenceFlow id="sid-798a901a-081f-477f-b370-16258ccf0e4b" sourceRef="sid-7ef12140-baa4-4bff-a229-74b368c49fd8" targetRef="sid-86a2c6a3-6e83-46c5-ae45-92820324b502"/><!-- 错误边界事件 --><boundaryEvent id="sid-e7576742-080e-4dda-9a8b-a6e5241906f0" attachedToRef="sid-7ef12140-baa4-4bff-a229-74b368c49fd8" name="错误边界事件"><errorEventDefinition errorRef="error1"/></boundaryEvent><!-- 补偿中间事件-抛出 --><intermediateThrowEvent id="sid-d1d8eca9-f921-4e29-9112-2872519f0a3b" name="补偿中间事件"><compensateEventDefinition/></intermediateThrowEvent ><sequenceFlow id="sid-2fdee7fd-7171-470e-8b7f-2c0c3f351d1d" sourceRef="sid-e7576742-080e-4dda-9a8b-a6e5241906f0" targetRef="sid-d1d8eca9-f921-4e29-9112-2872519f0a3b"/><!-- 结束事件2 --><endEvent id="sid-76f8e2ab-30a0-46df-8ede-819cee3fd3c4" name="结束事件2"/><sequenceFlow id="sid-2435a8ad-769a-464b-8b17-4d8ccaa68db4" sourceRef="sid-d1d8eca9-f921-4e29-9112-2872519f0a3b" targetRef="sid-76f8e2ab-30a0-46df-8ede-819cee3fd3c4"/><!-- 钱包补偿任务 --><serviceTask id="sid-ae4a072e-bd85-4454-9450-a3e0982fbde4" activiti:exclusive="true" activiti:delegateExpression="${myServiceTaskListener}" isForCompensation="true" name="钱包补偿任务"/><!-- 银行补偿任务 --><serviceTask id="sid-2ea92408-adf6-474e-8d70-613f21dbf86a" activiti:exclusive="true" activiti:delegateExpression="${myServiceTaskListener}" isForCompensation="true" name="银行补偿任务"/><!-- 补偿边界事件 --><boundaryEvent id="sid-ad06646b-7513-4da5-98df-88a1f836fb52" attachedToRef="sid-f12484f1-2a44-49c2-80b9-efcac32b9cf1" name="钱包补偿边界事件"><compensateEventDefinition/></boundaryEvent><!-- 补偿边界事件 --><boundaryEvent id="sid-eace335f-644a-48aa-8eab-a65ff4e7dc41" attachedToRef="sid-941a247c-a43b-44b7-bf2a-c4c6c1b97f99" name="银行补偿边界事件"><compensateEventDefinition/></boundaryEvent><!-- 虚线连接 --><association id="sid-06dace8e-df61-4b33-b127-87ee5178795e" sourceRef="sid-ad06646b-7513-4da5-98df-88a1f836fb52" targetRef="sid-ae4a072e-bd85-4454-9450-a3e0982fbde4" associationDirection="None"/><association id="sid-8be52165-0a91-4ad3-b173-f4eb80f36776" sourceRef="sid-eace335f-644a-48aa-8eab-a65ff4e7dc41" targetRef="sid-2ea92408-adf6-474e-8d70-613f21dbf86a" associationDirection="None"/></process><bpmndi:BPMNDiagram id="BPMNDiagram_compensate"><bpmndi:BPMNPlane bpmnElement="compensate" id="BPMNPlane_compensate"><bpmndi:BPMNShape id="shape-6cb79578-6929-4743-a0a8-3259ccb657ea" bpmnElement="sid-7dc3694c-934a-4d35-881b-70bbe4301fcf"><omgdc:Bounds x="-266.1" y="-40.927986" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-d4995e3e-2613-4758-99f1-6992db206f3d" bpmnElement="sid-f12484f1-2a44-49c2-80b9-efcac32b9cf1"><omgdc:Bounds x="-213.28398" y="-65.927986" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-87b1c4d7-e1fb-4c18-9fb9-14dcede6e55a" bpmnElement="sid-383f9645-2666-4319-8f3a-60029387d412"><omgdi:waypoint x="-236.1" y="-25.927986"/><omgdi:waypoint x="-213.28398" y="-25.927986"/></bpmndi:BPMNEdge><bpmndi:BPMNShape id="shape-4452552f-250a-4c44-b337-ed04ccc54199" bpmnElement="sid-941a247c-a43b-44b7-bf2a-c4c6c1b97f99"><omgdc:Bounds x="-87.28398" y="-65.927986" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-0cd7df69-4eb7-4321-9cb9-d08d44209f72" bpmnElement="sid-05d783bf-185d-4220-83d8-ae2beccc79f4"><omgdi:waypoint x="-113.28398" y="-25.927986"/><omgdi:waypoint x="-87.28398" y="-25.927986"/></bpmndi:BPMNEdge><bpmndi:BPMNShape id="shape-4ec3eacd-51c2-45ee-8db0-16c6dba5f15c" bpmnElement="sid-7ef12140-baa4-4bff-a229-74b368c49fd8"><omgdc:Bounds x="41.116028" y="-65.927986" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-d4331ebf-31c7-430a-b97f-84a8cc612fb1" bpmnElement="sid-fc528896-5253-4ecd-814d-45b04e7675fb"><omgdi:waypoint x="12.716019" y="-25.927986"/><omgdi:waypoint x="41.116028" y="-25.927986"/></bpmndi:BPMNEdge><bpmndi:BPMNShape id="shape-56e3283f-bf3c-4bd3-8c6c-07cb6bfe7f02" bpmnElement="sid-86a2c6a3-6e83-46c5-ae45-92820324b502"><omgdc:Bounds x="171.31602" y="-40.927986" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-634db270-5ae4-417b-99c2-f77af08657e7" bpmnElement="sid-798a901a-081f-477f-b370-16258ccf0e4b"><omgdi:waypoint x="141.11603" y="-25.927986"/><omgdi:waypoint x="171.31602" y="-25.927986"/></bpmndi:BPMNEdge><bpmndi:BPMNShape id="shape-4661ada5-3ad5-4e19-b9e5-b9164dcf6cdf" bpmnElement="sid-e7576742-080e-4dda-9a8b-a6e5241906f0"><omgdc:Bounds x="79.51603" y="-2.3279858" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-58b658fe-6356-413f-9b3a-0be0fe39bccf" bpmnElement="sid-d1d8eca9-f921-4e29-9112-2872519f0a3b"><omgdc:Bounds x="90.51604" y="69.67202" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-0a0a0cf5-a146-43ac-bdc1-6c6498270b01" bpmnElement="sid-2fdee7fd-7171-470e-8b7f-2c0c3f351d1d"><omgdi:waypoint x="94.51603" y="27.672014"/><omgdi:waypoint x="105.51604" y="69.67201"/></bpmndi:BPMNEdge><bpmndi:BPMNShape id="shape-5643facb-06d8-4537-902b-f63664b4fa12" bpmnElement="sid-76f8e2ab-30a0-46df-8ede-819cee3fd3c4"><omgdc:Bounds x="154.516" y="69.67203" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-7a79b04b-ddbc-42f7-a734-0e24880a4659" bpmnElement="sid-2435a8ad-769a-464b-8b17-4d8ccaa68db4"><omgdi:waypoint x="120.51604" y="84.67202"/><omgdi:waypoint x="154.516" y="84.67203"/></bpmndi:BPMNEdge><bpmndi:BPMNShape id="shape-91c9ebe6-43e4-4c70-9a53-b97a39ff9010" bpmnElement="sid-ae4a072e-bd85-4454-9450-a3e0982fbde4"><omgdc:Bounds x="-225.88408" y="60.872017" width="103.0" height="47.6"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="sid-29019e4e-346b-423d-81b1-3045ea62a5e2" bpmnElement="sid-2ea92408-adf6-474e-8d70-613f21dbf86a"><omgdc:Bounds x="-88.78398" y="60.87201" width="103.0" height="47.6"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-c3538e72-8fdc-49b1-89e5-376a19e09cac" bpmnElement="sid-ad06646b-7513-4da5-98df-88a1f836fb52"><omgdc:Bounds x="-183.28398" y="-4.12798" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="sid-9efddae1-fabd-4af6-9a34-0b690d8ee66e" bpmnElement="sid-eace335f-644a-48aa-8eab-a65ff4e7dc41"><omgdc:Bounds x="-55.483974" y="-1.7279825" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-f042fae5-8388-4e3a-9541-032c9023877e" bpmnElement="sid-06dace8e-df61-4b33-b127-87ee5178795e"><omgdi:waypoint x="-168.28398" y="25.87202"/><omgdi:waypoint x="-174.38408" y="60.872013"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-9df10eda-2955-45e8-9ca9-56c0192a1bfe" bpmnElement="sid-8be52165-0a91-4ad3-b173-f4eb80f36776"><omgdi:waypoint x="-40.483974" y="28.272018"/><omgdi:waypoint x="-37.28398" y="60.872013"/></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</definitions>

测试流程

@Test
public void deployAndStartProcess() {// 部署流程Deployment deploy = repositoryService.createDeployment().addClasspathResource("processes/compensate.bpmn20.xml").deploy();System.out.println("deploy = " + deploy);// 启动流程String processDefinitionKey = "compensate";ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, processDefinitionKey + ":1000001");System.out.println("processInstance = " + processInstance);
}

流程执行步骤

// 1.部署并启动流程
// 2.触发钱包服务任务、银行服务任务、检验结果服务任务
// 3.触发错误边界事件,抛出错误码,触发补偿中间事件
// 4.触发钱包补偿边界事件,并触发钱包补偿任务
// 5.触发银行补偿边界事件,并触发银行补偿任务
// 6.结束流程

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

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

相关文章

旧衣物回收小程序开发,互联网模式下的营收有多大?

在当下快节奏的生活中&#xff0c;人们不仅生活水平在提高&#xff0c;消费水平也在逐渐提高&#xff0c;从而导致了闲置衣物的增加。为了减少浪费&#xff0c;旧衣服回收行业受到了大众的广泛关注&#xff0c;成为循环利用的一大方式。 当然&#xff0c;在当下网络时代&#…

Flink实时数仓同步:快照表实战详解

一、背景 在大数据领域&#xff0c;初始阶段业务数据通常被存储于关系型数据库&#xff0c;如MySQL。然而&#xff0c;为满足日常分析和报表等需求&#xff0c;大数据平台采用多种同步方式&#xff0c;以适应这些业务数据的不同存储需求。这些同步存储方式包括离线仓库和实时仓…

python-游戏篇-初级-飞机大战

文章目录 开发环境要求运行方法代码效果 开发环境要求 本系统的软件开发及运行环境具体如下。 操作系统&#xff1a;Windows 7、Windows 10。Python版本&#xff1a;Python 3.7.1。开发工具&#xff1a;PyCharm 2018或VScode。Python内置模块&#xff1a;sys、random、codecs…

C++集群聊天服务器 网络模块+业务模块+CMake构建项目 笔记 (上)

跟着施磊老师做C项目&#xff0c;施磊老师_腾讯课堂 (qq.com) 一、网络模块ChatServer chatserver.hpp #ifndef CHATSERVER_H #define CHATSERVER_H#include <muduo/net/TcpServer.h> #include <muduo/net/EventLoop.h> using namespace muduo; using namespace …

kubeadm安装K8S_v1.28.x容器使用docker

一&#xff0e;环境部署 1.1 基础环境配置&#xff08;只有1台服务器&#xff0c;作为masrer&#xff0c;也作为node使用&#xff09; [rootecs-cf5e ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootecs-cf5e ~]# uname -a Linux ecs-cf5e 3.10.0-11…

算法设计与分析实验:动态规划与回溯

目录​​​​​​​ 一、编辑距离 1.1 具体思路 1.2 思路展示 1.3 代码实现 1.4 复杂度分析 1.5 运行结果 二、买卖股票的最佳时机 2.1 具体思路 2.2 思路展示 2.3 代码实现 2.4 复杂度分析 2.5 运行结果 三、单词拆分 3.1 具体思路 3.2 思路展示 3.3 代码实现…

Leetcode206:反转链表

一、题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 示例&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]输入&#xff1a;head [] 输出&#xff1…

Linux mount

挂载移动硬盘 1、通过 命令 fdisk -l 查看移动硬盘 2、创建 挂载点及文件 mkdir zen 3、mount -t ntfs /dev/sdb1 zen 报错&#xff1a;mount: unknown filesystem type ‘ntfs’ 需要安装ntfs-3g 如下才用编译安装方法&#xff1a; wget https://tuxera.com/opensource/ntf…

【Spark实践6】特征转换FeatureTransformers实践Scala版--补充算子

本节介绍了用于处理特征的算法&#xff0c;大致可以分为以下几组&#xff1a; 提取&#xff08;Extraction&#xff09;&#xff1a;从“原始”数据中提取特征。转换&#xff08;Transformation&#xff09;&#xff1a;缩放、转换或修改特征。选择&#xff08;Selection&…

2024年第三届能源与环境工程国际会议(CFEEE 2024) | Ei&Scopus双检索

会议简介 Brief Introduction 2024年第三届能源与环境工程国际会议(CFEEE 2024) 会议时间&#xff1a;2024年12月12日-14日 召开地点&#xff1a;澳大利亚凯恩斯 大会官网&#xff1a;CFEEE 2024-2024 International Conference on Frontiers of Energy and Environment Engine…

【乳腺肿瘤诊断分类及预测】基于Elman神经网络

课题名称&#xff1a;基于Elman神经网络的乳腺肿瘤诊断分类及预测 版本日期&#xff1a;2023-05-15 运行方式: 直接运行Elman0501.m 文件即可 代码获取方式&#xff1a;私信博主或QQ&#xff1a;491052175 模型描述&#xff1a; 威斯康辛大学医学院经过多年的收集和整理&a…

20240202在WIN10下使用whisper.cpp

20240202在WIN10下使用whisper.cpp 2024/2/2 14:15 【结论&#xff1a;在Windows10下&#xff0c;确认large模式识别7分钟中文视频&#xff0c;需要83.7284 seconds&#xff0c;需要大概1.5分钟&#xff01;效率太差&#xff01;】 83.7284/4200.1993533333333333333333333333…