Language Environment 异常终止和条件处理

Language Environment ® 异常终止处理取决于 CICS® HANDLE ABEND 的使用。 当 CICS HANDLE ABEND 未处于活动状态时,可以使用用户编写的条件处理程序。 Language Environment 未涉及 CICS 定义的异常条件的处理,也未涉及辅助操作请求标识 (AID) 的检测。

异常终止处理

当 CICS 应用程序在 Language Environment 下运行时,调度任务异常终止时所执行的操作取决于 CICS HANDLE ABEND 是处于活动状态还是未处于活动状态:
  • 当 HANDLE ABEND 处于活动状态时,将执行 $TAG1 CICS $TAG2 HANDLE ABEND 中定义的操作。 语言环境条件处理不会获得对任何异常终止或程序中断的控制,并且将忽略由 CEEHDLR 建立的任何用户编写的条件处理程序。
  • 当 CICS HANDLE ABEND 未处于活动状态时,如果指定了运行时选项 TRAP (ON) ,那么 Language Environment 条件处理将获得对异常终止和程序中断的控制。 然后执行正常语言环境条件处理。 如果指定了 TRAP (OFF) ,那么不会发生错误处理,并且会继续异常终止。 有关正常 Language Environment 条件处理的详细信息,请参阅 z/OS Language Environment Programming Guide

用户编写的 Language Environment 条件处理程序

可以使用 Language Environment 运行时选项 USRHDLR 在最高级别注册用户编写的条件处理程序。 在较低级别,例如在子例程 CALL 之后,可以使用 CEEHDLR 服务来注册该级别的条件处理程序。 从较低级别返回时,将自动注销此较低级别的处理程序。 您可以使用 CEEHDLU 服务显式地将其注销。 有关堆栈级别的说明,以及 USRHDLR 运行时选项以及 CEEHDLR 和 CEEHDLU 服务的详细信息,请参阅 z/OS Language Environment Programming Guide

如果创建用户编写的 Language Environment 条件处理程序 (COBOL 除外) ,那么可以使用大多数 CICS 命令 (前提是使用 NOHANDLE , RESP 或 RESP2 选项对这些命令进行编码) ,以防止在执行条件处理程序期间产生更多条件。 您不能使用的唯一命令是以下命令,这些命令不得出现在条件处理程序或它调用的任何程序中:
  • ABEND
  • 句柄异常终止
  • HANDLE AID
  • HANDLE CONDITION
  • IGNORE CONDITION
  • POP HANDLE
  • PUSH HANDLE

除非使用 NOLINKAGE 转换程序选项,否则请勿使用 CICS 转换程序来转换您已使用 CEEHDLR 服务为例程注册的 COBOL 用户编写的条件处理程序。 这是因为 CICS 转换程序向 COBOL 程序的 PROCEDURE DIVISION 头添加了两个额外参数 :EXEC 接口块 (EIB) 和 COMMAREA。 这些参数与 Language Environment 传递的参数不匹配。 因此, COBOL 条件处理程序不能包含任何 CICS 命令。

但是,用户编写的条件处理程序可以调用子例程来执行 CICS 命令 (这可能是 COBOL 例程)。 如果需要将自变量传递到此子例程,请将两个虚自变量放在调用者中的前面。 在执行任何其他 CICS 命令之前,被调用的子例程必须发出 EXEC CICS ADDRESS EIB (DFHEIPTR)。

要使应用程序使用用户编写的 Language Environment 条件处理程序,该条件处理程序必须在运行时可用 (例如,通过使用 STEPLIB 并置或 LPA)。 在 CICS 区域的 CICS 系统定义数据集 (CSD) 中定义此类条件处理程序,而不是使用程序自动安装。 这包括用户编写的条件处理程序 CEEWUCHA 样本。

有关任何 Language Environment 条件处理例程的必需接口的完整详细信息,请参阅 z/OS Language Environment Programming Guide

CICS 条件和注意标识 (AID) 处理

语言环境条件处理不会改变使用 CICS HANDLE CONDITION 或 HANDLE AID 命令的应用程序的行为。 语言环境不参与 CICS定义的异常条件的处理,这些异常条件仅由 CICS 提出和处理。 同样, AID 检测是不受 Language Environment 影响的 CICS 功能。