# Customer Information Control System

Das Customer Information Control System (CICS) ist eine Art von IBM entwickelte Software (Middleware), die verwendet wird, um Programme (Applikationen) zu erstellen, bei denen Aufgaben in kurzer Zeit abgewickelt werden müssen. Man nennt solche Programme auch Online Transaction Processing (OLTP). CICS verwendet spezielle Befehle, um diese Aufgaben auszuführen. Diese Befehle werden oft zusammen mit der Programmiersprache COBOL verwendet, wobei die Anweisungen in den COBOL-Code eingefügt werden.

## Aussprache

Je nach Land wird die Abkürzung CICS unterschiedlich ausgesprochen:
* In Deutschland meistens wie zicks: Ohne CICS läuft nix!.
* In den USA sind kicks und see eye see ess gebräuchlich.
* In Großbritannien eher wie kicks

## Überblick

Als Transaktionsmonitor kann CICS Transaktionen verarbeiten, mit vielen Benutzern und mit einer Vielzahl von Anwendungen. CICS kümmert sich darum, diese Programme zu organisieren, ihre Ausführung zu koordinieren und Informationen zwischen den Programmen und den Geräten, die verwendet werden, auszutauschen. Es hilft auch dabei, wie Programme auf Informationen zugreifen können. Wenn das Anwendungsprogramm auf ein Terminal oder ein Festplattengerät zugreifen möchte, agiert CICS wie eine Art Übersetzer, der sicherstellt, dass die Programme richtig mit den Geräten kommunizieren. CICS kommuniziert dazu mit einer Zugriffsmethode des Betriebssystems, welche anschließend mit dem Gerät kommuniziert.
Wenn zum Beispiel ein Programm Informationen von einem Geldautomaten anzeigen möchte, kommuniziert es nicht direkt mit dem Automaten, sondern gibt CICS Anweisungen, was es tun soll. Dann kümmert sich CICS darum, wie das Programm mit dem Automaten Informationen austauschen kann. Dadurch wird sichergestellt, dass alles reibungslos funktioniert.
CICS kann dafür sorgen, dass mehrere Aufgaben gleichzeitig auf einem Computer erledigt werden können, ohne sich dabei gegenseitig zu behindern. Zum Beispiel könnten mehrere CICS-Systeme auf einem Computer laufen, und jedes von ihnen hat seine eigene "Zone" (Adressraum), in der es arbeitet, ohne andere zu stören.
Bei der CICS-Applikationsentwicklung unterscheidet man:
* die Business Logic: Datenmanipulation und Berechnungen, welche die Transaktion erfordert (Unter Verendung von COBOL, PL/I, Assembler, Java)
* die Data Services: abrufen und aktualisieren von Daten (mit Hilfe von Db2, DL/I, VSAM, Oracle-Software)
Es wird eine Makrosprache verwendet, wobei diese Sprache unabhängig von der Programmiersprache ist. Innerhalb beispielsweise eines COBOL-Programmes befinden sich die CICS-Anweisungen.
Der generelle Aufbau der CICS-Kommandos:
MAPS ist eines der Kommunikations-Interfaces zwischen CICS und dem Benutzer.
Der Endbenutzer gibt beispielsweise Daten ein, welche dem Programm verfügbar gemacht werden, indem es eine map von CICS erhält.
CICS ist unter den /390-Großrechner-Betriebssystemen z/OS (MVS) und VSE sowie, in modifizierter Form als Encina-Erweiterung, unter AIX, HP-UX, Solaris sowie Windows Server verfügbar. Im Gegensatz zu Time-Sharing Option, bei dem jeder Benutzer seinen eigenen Adressraum bekommt, laufen alle CICS-Benutzer im gleichen Adressraum des CICS-Systems.

## Anwendungsentwicklung unter CICS

Es werden die traditionell auf Großrechnern verbreiteten Programmiersprachen COBOL, C, C++, PL/I und Assembler unterstützt, seit einigen Jahren auch Java.
Die Anwendungs-Schnittstelle oder API für nicht- objektorientierte Programmiersprachen besteht aus EXEC CICS .....-Kommandos, die von einem Präprozessor in die Gastsprache übersetzt werden. Java-Programmierern stehen entsprechende CICS-Klassen zur Verfügung.
Im Gegensatz zu Information Management Systemen ist die Kodierung der EXEC CICS Blöcke in allen Standard-HOST-Sprachen (siehe oben) identisch. Ein EXEC CICS ASSIGN..... sieht in COBOL, C, C++, PL/I und Assembler identisch aus.
CICS-Programme interagieren mit einem Anwender oder einer anderen Anwendung. Dafür stehen dem Programmierer eine Vielzahl von Mechanismen und Funktionen zur Verfügung. Für klassische, bildschirmorientierte Anwendungen sind z. B. folgende Funktionen wichtig
* SEND MAP / RECEIVE MAP zum Anzeigen von Informationen und Abholen von Usereingaben
* RETURN TRANSID zum Beenden der CICS Task (CISC Aufgabe) unter Vorgabe der Folgetransaktion nach erfolgter Benutzereingabe
* READ TS QUEUE / WRITE TS QUEUE zum Zwischenspeichern von Programmdaten, während die CICS Task beendet ist und auf Eingaben wartet oder zur Kommunikation mit anderen Anwendungen.

