线程

在 JVM 服务器环境中,在 OSGi 框架中运行的应用程序可以使用 ExecutorService 来创建在 CICS® 任务上异步运行的线程。

CICS 提供 Java™ ExecutorService 接口的实现。 此实现将创建可以使用 JCICS API 来访问 CICS 服务的线程。 JVM 服务器在启动时将 CICS ExecutorService 注册为 OSGi 服务。 使用此服务而不是 Java Thread 类来创建可使用 JCICS 的任务。

CICS 提供的 ExecutorService 在 OSGi 框架中注册为高优先级,以便应用程序可以使用它来创建线程。 通常,应用程序使用最高优先级 ExecutorService,除非它过滤服务以使用具体实现。

如果您要在应用程序中创建线程,那么首选方法是使用 OSGi 注册表中的通用 ExecutorService。 当应用程序在 JVM 服务器中运行时, OSGi 注册表会自动使用 CICS ExecutorService 来创建 CICS 线程。 该方法意味着应用程序与实现分离,因此您不必使用 JCICS API 方法来创建线程。

但是,如果编写特定于 CICS 的应用程序,那么可以在 JCICS API 中选择使用 CICSExecutorService 类以请求新线程。

CICSExecutorService

该类实现 java.util.concurrent.ExecutorService 接口。 CICSExecutorService 类提供了一个称为 runAsCICS() 的静态方法,可用于发送 RunnableCallable Java 对象以在支持 JCICS 的新线程上执行。 runAsCICS() 方法是实用程序方法,用于执行 OSGi 注册表查找以获取应用程序的 CICSExecutorService 实例。

对于从父 CICS 线程衍生的工作,将创建新的 CICS 任务,并在从父代继承的任务 user IDtransaction ID 下运行。 如果工作是从非 CICS 线程衍生的,那么将使用缺省 CJSA transaction ID 和缺省 CICS user ID 。 如果要保证新任务在您所选的 transaction ID 下运行,那么您的 RunnableCallable 对象应实施 CICSTransactionRunnableCICSTransactionRunnable 接口。

CICSExecutorService.runAsCICS(Runnable runnable)
CICSExecutorService.runAsCICS(Callable callable)

限制

对于未在 OSGi 框架 (例如, Axis2 Java 程序) 中运行的应用程序,您只能在初始应用程序线程上访问 JCICS ,因为 ExecutorService 不可用。 此外,在采取以下任何操作之前,还必须确保除初始线程以外的所有其他线程都已结束:

  • com.ibm.cics.server.Program 中的 link 方法
  • com.ibm.cics.server.TerminalPrincipalFacility 中的 setNextTransaction(String) 方法
  • com.ibm.cics.server.TerminalPrincipalFacility 中的 setNextCOMMAREA(byte[]) 方法
  • com.ibm.cics.server.Task 中的 commit() 方法
  • com.ibm.cics.server.Task 中的 rollback() 方法
  • 从类 com.ibm.cics.server 返回 AbendException 异常