phpbar.de logo

Mailinglisten-Archive

[php] Exceptions selbst gebaut

[php] Exceptions selbst gebaut

Werner Saumweber wsaumweber at mnet-online.de
Don Okt 26 08:09:43 CEST 2006


On Wed, 25 Oct 2006 08:37:39 +0200, Lutz Zetzsche wrote:

Hallo Lutz,

>Könntest Du vielleicht kurz skizzieren, wie Exceptions in IBM Mainframe
>funktionieren?
Oh la la! Dafür gibt es bei IBM u.a. Kurse, die von Montag bis Freitag dauern. :-)
Dann gibt es hierzu etliche dicke Manuale - für jedes Betriebssystem und Subsystem mindestens eines. Die Bibel 
des Systemprogrammierers nennt sich "Principles of Operations" und dan steht alles drinnen, was das BS und 
Interrupts angeht. :-)

>Ich denke, es wäre zur Auseinandersetzung mit den
>Exceptions in PHP, Java etc. hilfreich, auch andere Verfahrensweisen zu
>kennen. :-) Ich glaube sowieso, daß ich in den nächsten Tagen zu dem
>Thema noch einiges ergoogeln werden. Ich hätte echt nicht vermutet, daß
>das Thema so tiefgründig und interessant ist. ;-)
Eine Exception ist ein Fehler im Programm, der zwingend den Abbruch herbeiführt.
In einer anderen Mail war schon der Hinweis, dass Exception am Betriebssystem kratzt. Wenn wir nur die 
Oberfläche betrachten, kann dies sein oder auch nicht, je nachdem welche Möglichkeiten bestehen. Denn es gibt 
Debugging Utilities, die es dem Anwendungsentwickler ermöglichen mit solchen Fehlern umzugehen. Indem ihm 
abgenommen wird die Systeminfos zu analysieren, zu deren Verständnis es eigentlich vieler Erfahrung und vielen 
Wissens bedarf. Aber die Debugging Utilities sind nicht billig.

Ich versuche - ohne Gewähr - einen kleinen Auszug und hoffe, nicht zu technisch zu werden. :-)

In der IBM-Welt die ich kenne (AS 400 kenne ich nicht), sprechen wir von einem "Program Check", wenn es eine 
Exception gibt. Z.B. Data Exception, wenn das Programm eine Zahl zum Rechnen erwartet, es aber irgend etwas 
anderes bekommt. Oder Operation Exception, wenn das Programm in einen Speicherbereich schreiben will, der ihm 
nicht zugeteilt ist.
Bei einem Program Check wird ein Dump (Speicherauszug) aller verbundenen Speicherbereiche (User und System) 
in das Dump Dataset geschrieben, aus dem der Programmierer dann den Druck veranlassen kann, den er/sie dann 
analysiert. Heutzutage machen das die Analyse Utility-Programme, früher ging das zu Fuss, am Bildschirm oder auf 
Papier.

Das gilt auch für das für uns am ehesten relevante Subsystem "CICS Transaction Server", das tut, was der Name 
sagt. Unter CICS arbeiten viele viele Programme (= User lokal, im Intranet und von ausserhalb) und teilen sich die 
Resourcen wie Dateien und Services.
CICS sorgt für die Datenintegrität 
- bei konkurrierenden Zugriffen durch Lock-Mechanismen 
- und durch Backout von Daten im Falle eines Programmfehlers = Abbruchs. 
Es gibt einen programmierten Abbruch. Der "User Abend" ist eine programmierte Exception (Exec Cics Abend 
Abcode(xxxx)), um
- das Programm zu beenden und
- den o.g. Backout des CICS zu veranlassen.
CICS nimmt alle Änderungen zurück und damit sind dann alle Daten so, wie vor Start der Transaktion. Dies war und 
ist wohl noch immer die einfachste Methode des Programmendes im nicht abgehandelten Fehlerfall, da sich der 
Entwickler nicht um die Datenintegrität zu kümmern braucht.
Es gibt die Möglichkeit ein Pgm als "Abend Handler" für die aktive Transaktion anzumelden. Dies ist dann 
sinnvollerweise das Pgm auf oberstes Ebene. Was im php functions sind, sind im CICS externe Unterprogramme, 
die für bestimmte Aufgaben geschrieben sind. Z.B. alle Zugriffe auf eine DB2 UDB Tabelle (= IBM Datenbank) oder 
eine Datei oder bestimmte Rechenoperationen oder ..... Und das kann etliche Level tief gehen - früher hätte ich 
gesagt bis 256 (x'FF') :-).
Ich habe selbst schon Programme geschrieben, wo es nicht erwünscht war, das Pgm einfach abnormal durch eine 
Exception (auch in einem der U-Pros) enden zu lassen. Aber das ist alles andere als einfach und funktioniert (falls 
ich nicht sehr daneben liege) nur im Assembler. Und dann geht es an's Eingemachte, was ich mir jetzt spare. :-)
In entsprechenden Systemen (z.B. Banken) kenne ich zentrale Routinen, die im Falle eines Pgm Checks mit der 
entsprechenden Tragweite die Kontrolle bekommen und dann systemweit Aktionen vorsehen.

Die im Java gegebenen Möglichkeiten von throw und catch exception kommen wohl aus einer ganz anderen Logik 
und haben mit dem o.g. kaum etwas zu tun. Zumindest mir fehlt da der Zusammenhang.

>Ich glaube sowieso, daß ich in den nächsten Tagen zu dem 
>Thema noch einiges ergoogeln werden. Ich hätte echt nicht vermutet, daß 
>das Thema so tiefgründig und interessant ist. ;-)
Googlen mit "program check" ibm "Data Exception" bringt 265 Hits mit "Seiten auf Deutsch" geklickt, die aber 
(wahrscheinlich) fast alle Englisch und von IBM sind. Ohne das Hintergrundwissen fürchte ich, wird da nur sehr 
wenig zu verstehen sein. Beispiel "When an IEEE exception occurs, the program check first-level interrupt handler 
(FLIH) processes the data exception normally." Und da sind wir im Supervisor oder Nucleus, je nach System. Es gibt 
dann natürlich auch den SLIH :-)

Nochmal zusammengefasst: Für den Anwendungsentwicklers besteht keine Möglichkeit eine Exception = Programm 
Check = Programmabbruch in den höheren Sprachen wie Cobol, Pli, C, C++ zu behandeln, weil es wie an den 
beiden o.g. Beispielen zu sehen ist, keinen Sinn macht.

Ciao

Werner



php::bar PHP Wiki   -   Listenarchive