Nachdem wir uns beim letzten Mal überwiegend um das Thema „Batch“ (Stapelverarbeitung von Massendaten) gekümmert haben, möchten wir heute mit „CICS“ etwas in die „Online-Welt“ einsteigen.
Fun Fact: Ich weiß – die letzten beiden Male waren schon schwere Kost, aber ich verspreche euch – sobald ihr den heutigen Artikel geschafft habt, lasse ich das Thema erst mal wieder ruhen… 😉
Ja – ihr habt richtig gehört! Wobei man jetzt doch stark unterscheiden muss, was „Online“ im Mainframe-Kontext bedeutet. Ja – es gibt Onlineanwendungen auf dem Mainframe. Ja – es gibt sogar Webserver, die auf dem Großrechner laufen. Und ja – einige der Mainframes hängen dementsprechend auch im Internet. Allerdings sind mit „Online-Anwendungen“ auf Mainframes eher Programme gemeint, welche in Form von Transaktionen innerhalb eines Online-Systems (also quasi zu jederzeit aufrufbar, ggf. mit einem Frontend versehen) durchgeführt werden, nicht (zwingend) die Anbindung von Anwendungen ans Internet.
Fun Fact: Unabhängig davon ist auch der Aufbau eines Webservers sowie die Konfiguration mit aktuellen Sicherheitstechnologien in so einer „Spielumgebung“ auf einem USB-Stick-Großrechner nicht ganz ohne. Verzeiht mir, dass ich im Rahmen dieser kurzen Einführung darauf verzichte… 😉
Natürlich gibt es verschiedene Online-Systeme, aber das am weitesten verbreitetste Online-System (auch Transaktionsmonitor genannt) heißt „CICS“. Die Abkürzung steht für „Customer Information Control System“. Der Name überrascht eigentlich nicht, da das System neben der technischen Plattform für Anwendungen zur Transaktionsverarbeitung auch häufig als einfaches Frontend für Anwender dient.
Fun Fact: Vielleicht habt ihr sogar schon mal einen CICS-Bildschirm gesehen! In einigen großen Möbelhäusern wird auch heute noch das eingesetzte Warenwirtschaftssystem über CICS bedient. So kann es sein, dass ihr – z.B. im Beratungsgespräch mit einem Verkäufer – schon mal an dessen Computer ein etwas altertümlich aussehendes Bild zu Gesicht bekommen habt. Was immer nach einer etwas abgewandelten Form des Videotexts aussieht ist in vielen Fällen eine CICS-Anwendung! 😀
Im Vergleich zur klassischen Stapel- bzw. Massendatenverarbeitung (Batch) werden im CICS Transaktionen von vielen Benutzern und mit einer Vielzahl von Anwendungen verarbeitet. Ein typisches Einsatzfeld ist z.B. auch die Steuerung von Transaktionen bei Geldautomaten. Der Vorteil der Verarbeitung von Daten mit Hilfe einzelner Transaktionen ist, dass diese entweder ganz oder gar nicht ausgeführt werden und es so keine „unbestimmten Zustände“ (z.B. Programm bricht bei der Hälfte ab und hinterlässt einen „kaputten Zustand“) gibt. Wäre ja blöd, wenn z.B. das Geld von eurem Konto abgebucht wird, aber auf Grund eines Fehlers nie beim Empfänger ankommt! 😉
Hm, ok. Und wie macht das CICS das alles eigentlich? Nun, CICS verwaltet diese Anwendungsprogramme, koordiniert deren Ausführung, handhabt die Datenübertragungen zwischen Programmen und Terminals und steuert den Zugriff auf Daten. Es fungiert letztendlich als Schnittstelle zwischen Programmen und den Diensten des Betriebssystems. Analog aller restlichen Anwendungen auf dem Mainframe läuft CICS als Dienst (auch STC, bzw. „Started Task“ genannt) neben zahlreichen weiteren Diensten. Zwei oder mehrere CICS-Systeme können parallel laufen und werden als Regions bezeichnet. Da jedes CICS-System dabei in einem eigenen Adressraum läuft, stören parallel auf demselben Rechner laufenden Programme sich nicht gegenseitig.
Fun Fact: Das folgende Bild habe ich aus alten Schulungsunterlagen herausgekramt. Darauf finden sich exemplarisch ein paar z/OS-Adressräume (Dienste). Viel zu verstehen gibt es hier nicht wirklich – das einzige was ihr mitnehmen sollt ist: Es ist kompliziert! 😛
So viel zum Grundlegenden. Und wie sieht das mit dem CICS jetzt auf unserem „Taschenmainframe“ aus? In unserer Spielumgebung haben wir nur eine einzige CICS-Region namens „CICSA“. In einem professionellen Umfeld schaut das ganz anders aus, dort würde sich vermutlich eine Vielzahl an unterschiedlichen CICS-Systemen finden…
Und wie kommen wir jetzt da hin? Als erstes müssen wir uns mal aus dem TSO abmelden:
Um jetzt ins CICS einzusteigen können wir uns mit dem Befehl „l cics“ am System anmelden.
Und siehe da: Wir sind tatsächlich im CICS angekommen. Zumindest werden wir mit einer Meldung begrüßt! 🙂 Ansonsten scheint das CICS allerdings nicht sehr gesprächig zu sein, denn von einer Eingabemöglichkeit fehlt jede Spur. Und jetzt?
Wie ich bereits erwähnt habe ist CICS ein transaktionsbasiertes System. Durch die Eingabe von vierstelligen Transaktionskürzeln können einzelne Transaktionen gestartet werden. Hinter diesen Transaktionen stehen größtenteils (vom Unternehmen, welches den Mainframe, bzw. CICS einsetzt) selbst programmierte Anwendungen. Allerdings gibt es auch Systemtransaktionen von IBM, welche zur Verwaltung des CICS genutzt werden können.
Richtig viel können wir hier leider noch nicht sehen, da wir ja noch keine einzige Anwendung programmiert haben. Das würde den Rahmen des heutigen Beitrags leider auch deutlich sprengen, vielleicht ist das ein Thema für ein andermal! 😉
Zumindest die vordefinierten Systemtransaktionen können wir aber verwenden. So können beispielsweise mit der Transaktion „CECI“ (CICS Execute Command Interpreter) beliebige CICS-Kommandos (sofern wir dafür berechtigt sind) ausgeführt werden. Hier als Beispiel ein „CECI ASK A“, welcher einen Zeitstempel (wenn auch in einem eher kryptischen Format) ausspuckt! 🙂
Sorry, dass ich euch an der Ecke nichts „praktischeres“ mehr zeigen kann. Aber wenn wir schon mal im CICS sind, können wir gleich einen Fehler bzw. eine Nachlässigkeit beheben, welche sich in das vorinstallierte z/OS-Image eingeschlichen hat. Und zwar lassen sich von der Systemkonsole aus (das rechte Fenster) keine Befehle an das CICS schicken. Das ist schlecht, denn so können wir das System auch später nicht mehr sauber herunterfahren! 😀
Um das zu ermöglichen, müssen wir einen Zugang für die Konsole im CICS definieren. Das geht mit Hilfe der Transaktion CEDA:
Fun Fact: Die Info (sowie die Beschreibung wie man CICS mit der Masterkonsole verknüpft) habe ich natürlich erst nach gefühlt ewiger Recherche in den Untiefen des Internets auf einem portugiesischen Blog gefunden – der Klassiker! 😀
Anschließend muss mit dem Subparameter „ad“ (für „ADD“) eine neue Gruppe angelegt werden, welche der Liste „XYZLIST“ zugeordnet wird. Theoretisch könnte man auch eine eigene Liste anlegen, allerdings gibt es die XYZLIST schon und sie wird vom System nicht geschützt. Perfekt also für unsere Spielumgebung! 😉
Fun Fact: Standesgemäß habe ich die Gruppe natürlich „RETRO“ genannt! 😀
Jetzt können wir mit dem Befehl „CEDA DEF TE(L700)“ ein virtuelles Terminal definieren und es der frisch erstellten RETRO-Gruppe hinzufügen. Dazu werden einige Parameter (Group = RETRO, Typeterm = DFHCONS und Consname = L700) benötigt. Keine Angst, ich werde jetzt nicht weiter darauf eingehen, ich weiß wie langweilig die ganze Theorie ist! 😀
Über einen abschließenden „CEDA i group(retro)“ wird die Gruppe, bzw. das frisch erstellte Terminal installiert und aktiviert:
Nach getaner Arbeit fehlt eigentlich nur noch der Logoff vom System. Das geht im Fall vom CICS mit einem einfachen „cesf logo“-Befehl:
Apropos „Logoff“ – bisher haben wir immer nur irgendetwas hochgefahren oder gestartet. Ein Punkt, den ich bisher völlig vernachlässigt habe, ist das saubere Herunterfahren unseres Mini-Mainframes. Wie bei so ziemlich jedem Thema auf dem Mainframe gibt es auch hier einiges zu beachten!
Fun Fact: Theoretisch kann man den Hercules-Emulator auch einfach mit einem einzigen Klick beenden, aber die Wahrscheinlichkeit, dass sich dann etwas verhakt und das darunterliegende z/OS-System auf den virtuellen Festplatten nicht mehr hochfährt ist relativ hoch… Lieber nicht! 😉
Grob gesagt müssen wir Schritt für Schritt jede einzelne gestartete Anwendung (also jeden Dienst) händisch mit Hilfe eines speziellen Befehls beenden. Da einige Dienste Abhängigkeiten zu anderen Diensten haben, muss eine bestimmte Reihenfolge eingehalten werden. Um herauszufinden welche Dienste überhaupt gestartet sind, kann der Befehl „d a,l“ auf der Masterkonsole eingegeben werden:
Da jedes System einen anderen Befehl (in einem recht unterschiedlichen Format) erwartet und mein Gedächtnis auch nicht mehr das ist, was es mal war, habe ich mir eine Liste erstellt:
Fun Fact: An dieser Stelle ist es eine gute Gelegenheit zu erwähnen, dass alle Eingaben ausschließlich mit der Tastatur gemacht werden – kein Witz! 😀 Der Großrechner samt seinen Betriebssystemen stammt aus einer Zeit, in der es keine Mäuse, sondern ausschließlich „dumme Terminals“ mit angeschlossenen Tastaturen gab. Dementsprechend gibt es keine klassische Mainframe-Anwendung, die zur Bedienung eine Maus benötigt! Je nach installiertem 3270-Emulator lässt sich die Maus aber ggf. trotzdem unterstützend (z.B. zum Markieren von Bildschirmausschnitten) verwenden.
Jede eingegebene Aktion wird dabei durch unterschiedliche Nachrichten auf der Konsole bestätigt. Hier stoppe ich z.B. mit dem Befehl „f cicsa,cemt p shut i“ den CICS-Adressraum. Hätten wir zuvor die Systemkonsole nicht mit dem CICS-System verknüpft, würde dieser Schritt nicht funktionierten! 😉
Und so werden nach und nach alle Anwendungen gestoppt. Während einige Kandidaten (wie z.B. der TSO-Adressraum) recht pflegeleicht sind…
…müssen für andere Dienste (wie z.B. dem ZFS-Adressraum, welcher für das eingebettete Unix-Filesystem benötigt wird) neben dem Stop-Befehl noch sog. „Replys“ auf der Konsole beantwortet werden. Quasi eine altertümliche Form des von Windows-Systemen bekannten „Sind Sie sicher?“ 😀
Sobald der letzte Dienst (JES2) heruntergefahren ist, müssen mit „z eod“ und „quiesce“ noch zwei Systembefehle abgesetzt werden, um das System endgültig zu stoppen:
Der Hercules-Emulator kann dann mit einem Druck auf die ESC-Taste sowie der anschließenden Eingabe von „exit“ beendet werden.
Uff – geschafft. Damit haben wir den USB-Großrechner endlich sauber heruntergefahren. Um ehrlich zu sein, habe ich bei einigen Anwendungen mehrere Anläufe gebraucht, bis ich bei allen Befehlen und Techniken voll durchgestiegen bin, aber ich wollte euch noch nicht weiter mit technischen Details langweilen. Tja, man lernt eben nie aus… 😉
Ich denke damit sollten wir den USB-Stick – ähm ich meine natürlich den Großrechner – erst mal wieder beiseitelegen. Zwar gäbe es noch so einiges zu entdecken, allerdings ist mir auch klar, dass das ein sehr spezielles (und vor allem trockenes) Thema ist und ich denke etwas Abwechslung schadet nicht. Vielleicht gibt es ja in Zukunft mal wieder einen Beitrag über den Mainframe – wer weiß das schon? 😉
In diesem Sinne – bis die Tage, ciao!