Transaktionen
Die Abfolge der Operationen in einer Transaktion wird durch den Transaktionsgraph beschrieben. Der Transaktionsgraph ist ein endlicher Automat mit einem ausgezeichneten Startzustand und einem oder mehreren finalen Zuständen. Die Zustände werden mit Nummern von 1 bis 199 bezeichnet. Dabei gilt folgendes: Der Startzustand hat die Nummer 1, finale Zustände haben Nummern von 100 bis 199, alle anderen Zustände haben Nummern zwischen 2 und 99. Übergänge zwischen den einzelnen Zuständen erfolgen durch Operationen oder gegebenenfalls durch andere Ereignisse auf dem Server.
Wird eine Transaktion zwischen Client und Server durch entsprechendes Durchführen von Operationen realisiert, so wird dadurch eine Instanz der Transaktion konstituiert. Die Identität der Instanz wird gegeben durch die Identitäten von Käufer und Verkäufer, sowie eine vom Server generierte Zeichenkette, die TransactionID (vgl. RequestType, ResponseType). Zu einer Instanz gehört auch der Transaktionskontext: er umfasst die genannten Kennzeichner, den gegenwärtigen Zustand der Transaktion und mögliche weitere Daten, die durch die Operationen dieser Transaktionsinstanz modifiziert werden.
Falls der Server die Operationen GetStatus und Rollback unterstützt, kann ein Client zu jeder Transaktionsinstanz, an der er beteiligt ist, beim Server mittels der Operation GetStatus, den gegenwärtigen Zustand der Transaktion abfragen, und er kann die Transaktion mittels der Operation Rollback abbrechen, sofern sich die Transaktionsinstanz in einem Zustand befindet, der ein Rollback erlaubt. Ein finaler Zustand erlaubt grundsätzlich kein Rollback, beim Startzustand ist ein Rollback jederzeit möglich und völlig ohne Wirkung. Per Konvention ist bei Zuständen mit Nummer 2 bis 49 ein Rollback möglich, bei Nummer 50 bis 99 ist dies nicht möglich.
Es hat sich gezeigt, dass Clients typischerweise weder von der Operation GetStatus noch von der Operation Rollback Gebrauch machen. Daher sind diese Operationen seit veloconnect 1.3 optional.
Regel: Lebenszyklus einer Transaktionsinstanz
Eine Transaktionsinstanz durchläuft folgenden Lebenszyklus: Durch Ausführen einer der Operationen, die im Startzustand anwendbar sind, wird die Transaktionsinstanz gegebenfalls erzeugt. Sobald sich die Transaktionsinstanz in einem finalen Zustand befindet, steht der Transaktionskontext für eine neue Transaktionsinstanz zur Verfügung. Die Transaktionsinstanz existiert allerdings noch weiter, bis eines der folgenden Ereignisse auftritt:
der Transaktionskontext wird für eine neue Transaktionsinstanz benötigt,
eine implementierungsabhängige Zeitspanne, die mindestens 300 Sekunden beträgt, ist verstrichen.
Unabhängig vom Zustand kann der Server nach frühestens 2 Stunden nach der letzten durchgeführten Operation einen Rollback ausführen und die Transaktionsinstanz löschen.
Der Server sollte nicht davon ausgehen, dass der Client alle begonnenen Transaktionen zu Ende führt oder ein Rollback ausführt.