应用程序上下文

应用程序上下文是一组数据,用于标识在应用程序和平台的上下文中运行的任务。 CICS® 在输入应用程序时向每个任务添加应用程序上下文。 您可以使用该信息来衡量应用程序(或到应用程序的特定路由)所消耗的资源,以使用基于策略的应用程序管理和将任务与特定应用程序相关联,从而帮助进行问题诊断。

任务可以在执行时通过一个或多个应用程序。 每个任务在任何时候最多可以有两个与其关联的应用程序上下文:
  • 任务的 初始 应用程序上下文用于监视和测量应用程序或特定应用程序操作在 CICS 区域和多个任务中使用的资源量。 将策略应用于属于应用程序的任务时,可以使用初始应用程序上下文来定义用于管理任务行为的阈值条件。 可以从调用任务继承初始应用程序上下文,也可以在任务首次通过应用程序入口点时设置初始应用程序上下文。
  • 任务的 当前 应用程序上下文用于装入专用库和 WLM 用户出口。 可以使用 XPI , SPI 和 API 调用来查询当前应用程序上下文。 每次任务通过应用程序入口点时,当前应用程序上下文都会更改。
初始或当前应用程序上下文可与 CICS Explorer® 中的事务跟踪功能配合使用,以快速识别和诊断与应用程序相关的问题。 初始和当前应用程序上下文都将从任务传播到任务。

要创建应用程序上下文,必须将 CICS 资源声明为部署在平台上的应用程序的应用程序入口点。 PROGRAM 和 URIMAP 资源可声明为应用程序入口点。 必须使用 EXEC CICS LINK 命令来调用 PROGRAM 入口点。 有关应用程序入口点的更多信息,请参阅 应用程序入口点

注: 不支持使用 EXEC CICS XCTL 命令或 COBOL 调用 (无论是静态还是动态) 来创建应用程序上下文。

当没有应用程序上下文的任务调用声明为应用程序入口点的资源时, CICS 会创建一个应用程序上下文,该应用程序上下文将成为与该任务关联的初始应用程序上下文。 此应用程序上下文还与任务调用的任何后续程序及其启动的任务相关联。 如果任务已具有应用程序上下文,那么新的应用程序上下文将成为该任务的当前应用程序上下文。 任务的初始应用程序上下文继续用于策略的监视和作用域限定。

应用程序上下文包含以下数据:
  • 应用程序名称
  • 应用程序的主要版本号
  • 应用程序的次版本号
  • 应用程序的微版本号
  • 部署应用程序的平台的平台名称
  • 应用程序入口点的操作名称

您可以使用 EXEC CICS INQUIRE 系统编程命令指定用于浏览专用资源的应用程序上下文。 缺省情况下, CICS 将搜索可用于发出 EXEC CICS INQUIRE 命令的程序的专用资源和公共资源。 您可以指定其他应用程序上下文以浏览可用于其他应用程序的专用资源和公共资源。 当您使用应用程序上下文来浏览应用程序所使用的资源时,不指定操作名称。

应用程序上下文数据在 DFHDYPDS 参数列表和 EYURWCOM 参数列表中传递,并且可以在定制动态路由算法中使用。 有关动态路由选择的更多信息,请参阅 使用 CICSPlex SM 进行动态路由选择

不支持应用程序上下文传播的方案

缺省情况下,初始和当前应用程序上下文将从任务传播到任务。 但是,某些 CICS 命令,接口,连接类型和其他进程不支持在任务之间进行应用程序上下文传播。

以下场景不支持应用程序上下文传播:
  • 任务由指定 TERMID 选项的 START 命令连接。
  • 任务由 DTP 或 CPIC 请求连接。
  • 通过 APPC 连接连接连接任务。
  • 使用事务启动 EP 适配器连接任务。
  • 当 ThreadExecutor 服务创建新线程时, JVM 服务器将连接任务。
  • 通过 MRO 连接路由 Web Service 管道处理程序事务。
  • 使用 CICS Web Support 向 CICS 发出出站 HTTP 请求。
  • 使用 URIMAP 资源作为 Liberty 的应用程序入口点来创建任务,该应用程序入口点调用 CICSExecutorService 以在 Java™ 程序中启动线程。

查看当前应用程序上下文

要查看当前应用程序上下文,您可以:
  • 使用 " CICS Explorer 任务关联" 视图。
  • 使用 EXEC CICS INQUIRE ASSOCIATION 命令。
  • 使用 EXEC CICS ASSIGN 命令。
  • 使用监视 XPI 函数 INQUIRE_APP_CONTEXT 从全局用户出口中查询当前应用程序上下文。
  • 使用 JCICS Task.getApplicationContext() 方法查询当前应用程序上下文。

在任务上设置应用程序上下文时的条件

当 PROGRAM 资源定义为应用程序入口点时,当发生以下任何情况时,会将应用程序上下文设置到任务上:
  • CICS 事务,用于指定 PROGRAM 资源运行的名称 (在指定资源运行之前设置上下文)。
  • 程序向 PROGRAM 资源发出 EXEC CICS LINK 命令。
  • 程序发出 EXEC CICS INVOKE APPLICATION 命令来命名等同于 PROGRAM 资源的操作。
  • 程序向 PROGRAM 资源发出 EXEC CICS RUN TRANSID 命令。
  • Java 程序向 PROGRAM 资源发出 Program.link() 命令。
  • Java 程序发出 Application.invoke() 命令来命名等同于 PROGRAM 资源的操作。
