Threads

In einer JVM-Serverumgebung kann eine Anwendung, die in einem OSGi-Framework ausgeführt wird, einen ExecutorService für die Erstellung von Threads verwenden, die asynchron in CICS-Tasks ausgeführt werden.

CICS stellt eine Implementierung der Java™-Schnittstelle ExecutorService zur Verfügung. Diese Implementierung erstellt Threads, die die JCICS-API für den Zugriff auf CICS-Services verwenden kann. Der JVM-Server registriert den ExecutorService von CICS als OSGi-Service beim Start. Verwenden Sie diesen Service anstelle der Java-Klasse Thread für die Erstellung von Tasks, die JCICS verwenden können.

Der von CICS bereitgestellte ExecutorService wird im OSGi-Framework mit hoher Priorität registriert, damit er von Anwendungen für die Erstellung von Threads verwendet werden kann. In der Regel verwendet eine Anwendung den ExecutorService mit der höchsten Priorität, sofern nicht durch die entsprechende Filterung der Services die Verwendung einer bestimmten Implementierung festgelegt ist.

Bei der Erstellung von Threads in Anwendungen hat es sich bewährt, einen generischen ExecutorService aus der OSGi-Registry zu verwenden. Die OSGi-Registry verwendet automatisch den ExecutorService von CICS, um CICS-Threads zu erstellen, wenn die Anwendung in einem JVM-Server ausgeführt wird. Da die Anwendung bei dieser Lösung von der Implementierung entkoppelt wird, müssen Sie nicht die JCICS-API-Methode für die Erstellung von Threads verwenden.

Wenn Sie jedoch speziell für CICS eine Anwendung schreiben, können Sie eine CICSExecutorService-Klasse in der JCICS-API für die Anforderung neuer Threads verwenden.

CICSExecutorService

Diese Klasse implementiert die Schnittstelle java.util.concurrent.ExecutorService. Die Klasse CICSExecutorService stellt die statische Methode runAsCICS() zur Verfügung, mit der Sie ein Java-Objekt des Typs Runnable (Ausführbar) für die Ausführung in einem neuen JCICS-fähigen Thread übergeben können. Die Methode runAsCICS() ist eine Dienstprogrammmethode, die eine Suche in der OSGi-Registry ausführt, um eine Instanz eines CICSExecutorService für die Anwendung zu erhalten.

Da diese Klasse als Implementierung der Java-Schnittstelle ExecutorService registriert ist, erhält eine Anwendung, die einen ExecutorService anfordert, den CICSExecutorService nur, wenn sie in einem JVM-Server ausgeführt wird.

CICSExecutorService.runAsCICS(Runnable runnable)

Einschränkungen

Sie müssen die Methode execute() für die Erstellung von Threads verwenden, die JCICS verwenden können. Wenn Sie die Methode submit() verwenden, ruft die Anwendung einen Java-Thread ab, der JCICS nicht ausführen kann.

Bei Anwendungen, die nicht in einem OSGi-Framework ausgeführt werden, beispielsweise einem Axis2-Java-Programm, können Sie nur im ursprünglichen Anwendungsthread auf JCICS zugreifen, da der ExecutorService nicht verfügbar ist. Zusätzlich müssen Sie sicherstellen, dass alle Threads außer dem Anfangsthread beendet wurden, bevor eine der folgenden Aktionen ausgeführt wird: