Die DLM-Funktionen können auf zwei Arten ausgeführt werden:
Erstens kann der Aufruf synchron erfolgen. Das bedeutet, dass der Aufrufer erst wieder die Kontrolle erhält, wenn die Lock-Anforderung zugeteilt wurde oder eine Fehlerbedingung erkannt wurde. Die Information wird im Returncode zurückgeliefert.
Zweitens kann der Aufruf asynchron erfolgen. Das bedeutet, dass der Aufrufer wieder die Kontrolle erhält, wenn der Auftrag vom DLM akzeptiert wurde. Die Lock-Anforderung wird später zugeteilt. Der Aufrufer muss dazu eine Ereignis-Methode spezifizieren.
Es gibt zwei mögliche Methoden für die asynchrone Ereignis-Methode: der Contingency-Prozess oder die Ereignissteuerung.
Es ist möglich, dass für den gleichen Lock und zur gleichen Zeit, ein Benutzer die synchrone Methode und ein anderer Benutzer eine asynchrone Methode benutzt.
Die folgende Tabelle zeigt, welche Operanden beim LKENQ-Aufruf und beim LKCVT-Aufruf angegeben werden können, um die gewünschte Ereignis-Methode zu benutzen.
Operanden beim LKENQ-Aufruf und LKCVT-Aufruf
Ereignis-Methode | GRTEVTT | RELEVTT | |
synchrone Zuteilung | *SYNCH | *NO | |
*SYNCH | *TUCONTI | ||
*SYNCH | *TUEVENT | ||
asynchrone | Contingency | *TUCONTI | *TUCONTI |
*TUCONTI | *TUEVENT | ||
Eventing | *TUEVENT | *TUCONTI | |
*TUEVENT | *TUEVENT |
Unterstützungsübersicht:
Makro | synchron | asynchron |
LKENQ | x | x |
LKCVT | x | x |
LKDEQ | x | x |
LKCAN | x | x |
LKINF | x | - |
Ereignisse und Ereignis-Spezifikation
Der DLM bietet:
das Zuteilungs-Ereignis (GRANTID)
das Freigabe-Ereignis (RELID)Das Zuteilungs-Ereignis beendet eine asynchrone Lock-Anforderung entweder nachdem der Lock zugeteilt wurde oder wenn eine Fehlersituation erkannt wurde. Das Freigabe-Ereignis informiert den Lock-Halter, dass sein eigener zugeteilter Lock inkompatible Lock-Anforderungen von anderen Benutzern blockiert. Der Lock-Modus der blockierten Anforderung wird zusammen mit dem Ereignis übergeben. Der Lock-Halter kann seinen Lock-Schutz herabsetzen (Makro LKCVT) oder seinen Lock freigeben (Makro LKDEQ).
Gibt ein Lock-Halter den Lock frei und der nächste, neue Lock-Halter blockiert andere Lock-Anforderungen, wird das Freigabe-Ereignis (das an eine blockierende Lock-Anforderung geschickt wird) auch für die neue blockierende Lock-Anforderung generiert. Deshalb muss der Benutzer Freigabe-Ereignisse berücksichtigen, die sofort nach der Zuteilung des Locks geschickt werden können. Es ist auch möglich, dass ein Lock-Halter, der andere Lock-Anforderungen blockiert, mehr als ein Freigabe-Ereignis erhält.Überschreitet ein asynchroner DLM-Aufruf das Zeitlimit, führt dies zu einem Wartezeit-Überschreitungs-Ereignis.
Überschreitet ein Lock-Halter die angegebene Haltezeit des Locks, führt dies zu einem Haltezeit-Überschreitungs-Ereignis.
asynchrone Ereignisse und Operand USERPAR
Die asynchronen Funktionen bieten die Angabe des Operanden USERPAR an. Der Wert, den der Benutzer beim Aufruf des Makros angegeben hat, wird beim abschließenden Ereignis dieser Lock-Anforderung wieder zurückgeliefert.
Der USERPAR-Wert, der beim Makro LKENQ angegeben wurde, wird zusammen mit dem Ereignis bei einem Zuteilungs- oder Freigabe-Ereignis für diesen Lock (und diese Task) übergeben.
Der bei einem nachfolgenden LKCVT-Aufruf übergebene USERPAR-Wert wird ab diesem Zeitpunkt vom DLM für die Ereignissteuerung benutzt. Jedes folgende Zuteilungs- oder Freigabe-Ereignis wird dann mit diesem USERPAR-Wert zusammen übergeben.
Der USERPAR-Wert, der beim Makro LKCAN oder LKDEQ angegeben wurde, wird nur für das Bestätigen des Lösch-Ereignisses oder des Freigabe-Ereignisses benutzt.
Zur einfacheren Benutzung sollte der Benutzer nur einen einzigen USERPAR-Wert für alle Aufrufe verwenden, die die gleiche Lock-Anforderung betreffen.synchron
Der Benutzer erhält erst wieder die Kontrolle, wenn die Lock-Anforderung zugeteilt wurde, die Wartezeit abgelaufen ist oder eine Fehlerbedingung erkannt wurde. Die Information wird im Returncode zurückgeliefert.Contingency-Prozess
Eine Contingency-Kurzkennung kann für jedes der Ereignisse spezifiziert werden. Das Zuteilungs-Ereignis und das Freigabe-Ereignis können verschiedene Contingency-Prozesse spezifizieren. Tritt eins der beiden Ereignisse ein, wird der entsprechende Contingency-Prozess bereitgestellt. Bei dem Freigabe-Ereignis wird der blockierende Lock-Modus an den Contingency-Prozess übergeben.
Der Contingency-Prozess muss mit dem Makro ENACO erstellt worden sein. Die zurückgelieferte Contingency-Kurzkennung muss bei jedem asynchronen Aufruf angegeben werden. Der Contingency-Prozess wird unter der Kontrolle der Task des Lock-Anforderers bereitgestellt.
Die Contingency-Kurzkennung muss für den DLM verfügbar sein, sonst kann kein Ereignis zugestellt werden.
Zum Zeitpunkt, an dem der Contingency-Prozess startet, wird ihm die Information über den asynchronen Aufruf mitgeteilt. Die Information besteht aus dem Ereignis, das zur Bereitstellung des Contingency-Prozesses führte. Sie wird durch Register an den Contingency-Prozess übergeben. Das Register 3 enthält die Ereignis-Spezifikation, das Register 4 enthält die Benutzer-definierten USERPAR-Werte aus dem Makro LKENQ, LKCVT oder LKDEQ. Der Status des asynchronen Aufrufs steht im Lock-Status-Block, der beim DLM-Aufruf spezifiziert wurde.
Die Benutzung des Contingency-Prozesses benötigt die Spezifikation von zwei Contingency-Kurzkennungen. Eine für das Zuteilungs-Ereignis (GRANTID) und eins für das Freigabe-Ereignis (RELID). Es kann in beiden Fällen die gleiche Kurzkennung sein. Die Entscheidung, welches Ereignis gemeldet wird, kann mit der an den Contingency-Prozess übergebenen Information getroffen werden.Ereignissteuerung (Eventing)
Es wird empfohlen, für beide Ereignisse die selbe Ereigniskennung zu spezifizieren. Die Ereigniskennung muss mit dem Makro ENAEI erstellt worden sein. Die zurückgelieferte EIID muss bei jedem asynchronen Aufruf angegeben werden. Die Ereigniskennung muss in dem Moment verfügbar sein, in dem die asynchrone Anforderung zugeteilt wird. Anderenfalls erfolgt keine Ereigniszustellung.Der Postcode, der zusammen mit dem Ereignis übergeben wird, enthält die Ereignis-Spezifikation (DLM-Ereignis). Im zweiten Wort des Postcodes wird der Benutzer-definierte Operand USERPAR mitübergeben. Es werden auch Informationen über die asynchrone Anforderung in den Lock-Status-Block übergeben, wenn verfügbar.
Ereignissteuerung (Eventing) und Contingency-Prozess
Eine Mischung der beiden Methoden ist möglich. Siehe dazu die Tabelle „Operanden beim LKENQ-Aufruf und LKCVT-Aufruf“.