CQS 队列溢出用户提供的出口例程
在溢出队列选择处理期间调用 "队列溢出" 出口例程以核准或否决溢出处理的队列名称。
此出口例程是可选的。
在溢出处理期间,将调用 "队列溢出" 出口例程以验证由 CQS 选择的队列名称是否适合溢出处理。 当 CQS 确定结构已达到其溢出阈值时,溢出阈值处理将开始。 然后, CQS 确定哪些队列在结构中使用最多的存储器。 在结构中使用最多存储器的队列将成为溢出的候选者,并移至溢出结构。 或者,如果未定义溢出结构,那么使用该结构中最多存储器的队列不再允许队列的 CQSPUT 请求。
在队列选择处理期间,将对每个所选队列名称调用一次 "队列溢出" 出口例程,以核准或否决用于溢出处理的队列名称。 如果出口例程核准移动或未指定出口例程,那么会将该队列的所有数据对象 (例如该目标的 IMS 消息) 移至溢出结构。 该队列名称的所有其他处理都在溢出结构中完成 (如果存在溢出结构)。 如果不存在溢出结构,那么将拒绝对队列的 CQSPUT 请求。 如果移动已被否决,那么将从溢出候选列表中除去队列名称,并选择另一个队列名称。
"队列溢出" 出口例程在 BPE 用户出口 PROCLIB 成员的 EXITDEF 语句中定义为 TYPE=OVERFLOW。 可以指定此类型的一个或多个用户出口例程。 调用此出口例程时,将按照 EXITS= 关键字指定的顺序来驱动所有此类例程。
因为可能存在多个溢出出口例程,所以调用的最后一个出口例程是确定是否为溢出选择队列名称的出口例程。 如果出口例程接受队列名称作为对溢出处理有效的队列名称或不识别该名称,那么出口例程必须将 R15 设置为 0 并指定应调用列表中的下一个出口。 这允许下一个出口例程有机会否决名称选择。 如果出口例程确定队列名称不适合作为溢出处理的候选者,那么出口例程必须将 R15 设置为 4 ,并指定不再调用任何出口例程。
在标准 BPE 用户出口参数列表中是 UXPL_CALLNEXTP 字段,该字段是一个指向存储器字节的指针,该字节由出口例程设置,用于指示是否要调用列表中的下一个出口例程。 当存储器的字节设置为 UXPL_CALLNEXTYES 时,将调用下一个出口 (如果存在)。 当存储器的字节设置为 UXPL_CALLNEXTNO 时,不再为此队列名称调用任何出口。
如果 "队列溢出" 出口例程确定队列名称不是溢出的候选者,那么出口例程可以将字段 UXPL_CALLNEXTP 所指向的字节设置为 UXPL_CALLNEXTNO (X'04 ') 的值,以便不会对队列名称调用其他出口例程。
条目上的寄存器的内容
- 注册
- 目录
- 1
- 标准 BPE 用户出口参数列表的地址。 UXPL_EXITPLP 字段所指向的特定于出口例程的参数列表由宏 CQSQOFLX 映射。
- 13
- 两个预先链接的保存区域的地址。 第一个保存区域可由出口例程用于在进入时保存寄存器。 第二个保存区域可由从用户出口例程调用的例程使用。
- 14 日
- 返回地址。
- 15 日
- 出口例程的入口点。
出口上寄存器的内容
- 注册
- 目录
- 15 日
- 返回码
- 0
- 允许将队列移至溢出结构。
- 4
- 请勿将队列移至溢出结构; 请选择另一个候选项。
注意: 除非出口例程是针对队列名称调用的最后一个溢出用户出口,否则将忽略此返回码。
当以下任一情况为 true 时,会将出口例程视为最后一个调用的例程:
- 出口例程是在溢出队列的出口列表中定义的最后一个例程。
- 出口例程将 UXPL_CALLNEXTP 指向的字节设置为值 UXPL_CALLNEXTNO。
必须恢复所有其他寄存器。
CQS 队列溢出参数列表
在进入 "队列溢出" 出口例程时, R1 指向标准 BPE 用户出口参数列表。 此列表中的字段 UXPL_EXITPLP 包含 CQS 队列溢出用户出口例程参数列表 (由 CQSQOFLX 宏映射) 的地址。 下表详细描述了这些参数。
| 字段名称 | 偏移量 | Length | 字段使用情况 | 描述 |
|---|---|---|---|---|
| QOXPVSN | X'00' | X'04' | 输入 | 参数列表版本号 (X'00000001 ')。 |
| Qoxfunc | X'04' | X'04' | 输入 | 功能代码
|
| QOXQOFL1 | X'08' | X'01' | 输入 | 指示这是否是此溢出阈值进程的第一个溢出出口调用的标志字节。 对于每次出现的溢出阈值处理,将对每个选定队列名称调用一次出口例程。 对于出现溢出阈值处理的第一个队列名称,将开启此位。
|
| 不适用 | X'09' | X'03' | 无 | 已保留。 |
| QOXCQSID | X'0C' | X'08' | 输入 | CQS 标识。 |
| QOXCQSVN | X'14' | X'04' | 输入 | CQS 版本号。 |
| QOXSTRNM | X'18' | X'10' | 输入 | 结构名称。 |
| QOXQNAME | X'28' | X'10' | 输入 | 为溢出处理选择的队列名称。 |
| QOXDOBJN | X'38' | X'04' | 输入 | 所选队列名称上的数据对象数。 |