Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Programmierregeln für Dialoge mit Functional Unit Commit

Bevor die Regeln aufgeführt werden, die ein Vorgang zu beachten hat, der an einer verteilten Transaktion beteiligt ist, sollen zunächst einige Begriffe erläutert werden.

Begriffsklärungen

Datentransferphase

Ein Vorgang befindet sich in der Datentransferphase, solange er weder zum Transaktionsende aufgefordert wurde noch seinerseits seine Auftragnehmer zum Transaktionsende aufgefordert hat.

Senderecht

Während der Datentransferphase existiert auf jedem Dialog ein Senderecht, das zu einer Zeit genau einem der beiden Kommunikationspartner zugeordnet ist.
Der Vorgang, der das Senderecht auf einem Dialog besitzt, darf mit MPUT eine Nachricht an den Partner-Vorgang senden. Mit dem Senden einer Nachricht wechselt das Senderecht zu dem Kommunikationspartner, es sei denn, er hat dies explizit mit einem CTRL-Aufruf unterbunden (CTRL PR oder PE und KCNORPLY=Y).

Ein Vorgang kann in einem Verarbeitungsschritt entweder das Senderecht für den Dialog mit dem Auftraggeber abgeben, oder aber ein oder mehrere Senderechte für Dialoge zu Auftragnehmern.

Senderecht zum Transaktionsende

Das Senderecht zum Transaktionsende regelt, welcher der beiden Kommunikationspartner nach Abschluss der laufenden Transaktion das Senderecht besitzt.
Normalerweise liegt das Senderecht zum Transaktionsende bei dem Auftraggeber-Vorgang. Dieser kann dieses Senderecht jedoch mit einer MPUT-Nachricht und anschließendem PEND RE an den Auftragnehmer-Vorgang abgeben.
Dabei ist zu beachten, dass ein Vorgang zum Transaktionsende das Senderecht auf höchstens einem Dialog abgeben darf.

Transaktionsende

Ein Vorgang darf Transaktionsende anfordern, wenn ihn sein Auftraggeber-Vorgang dazu aufgefordert hat und er das Senderecht zum Transaktionsende auf höchstens einem Dialog nicht besitzt.

Vorgangsende

Ein Vorgang darf Vorgangsende anfordern, wenn er von seinem Auftraggeber-Vorgang dazu aufgefordert wurde und er im laufenden Verarbeitungsschritt keine Nachricht an einen Auftragnehmer gesendet hat.

Weitere Programmierregeln

  • In der Datentransferphase besitzt der lokale Vorgang während eines Teilprogrammlaufs das Senderecht auf allen Dialogen.

  • Ein Vorgang kann in einem Verarbeitungsschritt nicht gleichzeitig Nachrichten an seinen Auftraggeber und an Auftragnehmer senden.

  • Bleibt die Transaktion zum Ende des Verarbeitungsschritts offen, dann kann der lokale Vorgang in diesem Verarbeitungsschritt an mehrere Auftragnehmer gleichzeitig Nachrichten senden.

  • Ein Vorgang darf das Senderecht zum Transaktionsende an höchstens einen Partner abgeben. Folgerungen aus dieser Regel sind:

    • In einem Verarbeitungsschritt, der mit einer Transaktionsendeanforderung abgeschlossen wird, darf an höchstens einen Partner eine Nachricht gesendet werden.

    • Ein Zwischenknoten darf auf einem Dialog zu einem Auftragnehmer nur dann das Senderecht zum Transaktionsende abgeben, wenn er auf dem Dialog mit dem Auftraggeber das Senderecht zum Transaktionsende besitzt.

  • Ein Auftragnehmer darf erst dann Transaktionsende anfordern, wenn ihn sein Auftraggeber dazu aufgefordert hat.

Regeln zur Verwendung der verschiedenen PEND-Varianten

  • Ein PEND KP ist möglich, wenn in dem Verarbeitungsschritt nur Nachrichten an Partner gesendet wurden, die noch kein Transaktionsende angefordert haben.

  • Ein PEND RE ist möglich, wenn in dem Verarbeitungsschritt

    • an höchstens einen Partner eine Nachricht gesendet wurde und

    • an diesen Partner nicht gleichzeitig eine Aufforderung zu Transaktions- oder Dialogende gesendet wurde und

    • der lokale Vorgang bereits eine Aufforderung zum Transaktionsende erhalten hat, oder der lokale Vorgang selbst die Wurzel im Transaktionsbaum ist.

  • Ein PEND SP ist möglich, wenn in dem Verarbeitungsschritt

    • der lokale Vorgang bereits eine Aufforderung zum Transaktionsende erhalten hat, oder der lokale Vorgang selbst die Wurzel im Transaktionsbaum ist und

    • der lokale Vorgang für den Dialog mit dem Auftraggeber das Senderecht zum Transaktionsende besitzt und

    • keine Nachricht an einen Auftragnehmer gesendet wurde und

    • keine Nachricht an den Client gesendet wurde.

  • Ein PEND FI ist möglich, wenn in dem Verarbeitungsschritt

    • der lokale Vorgang bereits eine Aufforderung zum Dialogende erhalten hat, oder der lokale Vorgang selbst die Wurzel im Transaktionsbaum ist und

    • kein Auftragnehmer existiert, der (mittels CTRL PR) zum Transaktionsende, aber nicht zum Vorgangsende aufgefordert wurde.

    • keine Nachricht an einen Auftragnehmer gesendet wurde.

Regeln zur Verwendung von PGWT-Varianten

  • Ein PGWT KP ist möglich, wenn ein PEND KP erlaubt ist.

  • Ein PGWT CM ist möglich

    • bei Ausgabe einer Dialog-Nachricht immer dann, wenn ein PEND RE zulässig ist.

    • ohne Dialog-Nachricht immer dann, wenn ein PEND SP zulässig ist.

  • PGWT RB muss verwendet werden, wenn eine Transaktion, bei der der letzte Sicherungspunkt mit PGWT CM gesetzt wurde, zurückgesetzt werden soll, ohne dass der OSI TP-Dialog beendet wird.

Programmierempfehlung

Bei der verteilten Transaktionsbearbeitung über das OSI TP-Protokoll wird eine verteilte Transaktion am günstigsten auf folgende Weise beendet.

Wenn der oberste Auftraggeber im Transaktionsbaum die verteilte Transaktion beenden möchte, richtet er an jeden seiner Auftragnehmer einen CTRL PR und einen MPUT-Aufruf und beendet anschließend den Verarbeitungsschritt mit PEND/PGWT KP. Nachdem die Antworten von seinen Auftragnehmern eingetroffen sind, schließt der oberste Auftraggeber die Transaktion ab.

Erhält ein Zwischenknoten im Transaktionsbaum die Aufforderung zum Transaktionsende, dann richtet er seinerseits an jeden seiner Auftragnehmer einen CTRL PR und einen MPUT-Aufruf und beendet anschließend den Verarbeitungsschritt mit PEND/PGWT KP. Nachdem die Antworten von seinen Auftragnehmern eingetroffen sind, sendet der Zwischenknoten eine Antwort an seinen Auftraggeber und beendet den Dialog-Schritt und die Transaktion.

Erhält ein unterster Auftragnehmer im Transaktionsbaum die Aufforderung zum Transaktionsende, dann sendet er eine Antwort an seinen Auftraggeber und beendet den Dialog-Schritt und die Transaktion.

Wird diese Regel befolgt, dann beginnt die nächste Transaktion jeweils mit einem Teilprogrammlauf im obersten Auftraggeber-Vorgang.