当将 TRANSACTION 资源定义为应用程序入口点时,当发生以下任何情况时,会将应用程序上下文设置到任务上:
  • TRANSACTION 资源运行 (上下文在指定资源运行之前设置)。
  • 程序针对 TRANSACTION 资源发出 EXEC CICS START 命令。
将 URIMAP 资源定义为应用程序入口点时,会将应用程序上下文设置到任务上,如下所示:
  • 如果 HTTP/HTTPS 请求 URL 将 URIMAP 资源与 USAGE (JVMSERVER) 匹配,那么将在运行 URIMAP 资源中指定的 CICS 事务的任务上设置应用程序上下文。
  • 如果 HTTP/HTTPS 请求 URL 与具有 USAGE (SERVER) 的 URIMAP 资源匹配,并且要提供静态响应,那么将在 CWXN 任务上设置应用程序上下文。 通过指定 HFSFILE 或 TEMPLATENAME 值提供静态响应。
  • 如果 HTTP/HTTPS 请求 URL 与具有 USAGE (SERVER) 的 URIMAP 资源匹配,并且不提供静态响应,那么将在 CWXN 任务上设置应用程序上下文,并且此应用程序上下文还将传播到运行 URIMAP 资源中指定的 CICS 事务的任务。 对于有资格直接连接事务的请求,将在 URIMAP 资源上指定的 CICS 事务上设置应用程序上下文。 有关更多信息,请参阅 使用直接连接的用户事务处理 HTTP 请求。 缺省别名事务是 CWBA 事务。
  • 如果 HTTP/HTTPS 请求 URL 与具有 USAGE (PIPELINE) 的 URIMAP 资源匹配,那么将在 CWXN 任务上设置应用程序上下文,并将其传播到运行 URIMAP 资源中指定的 CICS 事务的任务。 对于有资格直接连接事务的请求,将在 URIMAP 资源上指定的 CICS 事务上设置应用程序上下文。 有关更多信息,请参阅 使用直接连接的用户事务处理 HTTP 请求。 缺省事务是 CPIH 事务。
表 1. 当事务及其初始程序都定义为入口点 (EP) 时,任务的应用程序上下文数据 (ACD) 设置。
事务定义为应用程序 EP 初始程序定义为应用程序 EP 初始程序为公用或专用 任务的初始 ACD 任务的当前 ACD
不适用 由事务 EP 设置 由程序 EP 设置
False 公共 由事务 EP 设置
False 专用 由事务 EP 设置 与初始 ACD 相同
False 不适用 由程序 EP 设置 与初始 ACD 相同
False False 不适用 未设置 未设置
表 2。 当 urimap 及其别名事务都定义为入口点 (EP) 时,任务的应用程序上下文数据 (ACD) 设置。
Urimap 定义为应用程序 EP 别名事务定义为应用程序 EP 初始程序为公用或专用 任务的初始 ACD 任务的当前 ACD
公共 由事务 EP 设置
专用 由事务 EP 设置 与初始 ACD 相同
False 公共 由 urimap EP 设置
False 专用 由 urimap EP 设置 与初始 ACD 相同
False 公共 由事务 EP 设置
False 专用 由事务 EP 设置 与初始 ACD 相同
False False 不适用 未设置 未设置
注: 不能将 urimap 的别名事务的初始程序设置为应用程序入口点,因为其初始程序启动 DFH ,不能将其定义为入口点。 因此,此表中的所有程序都未定义为入口点。
表 3。 通过 EXEC CICS START 或 EXEC CICS RUN TRANSID 连接事务时,任务的应用程序上下文数据 (ACD) 设置。
已启动事务定义为应用程序 EP 已启动事务的初始程序定义为应用程序 EP 初始程序为公用或专用 正在启动的任务已设置 ACD 任务的初始 ACD 任务的当前 ACD
不适用 不适用 由事务 EP 设置 由程序 EP 设置
False 公共 不适用 由事务 EP 设置
False 专用 不适用 由事务 EP 设置 与初始 ACD 相同
False 不适用 不适用 由程序 EP 设置 与初始 ACD 相同
False False 不适用 从启动任务继承 ACD
False False 不适用 不适用 未设置 未设置
表 4。 当事务定义为 DYNAMIC 时,任务的应用程序上下文数据 (ACD) 设置。
事务定义为应用程序 EP 正在启动的任务已设置 ACD ACD 已传递到路由程序 COMMAREA
事务的 EP
False 事务的 EP
False 启动任务的当前 ACD
False False 无 ACD

限制

  • 仅当应用程序在本地运行时,才会在定义为应用程序入口点的程序的任务上设置应用程序上下文。 如果该程序以远程方式运行,那么会将该请求传递到远程 CICS 区域,并且如果该资源也标记为该 CICS 区域上的应用程序入口点,那么该请求位于设置了上下文的远程 CICS 区域上。
  • 对于对另一个程序进行动态调用的 COBOL 程序或发出 FETCH 和 CALL 以调用另一个程序 (即,如果已绕过 EXEC CICS LINK 调用) 的 PL/I 程序,任务上的应用程序上下文保持不变。