JVM サーバー環境では、OSGi フレームワークで実行されているアプリケーションは ExecutorService を使用して、CICS タスクで非同期的に実行するスレッドを作成できます。
CICS には、Java ExecutorService インターフェースが実装されています。 この実装により、CICS サービスにアクセスするために JCICS API を使用可能なスレッドを作成できます。JVM サーバーは、始動時に OSGi サービスとして ExecutorService を登録します。 Java の Thread クラスではなく、この実装を使用してください。
CICS で提供される ExecutorService は、スレッドを作成するためにアプリケーションで使用されるように、OSGi フレームワークにおいて優先度が高いものとして登録されます。 アプリケーションは通常、特定の実装を使用するようにサービスをフィルタリングするのでない限り、最も高い優先度の ExecutorService を使用します。
アプリケーションにスレッドを作成する場合、OSGi レジストリーから汎用 ExecutorService を使用する方式が推奨されています。 アプリケーションが JVM サーバーで実行されているとき、ExecutorService は自動的に CICS ExecutorService を使用して CICS スレッドを作成します。 この方式により、アプリケーションは実装環境とは分離されるので、特定の JCICS API メソッドを使用する必要がなくなります。
しかし、CICS に固有のアプリケーションを作成している場合は、JCICS API 内の CICSExecutorService クラスを使用して、新しいスレッドを要求することができます。
このクラスは、java.util.concurrent.ExecutorService インターフェースを実装します。 CICSExecutorService クラスには runAsCICS() という静的メソッドが備わっていて、このメソッドを使用して Runnable Java オブジェクトをサブミットして、新しい JCICS 対応スレッドで実行できます。 runAsCICS() メソッドは、OSGi レジストリー検索を実行し、アプリケーションの CICSExecutorService のインスタンスを取得するユーティリティー・メソッドです。
このクラスは Java ExecutorService インターフェースの実装として登録されるので、ExecutorService を要求するすべてのアプリケーションには、JVM サーバーで実行される場合にのみ CICSExecutorService が提供されます。
CICSExecutorService.runAsCICS(Runnable runnable)
JCICS を使用できるスレッドを作成するには、execute() メソッドを使用する必要があります。 submit() メソッドを使用すると、アプリケーションは、JCICS を実行できない Java スレッドを取得します。
Axis2 Java プログラムなど、OSGi フレームワークで実行されていないアプリケーションの場合、ExecutorService が使用できないので、アプリケーションの初期スレッドでしか JCICS にアクセスすることができません。また、以下のアクションを実行する場合には、その前に初期スレッド以外のすべてのスレッドを必ず終了させる必要があります。