当前位置: 首页 > news >正文

第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项

文章目录

  • 第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项
  • 设计注意事项

第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项

IRIS 可以在特定事件发生时执行自定义代码。需要两个步骤:

  1. 定义 ^%ZSTART 例程、^%ZSTOP 例程或两者。

    注意:^%ZSTART^%ZSTOP 不包含在 IRIS 中,必须由用户创建。

    在这些例程中,可以定义子例程以在特定活动开始或停止时执行。

    ^%ZSTART^%ZSTOP 必须在 %SYS 命名空间中创建和定义,尽管它们可以映射到非默认数据库。

  2. 使用管理门户配置 IRIS 以调用所需的子程序。

具体来说,如果定义例程 ^%ZSTART^%ZSTOP 并包含具有特定名称的子例程,系统会在活动开始或结束时自动调用这些子例程。子程序名称如下:

  • SYSTEM — 当 IRIS 作为系统启动或停止时执行
  • LOGIN — 当用户使用 %Service_ConsoleService_Telnet 服务执行登录或注销时执行。
  • JOB - 在 JOB 开始或结束时执行
  • CALLIN:— 在外部程序开始或完成 CALLIN 时执行

例如,当用户登录时,系统会自动调用 LOGIN^%ZSTART(如果已定义)并且已使用管理门户启用此子例程。

这些子例程并非旨在进行复杂的计算或长时间运行。长时间的计算或潜在的长时间操作(如网络访问)将延迟活动的完成,直到被调用的例程返回。在这种情况下,用户可能需要很长时间才能登录,或者 JOB 吞吐量可能会因为启动时间太长而减少。

注意:这些子程序作为正常 IRIS 操作的一部分被调用。这意味着异常终止 IRIS 的外部事件(例如电源故障)不会生成对 ^%ZSTOP 的调用。

注意:如果系统实现了 ^%ZSTOP,并且应用程序实现了一个或多个 $HALT 例程,则直到最后一个 $HALTHALT 命令终止时才执行 ^%ZSTOP 代码。 $HALT 例程未能发出其自己的 HALT 命令可能会阻止 ^%ZSTOP 代码运行。

设计注意事项

因为 ^%ZSTART^%ZSTOP 在某种程度上受限的环境中运行,设计者必须记住几件事,即:

  • 例程必须用 ObjectScript 编写。
  • 由于 ^%ZSTART 本质上就像使用无参数的新命令启动一样运行,因此它不能用于执行诸如为用户初始化局部变量之类的任务。
  • 当调用任何例程入口点时,没有值作为参数传递。如果不同的算法适用于各种情况,被调用的入口点必须通过检查例程外部的数据来确定要做什么:全局变量、系统变量等。
  • 确保例程在所有可能的条件下都表现良好。它们应该是防御性的。也就是说,他们应该检查以确保完成任务所需的所有资源都在手边,如果可能的话,在计算开始之前为他们预留这些资源。出现的错误被报告为系统功能的故障,因此从错误控制和处理的角度考虑设计是很重要的。在资源丢失或出现错误的情况下,未能正确考虑恢复会产生各种后果:系统间IRIS可能无法启动;Studio等主要功能可能行为怪异;或者可能发生更微妙和隐蔽的后果,而这些后果没有被立即发现。强烈建议在模拟条件下仔细编写和调试这些例程,然后在投入生产系统之前在模拟环境条件下进行测试。
  • 不应该假设在以前的调用或不同的入口点中发现的条件仍然有效。例如,在对JOB^%ZSTART的连续调用之间,前一个调用使用的文件可能已经在这个调用发生之前被删除了。
  • 每个入口点都应该有效地执行其任务。如果任务的一部分可能需要长时间运行,建议将足够的信息排队以完成任务,供应用程序的另一部分稍后完成。
  • 如果一个入口点希望持久地保存数据,比如出于统计的目的,它必须使用像全局或外部文件这样的东西来保存数据。
  • 例程应该对它们所运行的环境做最少的假设。例如,这些例程的开发人员不能假设程序总是在特定的作业号下执行。设计人员不能假定将以特定顺序调用各个入口点。提出实现 IRIS的多个过程的顺序很少是确定的。
  • 该例程不能假设它在系统启动期间的特定时间点被调用。启动过程中的事件顺序可能会因发布而异,甚至会因重启而改变。
  • 除了少数例外,例程必须让事情保持原样。作为这一原则的一个例证,在子例程中重新赋值$IO而不在进入和退出时保存和恢复它几乎是错误的来源。调用例程无法知道这些内容是否已更改,调用方很难防御执行环境的任何可能更改。因此,不干扰系统处理上下文的负担在于被调用的子例程。
  • 无更改规则的一般例外是允许更改特定于应用程序或安装的进程本地值。例如,SYSTEM^%ZSTART入口点可以设置系统范围的默认值。同样,对于应用程序测试,它可以将日期设置为特定值,以验证月末处理。
  • ^%ZSTOP不能包含对远程数据库中全局变量的引用。在调用它的时候,其中一些可能不再可以访问。
  • 一旦在关闭过程中调用 SYSTEM^%ZSTOP,用户将无法再使用 JOB 命令启动新进程。允许现有流程完成。
  • 如果这些例程映射到与 IRISSYS 不同的数据库,则 IRIS 将尝试从该数据库而不是 IRISSYS 执行它们。当然, IRIS 会事先确保调用例程具有对该数据库的适当访问权限。管理员有责任确保例程可以访问它从该命名空间所需的任何应用程序全局变量和映射。
  • SYSTEM^%ZSTARTSYSTEM^%ZSTOP$USERNAME 设置为 %SYSTEM$ROLES 设置为 %All 的情况下运行。要使用不同的用户名运行代码,请使用 $SYSTEM.Security.Login() 设置所需的名称,然后继续您的自定义代码。如果在 SYSTEM^%ZSTART 代码中使用 JOB 来启动任何其他进程,这些进程将继承与启动进程相同的用户名(和角色)。