## Transaktionen im CICS

Eine CICS-Transaktion besteht aus einer oder mehreren Units of Work (UOW). Man kann sich das vorstellen wie verschiedene Schritte, um etwas zu erledigen. Jeder dieser Schritte wird als "Unit of Work" (Arbeitseinheit) bezeichnet. Diese "Unit of Work" ist etwas, das in der Fachsprache oft mit dem Wort Transaktion beschrieben wird und mit dem Begriff ACID (Atomicity, Consistency, Isolation und Durability) verbunden wird. Ein Beispiel dafür ist, wie ein Buchhalter verschiedene Schritte durchführt, um Finanzdaten zu überprüfen. Diese Schritte müssen bestimmte Eigenschaften haben, um sicherzustellen, dass die Daten korrekt und sicher verarbeitet werden. Die veraltete Bezeichnung Logical Unit of Work (LUW) wird auch heute noch synonym für UOW verwendet.
Jede CICS-Transaktion läuft unter einem vordefinierten vierstelligen Transaktions-Code. Dieser Transaktions-Code legt unter anderem den Namen des Programms fest, welches mit dem Start der Transaktion die Ausführungskontrolle erhält.
Mit dem Start der Transaktion beginnt eine UOW, mit dem Kommando EXEC CICS SYNCPOINT wird die laufende UOW beendet (committed) und eine neue UOW begonnen. Die Transaktion endet mit EXEC CICS RETURN und beendet auch die aktuelle UOW mit SYNCPOINT. Eine CICS-Transaktion entsteht traditionell
* durch Eingabe eines Transaktionscodes an einem Terminal (bzw. in der Terminalemulation eines PCs)
* aus einer CICS-Anwendung heraus mit START TRANSID oder RETURN TRANSID (insbesondere bei quasi-dialogorientierten Transaktionen)
* CICS-intern: z. B. Trigger auf TD-Queue.
* aus einem anderen CICS mit Transaction Routing oder Distributed Program Link (DPL).
CICS-Transaktionen können von Programmen auch von „außen“ gestartet werden:
* EXCI-Call aus z/OS (MVS, Multiple Virtual Storage), z. B. TSO (Time-Sharing Option) oder Stapelverarbeitung.
* Im MVS von der Operator-Konsole bzw. von Software-Konsolen (z. B. TSO, Netview).
* eci-Call von nicht-MVS-Plattformen (Unix, Windows, OS/2)
* Verwendung von Standardprotokollen:
** TCP/IP-Sockets und APPC (Advanced Program to Program Communications)
** IIOP (Internet Inter ORB Protocol) für CORBA-Anwendungen und Enterprise JavaBeans
** mittels HTTP/HTTPS kann man CICS auch als Webserver benutzen

## Geschichte und Zukunft von CICS

Laut Bob Yelavich ist Ben Riggins der Vater von CICS.
Zahlreiche Mythen ranken sich um das Präfix der CICS-Meldungen DFH. Bob Yelavich weist darauf hin, dass diese Buchstabenkombination von IBM schlicht zugewiesen wurde und es sich um keine Abkürzung handelt (vgl. IMS und das Präfix DFS), manche Quellen hingegen behaupten, das erste CICS wäre ein Produkt eines lokalen Stromanbieters mit der Firmenabkürzung D.F.H. gewesen und sei später von IBM gekauft worden.
Die wahre Geschichte von CICS lässt sich heute nicht mehr klären, klar ist nur, dass CICS in den frühen 1970er Jahren aufgetaucht ist und ursprünglich nicht von IBM war.
In der DDR existierte Ende der 1980er Jahre ein Datenkommunikationssystem mit dem Namen DAKS, welches unter OS/ES-SVS, dem DDR-Clone des IBM-Betriebssystems OS/VS2, lief. Das Präfix der DAKS-Meldungen war DKS, die Semantik der Meldungen war identisch (z. B. Control is being given to DAKS). Die Staatsbank der DDR setzte es zur Realisierung seines Terminal-Systems ein. Auch darüber hinaus fand es Verbreitung in zahlreichen Betrieben der DDR, welche den EC 1055 M einsetzten. Allerdings verlor DAKS nach der Wende an Bedeutung, da nach der Währungs-, Wirtschafts- und Sozialunion die meisten Rechenzentren in der DDR ihre Soft- und Hardware auf westlichen Standard brachten.
CICS wird weltweit in zahlreichen großen Unternehmen eingesetzt. Da CICS laufend weiterentwickelt wird und die aktuellen Versionen sowohl gängige Programmiersprachen wie C/C++ und Java unterstützen, als auch entsprechende Schnittstellen zum Internet (CICS Web Support) und zu Webservices haben, kann man davon ausgehen, dass der Markt für CICS zumindest in den nächsten Jahren relativ stabil bleiben wird. Im Neukunden-Markt-Segment muss sich CICS künftig gegenüber einer immer größer werdenden Konkurrenz mit auf kostengünstigen Servern bzw. Hosts mit hoher Verfügbarkeit basierenden Systemen behaupten.