工作方式: 新 Java 线程和任务的安全性
在 OSGi 或 Liberty JVM 服务器中运行的 Java 应用程序可以使用 Java 执行器服务异步启动启用了 CICS® 的新 Java 线程。 CICS 事务安全性可用于授权访问正在使用这些线程的新 CICS 任务。
有关在 CICS JVM 服务器中使用 Java 执行程序服务的选项的更多详细信息,请参阅 CICS 任务和线程管理。
使用适当的 Java ExecutorService启动新的 CICS 任务时,会将调用 CICS 任务的任务用户标识和事务标识传播到新的 CICS 任务。 但是,可以使用 CICSTransactionRunnable 或 CICSTransactionCallable 接口修改新任务的事务标识。 如果调用线程没有 CICS 任务,那么事务标识和任务用户标识将使用缺省值。
- 对于从 CICS 线程启动的线程,新的 CICS 任务将以来自父代的任务用户标识运行。 如果未指定新事务标识,那么将从调用 CICS 任务继承该标识。
- 对于 OSGi JVM 服务器中从非CICS 线程启动的线程,事务标识 CJSA 和缺省 CICS 用户标识将用于新线程。
- 对于 Liberty 服务器中从非CICS 线程启动的线程,将使用缺省未分类事务标识 (CJSU) 和缺省 CICS 用户标识。 可以使用
com.ibm.cics.jvmserver.unclassified.tranid和com.ibm.cics.jvmserver.unclassified.useridJVM 服务器属性来修改这些缺省值。 请参阅 JVM 系统属性 (JVM system properties)。
在 Java 线程上运行的新启动的 CICS 任务的安全性
如果从启用了 CICS的 Java 线程启动新的 CICS 任务,那么将使用 CICS 事务安全性来确保调用任务的用户标识有权连接新事务。 如果延迟绑定生效,那么将在延迟绑定过程中执行此授权检查。
- 在开始事务 tranA, 之前,CICS 执行事务安全检查,以验证 clientUserid 是否有权附加 tranA 。
- 调用 CICS 任务将通过调用执行程序服务来异步启动在 CICS 任务上运行的新 Java 线程。 新的 CICS 任务的事务标识由调用 CICS 任务设置为 tranB 。
- 在开始事务 tranB, 之前,CICS 执行事务安全检查,以验证 clientUserid 是否有权附加事务 tranB 。
如果从非CICS 线程启动新的 CICS 任务,那么 CICS 事务安全性不适用于调用线程。 新的 CICS 任务将使用 CICS 缺省用户标识,事务标识将缺省为 CJSU 或 CJSA ,具体取决于正在使用的 JVM 服务器类型。 事务安全性将用于确保 CICS 缺省用户标识具有连接指定事务的权限。
- 调用 Java 线程将通过调用 JCICS 执行程序服务来异步启动在 CICS 任务上运行的新 Java 线程。 新的 CICS 任务的事务标识缺省为 CJSU ,因为该任务正在 Liberty JVM 服务器中运行。
- 在启动事务 CJSU 之前, CICS 会执行事务安全性检查,以验证缺省 CICS 用户标识是否有权连接事务 CJSU。
备用选项
作为使用 Java 执行程序服务的替代方法, EXEC CICS 命令 RUN TRANSID 和 START TRANSID 也可用于异步启动新的 CICS 任务。 新的 CICS 任务可以调用 Java 或非 Java 程序。 可以分别使用 JCICS AsyncService 和 StartRequest 类从 Java 程序调用这些命令。