Sperren und Entsperren von Units über
Queues
Verwendung
Das Sperren und Entsperren von Units findet immer erst
zum Zeitpunkt COMMIT WORK statt.
Vorgehensweise
Mit Hilfe der Klassen CL_QRFC_LOCK_INBOUND,
CL_QRFC_LOCK_OUTBOUND und CL_QRFC_LOCK_NOSEND kann die Ausführung von Units
über eine Queue-Sperre verhindert werden bzw. eine Queue-Sperre zurückgenommen
werden.
Grafik: Lock-Methoden

Ergebnis
-
Die Methode LOCK_QUEUE_FROM_TOP sperrt die erste Unit am Anfang der
angegeben Queue für eine Destination. Damit ist es möglich, einen Queue
nachträglich zu sperren. Wenn keine Unit vorhanden ist, wird automatisch eine
leere Unit erzeugt, um die Sperre abzubilden.
-
Die Methode LOCK_QUEUE_FROM_CURRENT_POS sperrt die Ausführung der
nächsten Unit, die in die angegebene Queue für eine Destination geschrieben
wird. Damit ist es möglich, eine Queue präventiv zu Sperren. Es wird eine
leere Unit erzeugt, um die Sperre abzubilden.
-
Alle Queue-Sperren werden erst beim nächsten COMMIT WORK aktiv. Sollten
innerhalb einer Anwendungs-LUW sowohl Unit-Spperren als auch Queue-Sperren
erzeugt werden, so werden immer zuerst die Queue-Sperren gesetzt und dann die
Unit-Sperren den entsprechenden Queues zugeordnet. Dazu betrachte man das
folgende Beispiel:

Operation auf der Queue
|
Inhalt der Queue
|
Erzeugung der Unit 1
|
|
Erzeugung der Unit 2
|
|
COMMIT WORK
|
Unit 1 – Unit 2
|
Erzeugung der Unit 3
|
|
Setzen der Sperre A an die aktuelle Position
|
|
COMMIT WORK
|
Unit 1 – Unit 2
– Sperre A – Unit 3
|
Setzen der Sperre B an den Anfang
|
|
Verarbeitung der Unit 1 durch den Scheduler
|
Unit 2 – Sperre A – Unit 3
|
COMMIT WORK
|
Sperre B –
Unit 2 – Sperre A – Unit 3
|