[z/OS]

z/OS 上的 "队列属性" 样本

"队列属性" 样本是一个对话方式 CICS® 应用程序,用于演示 MQINQ 和 MQSET 调用的使用。

它显示如何查询队列的 InhibitPutInhibitGet 属性的值,以及如何对其进行更改,以便程序无法将消息放在队列上或从中获取消息。 在测试程序时,您可能想要以此方式锁定队列。

为防止意外干预您自己的队列,此样本仅在其名称的前 8 个字节中具有字符 CSQ4SAMP 的队列对象上适用。 但是,源代码包括用于说明如何移除此限制的注释。

源程序以 COBOL、汇编语言和 C 语言提供(见表 2 )。
样本的汇编语言版本使用可重新输入的代码。 为此,您将注意到该版本的样本中各 MQI 调用的代码包含 MF 关键字;例如:
CALL MQCONN,(NAME,HCONN,COMPCODE,REASON),MF=(E,PARMAREA),VL
(VL 关键字表示您可以使用 CICS 执行诊断设施 (CEDF) 提供的事务来调试程序。) 有关编写可重新输入程序的更多信息,请参阅 以 System/390 汇编语言编码
要启动应用程序,请启动 CICS 系统并使用以下 CICS 事务:
  • 对于 COBOL,MVC1
  • 对于汇编语言,MAC1
  • 对于 C,MCC1
您可以通过更改步骤 3中提到的 CSD 数据集来更改其中任何事务的名称。

样本的设计

在启动样本时,它显示具有以下各项的字段的屏幕图:
  • 队列的名称
  • 用户请求(有效操作为:inquire、allow 或 inhibit)
  • 队列的放置操作的当前状态
  • 队列的获取操作的当前状态
前两个字段用于用户输入。 最后两个字段由应用程序填充:它们显示字 INHIBITEDALLOWED

应用程序验证在前两个字段中输入的值。 它检查以字符 CSQ4SAMP 开头的队列名称以及是否在 Action 字段中输入了三个有效请求之一。 应用程序将所有输入都转换为大写,因此无法使用名称中包含小写字符的任何队列。

如果在 操作 字段中输入 inquire ,那么流经程序逻辑的流为:
  1. 使用带有 MQOO_INQUIRE 选项的 MQOPEN 调用打开队列
  2. 使用选择器 MQIA_INHIBIT_GET 和 MQIA_INHIBIT_PUT 调用 MQINQ
  3. 使用 MQCLOSE 调用关闭队列
  4. 分析 MQINQ 调用的 IntAttrs 参数中返回的属性,并且根据情况将字 INHIBITED 或 ALLOWED 移至相关屏幕字段
如果在 操作 字段中输入 inhibit ,那么流经程序逻辑的流为:
  1. 使用带有 MQOO_SET 选项的 MQOPEN 调用打开队列
  2. 使用选择器 MQIA_INHIBIT_GET 和 MQIA_INHIBIT_PUT 以及 IntAttrs 参数中的值 MQQA_GET_INHIBITED 和 MQQA_PUT_INHIBITED 调用 MQSET
  3. 使用 MQCLOSE 调用关闭队列
  4. 将字 INHIBITED 移至相关屏幕字段

如果在 操作 字段中输入 allow ,那么应用程序将执行与禁止请求类似的处理。 唯一差异在于屏幕上显示的属性和字的设置。

当应用程序打开队列时,它会将缺省连接句柄用于队列管理器。(CICS 在启动 CICS 系统时会与队列管理器建立连接。) 应用程序可以在此阶段捕获以下错误:
  • 应用程序未连接到队列管理器
  • 队列不存在
  • 用户未经授权访问队列
  • 应用程序未经授权打开队列
对于其他 MQI 错误,应用程序显示完成代码和原因码。