Java Runtime Environment in CICS

CICS stellt die JVM-Serverumgebung für die Ausführung threadsicherer Java™-Anwendungen bereit. Anwendungen, die nicht threadsicher sind, können einen JVM-Server nicht verwenden.

Der JVM-Server ist eine Laufzeitumgebung, in der Tasks in einer einzelnen Java Virtual Machine (JVM) ausgeführt werden können. Diese Anwendung reduziert den für die einzelnen Java-Tasks erforderlichen virtuellen Speicher und ermöglicht CICS die gleichzeitige Ausführung einer Vielzahl von Tasks.

CICS-Tasks können parallel als Threads im selben JVM-Serverprozess ausgeführt werden. Die JVM wird von allen CICS-Tasks, die mehrere Anwendungen gleichzeitig ausführen können, gemeinsam genutzt. Ebenfalls gemeinsam genutzt werden alle statischen Daten und statischen Klassen. Deshalb muss eine Java-Anwendung threadsicher sein, damit ein JVM-Server in CICS verwendet werden kann. Jeder Thread wird unter einem T8-TCB ausgeführt und kann über die JCICS-API auf CICS-Services zugreifen.

Die Methode System.exit() sollten Sie in Ihren Anwendungen nicht verwenden. Diese Methode veranlasst, dass sowohl der JVM-Server als auch CICS heruntergefahren wird, was sich auf den Status und die Verfügbarkeit Ihrer Anwendungen auswirkt.

Multithread-Anwendungen

Sie können Anwendungscode schreiben, um einen neuen Thread zu starten, oder eine Bibliothek aufrufen, die einen Thread startet. Wenn Sie in Ihrer Anwendung Threads erstellen möchten, hat es sich bewährt, einen generischen ExecutorService aus der OSGi-Registry zu verwenden. Der ExecutorService verwendet automatisch den ExecutorService von CICS, um CICS-Threads zu erstellen, wenn die Anwendung in einem JVM-Server ausgeführt wird. Bei dieser Lösung lässt sich die Anwendung einfacher in andere Umgebungen portieren, und Sie müssen keine besonderen JCICS-API-Methoden 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.

Die neu erstellten Threads werden ungeachtet der gewählten Methode als CICS-Tasks ausgeführt und können auf CICS-Services zugreifen. Wird der JVM-Server inaktiviert, wartet CICS, bis alle aktiven CICS-Tasks in der Java Virtual Machine beendet sind. Durch die Verwendung der Klasse ExecutorService oder CICSExecutorService kennt CICS die aktiven Tasks und Sie können sicherstellen, dass Ihre Anwendungsaufgaben vor dem Herunterfahren des JVM-Servers vollständig ausgeführt werden.

JCICS-Objekte können nur in der Task verwendet werden, von der sie erstellt wurden. Jeglicher Versuch, die Objekte von Tasks gemeinsam nutzen zu lassen, kann zu unvorhersehbaren Ergebnissen führen.

Starten und Herunterfahren des JVM-Servers

Da statische Daten von allen Threads, die im JVM-Server ausgeführt werden, gemeinsam genutzt werden, können Sie OSGi-Bundleaktivatorklassen erstellen, um die statischen Daten zu initialisieren und deren korrekten Status beizubehalten, wenn die Java Virtual Machine heruntergefahren wird. Ein JVM-Server wird ausgeführt, bis er von einem Administrator inaktiviert wird, um zum Beispiel die Konfiguration der Java Virtual Machine zu ändern oder einen Fehler zu korrigieren. Durch Bereitstellung von Bundleaktivatorklassen können Sie sicherstellen, dass der Status für Ihre Anwendungen ordnungsgemäß festgelegt wird. CICS besitzt ein Zeitlimit, das angibt, wie lange auf die Beendigung dieser Klassen gewartet wird, bevor mit dem Starten oder Stoppen des JVM-Servers fortgefahren wird. JCICS kann in Start- und Beendigungsklassen nicht verwendet werden.