Hallo, Werner.
Klar haben wir die Errorsys komplett umgebaut. Das ist für uns ein zentrales Werkzeug zur Sicherung der Softwarequalität auch in der Auslieferung. Wir reagieren darin aber auch auf bekannte Fehler, auf äußere Ursachen usw. usf. Das ist ziemlich umfangreich und ein wichtiges Tool.
Gefährliche Geschichte für Endlos-Schleifen oder Fatals? Oder macht ihr das über die Eigenschaften im Dienst, also ein Sprung in die errorsys führt i. d. R. zum quit und Windows startet den Dienst dann neu?
Ob und wie oft und unter welchen Bedingungen erneut versucht wird, etwas zu tun, hängt von der Situation ab. Und natürlich wird nicht beliebig oft wiederholt, sondern ein, zwei, drei Male - je nachdem. Wenn es dann nicht geht, teilt man beispielsweise dem Client mit, dass er es später noch einmal versuchen soll. Und es werden intern Nachrichten ausgelöst. Aber, nein, wir springen da nicht in die Errorsys - in der landet der Dienst praktisch nie. Die Sequenz (BEGIN SEQUENCE ...) trackt und protokolliert den Laufzeitfehler (wertet das Fehlerobjekt und einige anderen Daten aus) und beendet sich einfach. Dann wird sie ggf. wiederholt. In der Errorsys kommt man so überhaupt nicht an. Wenn ich z.B. im Server eine Session habe, die eine Sitzung repräsentiert, ist das gekapselt. Notfalls endet diese Session, und der Client muss es abermals versuchen - das ist ja keine Seltenheit im Netz, auch heuzutage noch. Und wenn er abermals reinkommt, wird erneut eine Session für ihn eröffnet, das alte Threadobjekt ist weg, der Fehler ist protokolliert. Und wenn der Client dann mehrfach nicht durchkommt, muss irgendwer nachsehen, welcher Fehler da warum immer wieder auftritt. Aber der Dienst läuft und kommt nicht in die Errorsys. Nie*. Das würde ihn killen.
Es ist auch für normale Applikationen wichtig, sich mit Sequenzen zu befassen. Manchmal sind Laufzeitfehler wahrscheinlich, etwa bei sehr umfangreichen automatisierten Prozessen, oder wenn man mit Drittprodukten redet, also beispielsweise Excel zu steuern versucht. Dann bettet man den ganzen Prozess in eine Sequenz und beendet die im Fehlerfall einfach. Ggf. sagt man den Benutzern, dass etwas schiefgelaufen ist und sie sich mal Excel anschauen sollten oder so. Aber das Programm läuft weiter. In Sequenzen führten Laufzeitfehler - je nach Programmierung - zum Abbruch der Sequenz und erlauben dann die Auswertung des Fehlerobjekts. Aber sie rufen in dieser Konstellation nicht die Errorsys auf.
*außer natürlich bei Zero Devides und Fehlern, die Retries ermöglichen, außerdem haben wir eine Reparaturautomatik für korrupte Indexe in der Errorsys verbaut, da retourniert sie dann entsprechend