注意:^%ZSTART^%ZSTOP 中的所有入口点都在系统操作的关键点调用,并且可能对系统操作甚至系统数据产生广泛影响。这些例程的特定用途使得这种高级特权成为必要。因此,必须确保这些入口点可以调用的所有代码都已经过全面测试。此外,不允许通过 XECUTE 或间接运行任何用户指定的代码。

  • 退出(即停止)进程可能会在任何需要分布式缓存集群数据服务器回答的引用上收到 <FUNCTION>错误。

注意:在升级时, IRIS 仅保留映射到 IRISSYS 数据库的 %Z* 例程,如果 .INT.MAC 代码可用,则重新编译它们。在其他数据库中保存例程是站点管理员的责任。

相关文章:

第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项

文章目录第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项设计注意事项第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项 IRIS 可以在特定事件发生时执行自定义代码。需要两个步骤&#xff1a; 定义 ^%ZSTART 例程、^%ZSTO…...

工作实战之拦截器模式

目录 前言 一、结构中包含的角色 二、拦截器使用 1.拦截器角色 a.自定义拦截器UserValidateInterceptor&#xff0c;UserUpdateInterceptor&#xff0c;UserEditNameInterceptor b.拦截器配置者UserInterceptorChainConfigure&#xff0c;任意组装拦截器顺序 c.拦截器管理者…...

某美颜app sig参数分析

之前转载过该app的文章&#xff0c;今天翻版重新整理下&#xff0c;版本号:576O5Zu56eA56eAYXBwIHY5MDgw (base64 解码)。 上来先抓个包&#xff1a; jadx搜索关键词 "sigTime"&#xff0c;然后定位到这里 看这行代码 cVar.addForm(INoCaptchaComponent.sig, genera…...

Linux - Linux系统优化思路

文章目录影响Linux性能的因素CPU内存磁盘I/O性能网络宽带操作系统相关资源系统安装优化内核参数优化文件系统优化应用程序软件资源系统性能分析工具vmstat命令iostat命令sar命令系统性能分析标准小结影响Linux性能的因素 CPU CPU是操作系统稳定运行的根本&#xff0c;CPU的速…...

2.Elasticsearch入门

2.Elasticsearch入门[toc]1.Elasticsearch简介Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索&#xff0c;稳定&#xff0c;可靠&#xff0c;快速&#xff0c;安装使用方便。客户端支持Java、.NET&#xff08;C#&#xff09;、PHP、Pyth…...

RK3399平台开发系列讲解(应用开发篇)断言的使用

🚀返回专栏总目录 文章目录 一、什么是断言二、静态断言三、运行时断言沉淀、分享、成长,让自己和他人都能有所收获!😄 📢断言为我们提供了一种可以静态或动态地检查程序在目标平台上整体状态的能力,与它相关的接口由头文件 assert.h 提供。 一、什么是断言 在编程中…...

云原生系列之使用prometheus监控nginx

前言 大家好&#xff0c;又见面了&#xff0c;我是沐风晓月&#xff0c;本文主要讲解云原生系列之使用prometheus监控nginx 文章收录到 csdn 我是沐风晓月的博客【prometheus监控系列】专栏&#xff0c;此专栏是沐风晓月对云原生prometheus的的总结&#xff0c;希望能够加深自…...

第六届省赛——8移动距离(总结规律)

题目&#xff1a;X星球居民小区的楼房全是一样的&#xff0c;并且按矩阵样式排列。其楼房的编号为1,2,3...当排满一行时&#xff0c;从下一行相邻的楼往反方向排号。比如&#xff1a;当小区排号宽度为6时&#xff0c;开始情形如下&#xff1a;1 2 3 4 5 612 11 10 9 8 713 14 1…...

