应用程序上下文

应用程序上下文是一组数据,用于标识在应用程序和平台的上下文中运行的任务。 通过应用程序入口点访问应用程序时, CICS® 区域会为与应用程序相关的任务生成应用程序上下文数据。 此任务应用程序上下文在 CICS 监视设施写入 SMF 的性能记录中可用,并包含有关平台,应用程序,应用程序版本和操作的数据字段。 您可以使用该信息来衡量应用程序(或到应用程序的特定路由)所消耗的资源,以使用基于策略的应用程序管理和将任务与特定应用程序相关联,从而帮助进行问题诊断。

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

创建应用程序上下文

要创建应用程序上下文,必须将 CICS 资源声明为部署在平台上的应用程序的应用程序入口点。 有关应用程序入口点的更多信息,请参阅 应用程序入口点

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

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

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

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

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

查看当前应用程序上下文

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

当应用程序上下文没有传播时

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

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

用于将应用程序上下文设置为任务的条件

PROGRAM 资源
当 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 资源的操作。
注:
  • 仅当应用程序在本地运行时,才会在定义为应用程序入口点的程序的任务上设置应用程序上下文。 如果该程序以远程方式运行,那么会将该请求传递到远程 CICS 区域,并且如果该资源也标记为该 CICS 区域上的应用程序入口点,那么该请求位于设置了上下文的远程 CICS 区域上。
  • 对于对另一个程序进行动态调用的 COBOL 程序或发出 FETCH 和 CALL 以调用另一个程序 (即,如果已绕过 EXEC CICS LINK 调用) 的 PL/I 程序,任务上的应用程序上下文保持不变。
TRANSACTION 资源
当将 TRANSACTION 资源定义为应用程序入口点时,当发生以下任何情况时,会将应用程序上下文设置到任务上:
  • TRANSACTION 资源运行 (上下文在指定资源运行之前设置)。
  • 程序针对 TRANSACTION 资源发出 EXEC CICS START 命令。
URIMAP 资源
将 URIMAP 资源定义为应用程序入口点时,会将应用程序上下文设置到任务上,如下所示:
  • 如果 HTTP / HTTPS 请求 URL 与具有 USAGE(JVMSERVER) 的 URIMAP 资源匹配,则会在运行 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) 设置。
事务定义为应用程序入口点 初始程序定义为应用程序入口点 初始程序为公用或专用 任务的初始 ACD 任务的当前 ACD
不适用 由事务入口点设置 由程序入口点设置
False 公共 由事务入口点设置
False 专用 由事务入口点设置 与初始 ACD 相同
False 不适用 由程序入口点设置 与初始 ACD 相同
False False 不适用 未设置 未设置
表 2。 当 URIMAP 及其别名事务都定义为入口点 (EP) 时,任务的应用程序上下文数据 (ACD) 设置。
URIMAP 定义为应用程序入口点 别名事务定义为应用程序入口点 初始程序为公用或专用 任务的初始 ACD 任务的当前 ACD
公共 由事务入口点设置
专用 由事务入口点设置 与初始 ACD 相同
False 公共 由 URIMAP 入口点设置
False 专用 由 URIMAP 入口点设置 与初始 ACD 相同
False 公共 由 TRANSACTION 入口点设置
False 专用 由 TRANSACTION 入口点设置 与初始 ACD 相同
False False 不适用 未设置 未设置
注: 不能将 URIMAP 的别名事务的初始程序设置为应用程序入口点,因为其初始程序以 DFH 开头,不能将 DFH 定义为入口点。 因此, 表 2 中的所有程序都未定义为入口点。
表 3。 通过 EXEC CICS START 或 EXEC CICS RUN TRANSID 连接事务时,任务的应用程序上下文数据 (ACD) 设置。
已启动的事务定义为应用程序入口点 已启动事务的初始程序定义为应用程序入口点 初始程序为公用或专用 正在启动的任务已设置 ACD 任务的初始 ACD 任务的当前 ACD
不适用 不适用 由 TRANSACTION 入口点设置 由 PROGRAM 入口点设置
False 公共 不适用 由 TRANSACTION 入口点设置
False 专用 不适用 由 TRANSACTION 入口点设置 与初始 ACD 相同
False 不适用 不适用 由 PROGRAM 入口点设置 与初始 ACD 相同
False False 不适用 从启动任务继承 ACD
False False 不适用 不适用 未设置 未设置
表 4。 当事务定义为 DYNAMIC 时,任务的应用程序上下文数据 (ACD) 设置。
事务定义为 APPLICATION 入口点 正在启动的任务已设置 ACD ACD 已传递到路由程序 COMMAREA
事务的入口点
False 事务的入口点
False 启动任务的当前 ACD
False False 无 ACD