DelegateExecution和EXecution有啥区别

DelegateExecution 和 Execution 都是 Activiti 引擎中用于表示流程实例的执行对象,但它们在具体使用上有一些区别:

DelegateExecution

接口:DelegateExecution 是一个接口,继承自 VariableScope 接口。它主要在扩展点(如执行监听器、任务监听器、服务任务)中使用,提供了一些额外的方法来操作流程实例和变量。

使用场景:通常在编写自定义的业务逻辑时使用,例如实现 ExecutionListener 或 JavaDelegate 接口时。

功能:提供了丰富的方法来访问流程实例的状态、获取和设置流程变量、获取当前活动信息等。

Execution

实现类:Execution 是一个具体的类,代表一个正在执行的流程实例或者子流程。它是一个较低级别的 API,主要在 Activiti 引擎内部使用。

使用场景:一般不直接在业务逻辑中使用,而是在引擎内部进行流程实例的执行和控制。

功能:提供了基本的执行上下文信息,如流程实例 ID、父执行 ID、活动 ID 等。

主要区别

1. 抽象程度

• DelegateExecution 是接口,更高层次,提供给用户在扩展点上进行操作。

• Execution 是具体的实现类,主要用于引擎内部处理。

2. 使用方式

• DelegateExecution 通常在实现 ExecutionListener、TaskListener 或 JavaDelegate 接口时使用。

• Execution 一般不直接用于业务逻辑中,而是由引擎内部使用。

示例对比

使用 DelegateExecution:

