Lade...
 

Transaktionen

Transaktionen

InstantView® verwaltet Datenbank-Transaktionen automatisch.
Der InstantView®-Interpreter versucht, eine Transaktion so spät wie möglich zu beginnen: Die erste Anweisung, die nur innerhalb einer Transaktion operieren kann, startet die Datenbank-Transaktion.
Am Ende der Anweisungsfolge wird sie automatisch beendet (commit), und damit werden veränderte bzw. neu erzeugte Objekte in die Datenbank geschrieben.
Tritt ein Fehler auf, so wird die Transaktion abgebrochen (abort). Veränderte Objekt verbleiben im (alten) Zustand vor der Änderung, neu erzeugte Objekte existieren nicht mehr. 
InstantView® reflektiert diese Rücknahme von Veränderungen in der Datenbank indem parallel zu den Datenbank-Transaktionen logische Transaktionen verwaltet werden.
So wird zum Beispiel verhindert, dass eine InstantView® -Variable auf ein persistentes Objekt verweist, das gar nicht mehr existiert.
Die Konsistenz zwischen Datenbank und InstantView® wird erreicht, indem bei Transaktions-Abbruch

  • alle InstantView®-Variablen auf den Wert zu Transaktionsbeginn zurückgesetzt werden,
  • transiente Collections wieder genau die Objekte als Elemente enthalten, auf die sie zu Beginn der Transaktion verwiesen haben,
  • die innerhalb der Transaktion durchgeführten Kommandos SetLayer, SetDomain und SetPattern auf den Wert zu Transaktionsbeginn zurückgesetzt werden,
  • die folgenden mittels SystemObject zu setzenden System-Parameter - wenn sie innerhalb einer Transaktion verändert wurden - bei Transaktionsabbruch zurückgesetzt werden:

     

    Parameter SystemObject Methode
    Gültigkeits-Datum SetValidityDate
    Check-Mask für Gültigkeit (der Objekte) SetCheckMask
    Sitzungs-Datum (session date) SetSessionDate
    Timestamp bei Update-Operationen ein- bzw. ausschalten SetTimeStamp
    Obergrenze für ein Datum - CX_DATE SetDateLimit
    Voreinstellung Maßeinheit für CX_VALUE SetDefaultUnit
    Voreinstellung Währung SetDefaultCurrency
    aktuelles Locale SetLocaleByName, SetLocaleByObject
    Message für Variablen-Abfrage bei CX_FORMULA (bind message) SetBindMessage
    Umrechungstabellen für Einheiten (bzw. Währungen) SetRate, RegisterRate, DeregisterRate, AddOverwriteRate
  • Veränderungen des PlugSpace zurückgenommen werden  - PlugSpace, PlugSpacePush, PlugSpacePop
  • der eingestellte Sprach-Index zurückgesetzt wird  - Language
  • innerhalb der gerade abgebrochenen Transaktion geöffnete Windows wieder geschlossen werden,
  • die Windowobjekte ObjectList, ObjectComboBox, ListView und ObjectTree auf den Zustand zu Transaktionsbeginn zurückgesetzt werden (sofern sie innerhalb der Transaktion neue oder andere persistente Objekt dargestellt haben),
  • innerhalb der Transaktion initialisierte Module als nicht initialisiert betrachtet werden. Bei der nächsten Message, die sie empfangen, wird INITIALIZE erneut implizit aufgerufen.

Achtung: Veränderungen transienter Objekte werden nicht zurückgenommen!
Beispiele für das Verhalten der obengenannten Elemente des ClassiX®-Systems finden Sie hier.   

Zur Reduzierung von Locking-Konflikten kann es sinnvoll sein, Transaktionen explizit zu steuern (der InstantView®-Interpreter kennt den am spätesten möglichen Zeitpunkt zum Start einer Transaktion, aber nicht den frühsten Zeitpunkt zum Beenden!).

Hinweis:
- Wenn eine Transaktion explizit mit EndTXN / BeginTXN gesteuert wird, betrifft das auch das logische Transaktionshandling von InstantView®.
  Für einen Transaktionswechsel mit dem Zweck, Address Space freizugeben, soll die Methode FreeAddressSpace des Object-Managers benutzt werden!

- Transaktionswechsel ist nicht überall erlaubt - siehe Anweisung iterate - und wird dann ignoriert. Im Log-File erscheint eine Warnung.

Außerdem kann man  Datenbanken im MVCC-Modus (Multi Version Concurrency Control - siehe ObjectStore Dokumentation) öffnen: Locking-Konflikte werden weitgehend vermieden, da die im MVCC-Modus gelesenen Objekte von anderen Clients geändert werden können. Im MVCC-Modus sieht ein Client nicht immer die aktuellste Version eines Objekts, alle Objekte aber in einem Zustand, der in sich konsistent ist.

Statements:

Hinweis: Das ClassiX®-System führt Selbst-Tests durch, um die oben beschriebenen Automatismen zu überwachen. Die Fehler, die dabei entdeckt werden können, sind in dieser Tabelle zusammengefasst.

 

InstantView Scriptsprache