C++vector 简单实现

一。概述 vector是我们经常用的一个容器&#xff0c;其本质是一个线性数组。通过对动态内存的管理&#xff0c;增删改查数据&#xff0c;达到方便使用的目的。 作为一个线性表&#xff0c;控制元素个数&#xff0c;容量&#xff0c;开始位置的指针分别是&#xff1a; start …...

通用缓存存储设计实践

目录介绍 01.整体概述说明 1.1 项目背景介绍1.2 遇到问题记录1.3 基础概念介绍1.4 设计目标1.5 产生收益分析 02.市面存储方案 2.1 缓存存储有哪些2.2 缓存策略有哪些2.3 常见存储方案2.4 市面存储方案说明2.5 存储方案的不足 03.存储方案原理 3.1 Sp存储原理分析3.2 MMKV存储…...

sheng的学习笔记Eureka Ribbon

Eureka-注册中心Eureka简介官方网址&#xff1a;https://spring.io/projects/spring-cloud-netflixEureka介绍Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper)。Zooleeper nacos.Eureka 采用了 C-S 的设计架构。Eureka Server 作为服…...

零代码工具我推荐Oracle APEX

云原生时代零代码工具我推荐Oracle APEX 国内的低码开发平台我也看了很多&#xff0c;感觉还是不太适合我这个被WEB抛弃的老炮。自从看了Oracle APEX就不打算看其它的了。太强大了&#xff0c;WEB服务器都省了&#xff0c;直接数据库到WEB页面。功能很强大&#xff0c;震撼到我…...

InstructGPT方法简读

InstructGPT方法简读 引言 仅仅通过增大模型规模和数据规模来训练更大的模型并不能使得大模型更好地理解用户意图。由于数据的噪声极大&#xff0c;并且现在的大多数大型语言模型均为基于深度学习的“黑箱模型”&#xff0c;几乎不具有可解释性和可控性&#xff0c;因此&…...

SpringCloud-5_模块集群化

避免一台Server挂掉&#xff0c;影响整个服务&#xff0c;搭建server集群创建e-commerce-eureka-server-9002微服务模块【作为注册中心】创建步骤参考e-commerce-eureka-server-9001修改pom.xml,加入依赖同9001创建resources/application.yml9002的ymlserver: # 修改端口号por…...

AQS底层源码深度剖析-BlockingQueue

目录 AQS底层源码深度剖析-BlockingQueue BlockingQueue定义 队列类型 队列数据结构 ArrayBlockingQueue LinkedBlockingQueue DelayQueue BlockingQueue API 添加元素 检索(取出)元素 BlockingQueue应用队列总览图 AQS底层源码深度剖析-BlockingQueue【重点中的重…...

Kotlin协程:Flow的异常处理

示例代码如下&#xff1a;launch(Dispatchers.Main) {// 第一部分flow {emit(1)throw NullPointerException("e")}.catch {Log.d("liduo", "onCreate1: $it")}.collect {Log.d("liudo", "onCreate2: $it")}// 第二部分flow …...

qt下ffmpeg录制mp4经验分享,支持音视频(h264、h265,AAC,G711 aLaw, G711muLaw)

前言 MP4&#xff0c;是最常见的国际通用格式&#xff0c;在常见的播放软件中都可以使用和播放&#xff0c;磁盘空间占地小&#xff0c;画质一般清晰&#xff0c;它本身是支持h264、AAC的编码格式&#xff0c;对于其他编码的话&#xff0c;需要进行额外处理。本文提供了ffmpeg录…...

C#读取Excel解析入门-1仅围绕三个主要的为阵地,进行重点解析,就是最理性的应对上法所在

业务中也是同样的功能点实现。只是多扩展了很多代码&#xff0c;构成了项目的其他部分&#xff0c;枝干所在。但是有用的枝干&#xff0c;仅仅不超过三个主要的&#xff01;所以您仅仅围绕三个主要的为阵地&#xff0c;进行重点解析&#xff0c;就是最理性的应对上法所在了 str…...

一起Talk Android吧(第五百一十八回:在Android中使用MQTT通信五)

文章目录 知识回顾问题描述解决过程经验分享各位看官们大家好,这一回中咱们说的例子是" 在Android中使用MQTT通信五",本章回内容与前后章节内容无关联。闲话休提,言归正转,让我们一起Talk Android吧! 知识回顾 我们在前面章回中介绍了如何使用MQTT通信,包含它…...

100种思维模型之混沌与秩序思维模型-027

人类崇尚秩序与连续性&#xff0c;我们习惯于我们的日常世界&#xff0c;它以线性方式运作&#xff0c;没有不连续或突跳。 为此&#xff0c;我们学会了期望各种过程以连续方式运行&#xff0c;我们的内心为了让我们更有安全感&#xff0c;把很多事物的结果归于秩序&#xff0c…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...