CICS 中的 Java 运行时环境
CICS® 提供用于运行线程安全 Java™ 应用程序的 JVM 服务器环境。 非线程安全型的应用程序不能使用 JVM 服务器。
JVM 服务器是可以在单个 JVM 中运行任务的运行时环境。 此环境减少了每个 Java 任务所需的虚拟存储量,并允许 CICS 同时运行许多任务。
CICS 任务在同一 JVM 服务器进程中作为线程并行运行。 JVM 由所有 CICS 任务共享,这些任务可能同时运行多个应用程序。 还会共享所有静态数据和静态类。 因此,要在 CICS中使用 JVM 服务器, Java 应用程序必须是线程安全的。 每个线程都在 T8 TCB 下运行,并且可以使用 JCICS API 访问 CICS 服务。
请勿在您的应用程序中使用 System.exit() 方法。 此方法会导致 JVM 服务器并禁用和重新启动,从而影响应用程序的状态和可用性。
多线程应用程序
您可以编写应用程序代码以启动新线程,或者调用启动线程的库。 如果您要在应用程序中创建线程,那么首选方法是使用 OSGi 注册表中的通用 ExecutorService。 当应用程序在 JVM 服务器中运行时, ExecutorService 会自动使用 CICSExecutorService 来创建 CICS 线程。 该方法意味着应用程序易于移植到其他环境,而您不必使用特定的 JCICS API 方法。
但是,如果您正在编写特定于 CICS的应用程序,那么可以选择使用 JCICS API 中的 CICSExecutorService 类来请求新线程。
无论选择何种方法,新创建的线程都将作为 CICS 任务运行并可以访问 CICS 服务。 当 JVM 服务器处于禁用状态时, CICS 将等待 JVM 中运行的所有 CICS 任务完成。 通过使用 ExecutorService 或 CICSExecutorService 类,CICS 可识别正运行的任务,并且可确保应用程序工作在 JVM 服务器关闭前完成。
您只应该在创建 JCICS 对象的任务中使用这些对象。 任何在任务间共享这些对象的尝试都可能产生不可预测的结果。
有关使用 CICS ExecutorService 的更多详细信息,请参阅 线程。
JVM 服务器启动和关闭
由于 JVM 服务器中正运行的所有线程都会共享静态数据,因此您可以创建 OSGi 束激活器类以初始化静态数据,并在 JVM 关闭时使该数据处于正确的状态。 JVM 服务器会一直运行,直至管理员因某种原因将其禁用:例如,更改 JVM 的配置或纠正问题。 通过提供束激活程序类,您可以确保为应用程序正确地设置了状态。 CICS 具有超时,用于指定在继续启动或停止 JVM 服务器之前等待这些类完成的时间。 不能在启动和终止类中直接使用 JCICS。 但开发人员可以使用 CICSExecutorService.runAsCICS() API 从激活程序中启动支持 JCICS 的新线程。 任何 JCICS 命令都将使用发出安装命令的用户标识的权限来运行。 因此,管理员应该先了解捆绑软件激活程序中使用的资源,然后再安装这些资源。