import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;public class MyExecutionListener implements ExecutionListener {@Overridepublic void notify(DelegateExecution execution) {// 使用 DelegateExecution 获取和设置流程变量String myVar = (String) execution.getVariable("myVar");System.out.println("流程变量 myVar 的值: " + myVar);execution.setVariable("myVar", "newValue");}
}

引擎内部使用 Execution:

import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ExecutionManager;// 引擎内部代码示例
public void someInternalMethod(CommandContext commandContext) {ExecutionManager executionManager = commandContext.getExecutionManager();ExecutionEntity execution = executionManager.findExecutionById("executionId");// 进行一些引擎内部处理execution.setVariable("internalVar", "value");
}

总结

• DelegateExecution 是一个接口,主要用于扩展点上进行业务逻辑操作,提供了丰富的方法来访问和操作流程实例。

• Execution 是一个具体类,主要在引擎内部使用,负责流程实例的执行和控制。

在大多数情况下,您将在编写自定义业务逻辑时使用 DelegateExecution,而不是直接使用 Execution。

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

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

相关文章

遗传算法与深度学习实战——进化深度学习

遗传算法与深度学习实战——进化深度学习 0. 前言1. 进化深度学习1.1 进化深度学习简介1.2 进化计算简介 2. 进化深度学习应用场景3. 深度学习优化3.1 优化网络体系结构 4. 通过自动机器学习进行优化4.1 自动机器学习简介4.2 AutoML 工具 5. 进化深度学习应用5.1 模型选择&…

【mybatis的批量操作】

在日常开发中,如果要操作数据库的话,或多或少都会遇到批量数据的处理,我们公司使用的mybaits-plus作为持久层的框架,今天就简单介绍一下mybaits批量操作数据库的几种方式。 1.循环插入 其实这种方式并不是批量插入,只…

功能实现——使用 OpenPDF 将 HTML 转换为 PDF,并将其上传到 FTP 服务器

目录 1.需求分析2.项目环境搭建3.将 HTML 转换为 PDF3.1.代码实现mail.htmlHtmlToPDFController.javaPDFConverterService.javaPDFConverterServiceImpl.java 3.2.测试3.3.注意事项 4.将生成的 PDF 上传到 FTP 服务器4.1.搭建 FTP 服务器4.2.配置文件4.3.代码实现FtpUtil.javaF…

谷粒商城实战笔记-75-商品服务-API-品牌管理-品牌分类关联与级联更新

文章目录 一,引入Mybatis Plus分页插件二,品牌列表的模糊查询三,增加品牌测试数据四,开发后台品牌关联分类接口1,接口product/categorybrandrelation/catelog/list2,接口product/categorybrandrelation/sav…

拓扑排序与有向无环图 -- Kahn算法和深度优先搜索

拓扑排序与有向无环图 文章目录 拓扑排序与有向无环图1. 什么是拓扑排序快速排序(Quick Sort)拓扑排序(Topological Sort)主要区别 2. 拓扑排序与有向无环图之间的契合性3. Kahn算法实现拓扑排序算法思想算法步骤算法代码 4. 深度…

线性回归从零实现

《李沐动手学深度学习》P30 import numpy as np import matplotlib.pyplot as plt import random# y x * w b noise # x dimension: (num_samples, 2) # w dimension: (2, 1) # b dimension: (1, 1) # noise dimension: (num_samples, 1) def generate_data(num_samples, w…

汽车长翅膀:GPU 是如何加速深度学习模型的训练和推理过程的?

编者按:深度学习的飞速发展离不开硬件技术的突破,而 GPU 的崛起无疑是其中最大的推力之一。但你是否曾好奇过,为何一行简单的“.to(‘cuda’)”代码就能让模型的训练速度突飞猛进?本文正是为解答这个疑问而作。 作者以独特的视角&…

数仓架构解析(第45天)

系列文章目录 经典数仓架构传统离线大数据架构 文章目录 系列文章目录烂橙子-终生成长群群主前言1. 经典数仓架构2. 传统离线大数据架构 烂橙子-终生成长群群主 前言 经典数仓架构 传统离线大数据架构 背景解析 1. 经典数仓架构 1991年,比尔恩门(Bill…

Python 中 Caffe 库的使用方法

Caffe 是一个由伯克利视觉与学习中心 (Berkeley Vision and Learning Center, BVLC) 开发的深度学习框架。它特别适用于图像分类和图像分割任务。以下是一个关于如何使用 Caffe 库的详细指南,包括安装、配置、构建和训练模型的步骤。 1. 安装 Caffe 安装 Caffe 可以…

Pinokio:一键安装开源 AI 应用

整合了几乎所有市面上开源的 AI 工具傻瓜式地一键安装AI 工具支持全平台:Windows、Mac、Linux官网:https://pinokio.computer项目仓库:GitHub - pinokiocomputer/pinokio: AI Browser文章地址:https://blog.i68.ltd/archives/Pino…

牛客算法题解:数字统计、两个数组的交集、点击消除

目录 BC153 [NOIP2010]数字统计 ▐ 题解 NC313 两个数组的交集 ▐ 题解 AB5 点击消除 ▐ 题解 BC153 [NOIP2010]数字统计 题目描述: 题目链接: [NOIP2010]数字统计_牛客题霸_牛客网 (nowcoder.com) ▐ 题解 题目要求统计出某段数组中一共有多少个…

关于Buffer和Channel的注意事项和细节

1.举例 package org.example.demo;import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.util.RandomAccess;/*** MappedByteBuffer可…

Linux入门级常用命令行(二)

目录 1、mv指令 2、rm指令 3、通配符* 4、chmod指令 5、tar指令 1、mv指令 功能 用于移动或重命名文件和目录的命令 基本用法 mv [选项] 源文件或目录 目标文件或目录 常用选项 -i:在覆盖文件之前提示用户确认。-f:强制移动或重命名&#xff0…

动量参数(Momentum Parameter)

动量参数(Momentum Parameter)在机器学习中指的是一种用于加速梯度下降算法的技术,特别是深度学习中优化神经网络权重时。简单来说,动量参数是一种帮助优化过程加速并减少震荡的技术。 具体来说,动量参数具有以下特点…

网络编程——wireshark抓包、tcp粘包

目录 一、前言 1.1 什么是粘包 1.2 为什么UDP不会粘包 二、编写程序 文件树 客户端程序 服务器程序 tcp程序 头文件 makefile 三、 实验现象 四、改进实验 五、小作业 一、前言 最近在做网络芯片的驱动,验证功能的时候需要借助wireshark这个工具&…

猫头虎分享:Numpy知识点一文带你详细学习np.random.randn()

🐯 猫头虎分享:Numpy知识点一文带你详细学习np.random.randn() 摘要 Numpy 是数据科学和机器学习领域中不可或缺的工具。在本篇文章中,我们将深入探讨 np.random.randn(),一个用于生成标准正态分布的强大函数。通过详细的代码示…

Android Studio 一键删除 Recent Projects信息的方法

Android Studio打开项目多了就一堆最近项目的记录,在IDE里面只能一个个手动删除。 File - Recent Projects 解决方案:修改配置文件 Note:方法不唯一。 Android Studio 存储了一个包含最近打开项目信息的配置文件。通过手动编辑或删除recentP…

会员管理系统需求文档示例

1. 引言 目的: 本需求文档旨在明确会员管理系统的目标、功能和非功能性需求,以指导系统的设计、开发和测试过程。 背景: 随着公司业务的不断增长,我们需要一个高效、可靠的会员管理系统来帮助我们更好地管理客户关系、提高服务质…

科普文:kubernets原理

kubernetes 已经成为容器编排领域的王者,它是基于容器的集群编排引擎,具备扩展集群、滚动升级回滚、弹性伸缩、自动治愈、服务发现等多种特性能力。 本文将带着大家快速了解 kubernetes ,了解我们谈论 kubernetes 都是在谈论什么。 一、背…

详细介绍BIO、NIO、IO多路复用(select、poll、epoll)

BIO、NIO、IO多路复用 BIO(Blocking IO)NIO(Non-blocking IO) 同步非阻塞IOIO多路复用selectpollepoll Redis的IO多路复用 BIO(Blocking IO) 最基础的IO模型,当进行IO操作时,线程会被阻塞,直到操作完成。 比如read和write,通常IO…