工作方式: 新 Java 线程和任务的安全性

在 OSGi 或 Liberty JVM 服务器中运行的 Java 应用程序可以使用 Java 执行器服务异步启动启用了 CICS® 的新 Java 线程。 CICS 事务安全性可用于授权访问正在使用这些线程的新 CICS 任务。

有关在 CICS JVM 服务器中使用 Java 执行程序服务的选项的更多详细信息,请参阅 CICS 任务和线程管理

使用适当的 Java ExecutorService启动新的 CICS 任务时,会将调用 CICS 任务的任务用户标识和事务标识传播到新的 CICS 任务。 但是,可以使用 CICSTransactionRunnableCICSTransactionCallable 接口修改新任务的事务标识。 如果调用线程没有 CICS 任务,那么事务标识和任务用户标识将使用缺省值。

以下规则汇总了在 OSGi JVM 服务器或 Liberty JVM 服务器中启动的线程的此进程:
  1. 对于从 CICS 线程启动的线程,新的 CICS 任务将以来自父代的任务用户标识运行。 如果未指定新事务标识,那么将从调用 CICS 任务继承该标识。
  2. 对于 OSGi JVM 服务器中从非CICS 线程启动的线程,事务标识 CJSA 和缺省 CICS 用户标识将用于新线程。
  3. 对于 Liberty 服务器中从非CICS 线程启动的线程,将使用缺省未分类事务标识 (CJSU) 和缺省 CICS 用户标识。 可以使用 com.ibm.cics.jvmserver.unclassified.tranidcom.ibm.cics.jvmserver.unclassified.userid JVM 服务器属性来修改这些缺省值。 请参阅 JVM 系统属性 (JVM system properties)

在 Java 线程上运行的新启动的 CICS 任务的安全性

如果从启用了 CICS的 Java 线程启动新的 CICS 任务,那么将使用 CICS 事务安全性来确保调用任务的用户标识有权连接新事务。 如果延迟绑定生效,那么将在延迟绑定过程中执行此授权检查。

下图对此进行了概述:
图 1。 从支持 CICS的 Java 线程启动的新 CICS 任务的安全性
此图显示从支持 CICS的 Java 线程启动的新 CICS 任务的安全性
  1. 在开始事务 tranA, 之前,CICS 执行事务安全检查,以验证 clientUserid 是否有权附加 tranA 。
  2. 调用 CICS 任务将通过调用执行程序服务来异步启动在 CICS 任务上运行的新 Java 线程。 新的 CICS 任务的事务标识由调用 CICS 任务设置为 tranB 。
  3. 在开始事务 tranB, 之前,CICS 执行事务安全检查,以验证 clientUserid 是否有权附加事务 tranB 。

如果从非CICS 线程启动新的 CICS 任务,那么 CICS 事务安全性不适用于调用线程。 新的 CICS 任务将使用 CICS 缺省用户标识,事务标识将缺省为 CJSU 或 CJSA ,具体取决于正在使用的 JVM 服务器类型。 事务安全性将用于确保 CICS 缺省用户标识具有连接指定事务的权限。

下图显示了使用 Liberty JVM 服务器时非CICS 线程的示例:
图 2。 从非CICS 线程启动的新 CICS 任务的安全性
此图显示从非CICS 线程启动的新 CICS 任务的安全性
  1. 调用 Java 线程将通过调用 JCICS 执行程序服务来异步启动在 CICS 任务上运行的新 Java 线程。 新的 CICS 任务的事务标识缺省为 CJSU ,因为该任务正在 Liberty JVM 服务器中运行。
  2. 在启动事务 CJSU 之前, CICS 会执行事务安全性检查,以验证缺省 CICS 用户标识是否有权连接事务 CJSU。

备用选项

作为使用 Java 执行程序服务的替代方法, EXEC CICS 命令 RUN TRANSID 和 START TRANSID 也可用于异步启动新的 CICS 任务。 新的 CICS 任务可以调用 Java 或非 Java 程序。 可以分别使用 JCICS AsyncServiceStartRequest 类从 Java 程序调用这些命令。