JVM サーバー環境では、OSGi フレームワークで実行されているアプリケーションは ExecutorService を使用して、CICS® タスクで非同期的に実行するスレッドを作成できます。
CICS には、Java™ ExecutorService インターフェースが実装されています。 この実装では、JCICS API を使用して CICS サービスにアクセスできるスレッドが作成されます。 JVM サーバーは始動時に、OSGi サービスとして CICS ExecutorService を登録します。 Java の Thread クラスではなくこのサービスを使用して、JCICS を使用できるタスクを作成してください。
CICS で提供される ExecutorService は、スレッドを作成するためにアプリケーションで使用できるように、OSGi フレームワークにおいて優先順位が高いものとして登録されます。 アプリケーションは通常、特定の実装を使用するようにサービスをフィルタリングするのでない限り、最も高い優先度の ExecutorService を使用します。
アプリケーションにスレッドを作成する場合、OSGi レジストリーから汎用 ExecutorService を使用する方式が推奨されています。 アプリケーションが JVM サーバーで実行されているとき、OSGi レジストリーは自動的に 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 スレッドを取得します。
OSGi フレームワーク (Axis2 Java プログラムなど) で実行されていないアプリケーションの場合は、ExecutorService を使用できないため、初期アプリケーション・スレッドのみで JCICS にアクセスできます。 さらに、以下のいずれかのアクションを行う前に、初期スレッド以外のすべてのスレッドが終了している必要があります。