在开放式 TCB 上运行的与任务相关的用户出口 (TRUE) 的义务
如果 TRUE 在开放式 TCB 上运行,那么将从 QR TCB 施加的约束中释放该 TRUE ,并且无需创建和管理其自己的子任务 TCB 集。 如果由外部资源管理器发出的操作系统等待会停止开放式 TCB ,那么 CICS® 将继续在 QR TCB 和其他开放式 TCB 上进行处理。 但是,在开放式 TCB 上运行的 TRUE 对整个 CICS 系统以及它正在使用的开放式 TCB 的未来用户都有义务。
在 L8 开放式 TCB 上运行的 TRUE 的义务
L8 TCB 专用于分配给它的 CICS 任务,但当 CICS 任务完成时, L8 TCB 将返回到分派器管理的 L8 方式 TCB 池,前提是它仍处于干净状态。 此上下文中的不干净 TCB 意味着使用 L8 方式 TCB 的任务在 TRUE 中迂到未处理的异常终止,而不是 TRUE 已违反 CICS 不会检测到的 线程安全限制。
L8 TCB 并非专用于供特定 TRUE 使用,而是由 CICS 任务调用且需要 L8 TCB 的所有 TRUE 使用。 L8 TCB 也由任务执行的线程安全应用程序代码使用。
在 T8 和 X8 开放式 TCB 上运行的 TRUE 的责任
对于 XPLINK 程序和在 OSGi JVM 中运行的 Java 程序, X8 和 T8 TCB 分别专用于该链接级别的 CICS 任务。 当控制返回到更高的链接级别时,将释放 TCB 并可供另一个 CICS 任务使用。
对于在 Liberty JVM 中运行的 Java 程序, T8 TCB 专用于由 CICS 任务以与 L8 TCB 相同的方式在该任务的生存期内使用。 如果 T8 TCB 保持清洁,那么后续任务可以使用这些 TCB。 而调用任务执行的应用程序代码在与 TRUE 相同的 TCB 上运行。
线程安全限制
在开放式 TCB 上运行的 TRUE 不得以导致以下问题的方式处理正在执行的开放式 TCB 环境:
- 在同一任务调用的开放式 TCB 上运行的其他 TRUE
- 同一任务调用的 OPENAPI 程序
- 可以在开放式 TCB 上运行的应用程序逻辑
- 可能使用开放式 TCB 的未来任务
- CICS 管理代码
尤其是以下各方面:
- 在调用 CICS 服务时,或者在返回到 CICS时,在开放式 TCB 上运行的 TRUE 必须确保将 z/OS® 编程环境复原为进入 TRUE 时的环境。 这包括跨内存方式, ASC 方式,请求块 (RB) 级别,链接堆栈级别, TCB 分派优先级以及取消添加的任何 ESTAE。
- 在 CICS 任务终止时,在开放式 TCB 上运行的 TRUE 必须确保使开放式 TCB 处于适合由另一个 CICS 事务复用的状态。 特别是,它必须确保释放专门为终止任务获取的所有非CICS 资源。 这些资源可能包括:
- 动态分配的数据集
- 开放式 ACB 或 DCB
- STIMERM 请求数
- z/OS管理的存储器
- ENQ 请求数
- 附加的子任务
- 已装入模块
- 拥有的数据空间
- 已添加访问列表条目
- 名称/令牌对
- 固定页面
- 安全设置 (TCBSENV 必须设置为零)
- 在开放式 TCB 上运行的 TRUE 不得使用将影响整体 CICS 操作的以下 z/OS 系统服务:
- CHKPT
- ESPIE
- QEDIT
- SPIE
- STIMER
- TTIMER
- XCTL/XCTLX
- 任何 TSO/E 服务
- 在开放 TCB 上运行的 TRUE 不得在 L8 模式 TCB 下调用正在使用 z/OS Language Environment 服务的 Language Environment® 程序,因为 L8 模式 TCB 是使用 CICS 服务为 Language Environment 初始化的。