Sperren und Entsperren von Units über Queues 
Das Sperren und Entsperren von Units findet immer erst zum Zeitpunkt COMMIT WORK statt.
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.
Beispiel

Grafik: Lock-Methoden
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:
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 |