Locking
Mit Locking wird ein Mechanismus beschrieben, mit dem exklusiver Zugriff auf ein Element realisiert wird. Hierbei handelt es sich um eine serverseitige Funktionalität, die das Verändern eines gelockten Elemets verhindert. Der IES unterstützt das Locking von Elementen jeden Typs. Gesteuert wird der Locking-Service über entsprechende HandlerKeys
. Der Applikationsentwickler kann entscheiden, ob und wann ein Lock gesetzt bzw. entfernt wird. Es können parallel mehrere Locks pro Nutzer angelegt werden. Der Locking-Status eines Elementes lässt sich über SPML abfragen und auswerten. Je nach Umsetzung kann so auch der lesende Zugriff auf Elemente innerhalb einer Applikation verhindert werden.
Praktische Verwendung findet das Locking i.d.R. bei Artikeln um paralelles Bearbeiten der selben Informationen zu verhindern. In InfoSite5 wird ein solcher Artikel grau hervorgehoben und mit einem Tooltip, der Informationen zum aktuellen Bearbeiter angibt, versehen. Außerdem sind die Buttons zum Speichern deaktiviert.
Der Locking-Dienst steuert über einen Timeout-Mechanismus, daß Locks auf Elemente automatisch, nach einer konfigurierten Zeit in der keine Aktionen vorgenommen wurden (Standardwert ist 2 Min.), wieder zurückgesetzt werden. So kann sichergestellt werden, daß die Arbeiten am System in jedem Fall irgendwann fortgesetzt werden können.
Setzen und Freigeben von Locks
Um ein Lock auf ein Element (z.B. Artikel oder Template) zu setzen, wird beim Aufruf eines Handlers bzw. des SpmlServlets
(beliebige URL des IES) lediglich ein weiterer Parameter via POST
oder GET
übergeben. Der Parameter heißt je nach Aktion
SYS_lock
- Mit
SYS_lock=${elementID}
wird versucht das Element${elementID}
durch den aktuellen Benutzer zu locken. Ist das Element bereits durch einen anderen Nutzer gelockt worden, wird ein Fehler (LockException
) zurückgegeben, der abgefangen werden sollte.
- ERROR-Code: SYS-ERROR-010
SYS_unlock
- Mit
SYS_unlock=${elementID}
wird veruscht das Element vom aktuellen Benutzer wieder freizugeben. Ist das Lock von einem anderen Benutzer angelegt worden, so wird ein Fehler (AccessDeniedException
) zurückgegeben, der entsprechend abgefangen werden sollte.
- ERROR-Code: SYS-ERROR-010
Sollen mehre Elemente auf einmal gelockt werden, so kann auch eine kommaseparierte Liste von ID's übergeben werden. Tritt beim Locken bzw. Freigeben ein Fehler mit den übergebenen ID's auf, so wird ein Fehler mit dem ERROR-Code: SYS-FATAL-012 zurückgegeben.
Ist ein Lock gesetzt, ist der Wert von ".isReadOnly
" des entsprechenden Elementes automatisch für die Dauer des Locks auf "true
" gesetzt worden.
Ein Beispiel für das Setzen und Freigeben von Locks:
<a href="<sp:url uri="/"/>SYS_lock=<sp:print name="currentElement"/>">lock setzen</a>
<a href="<sp:url uri="/"/>SYS_unlock=<sp:print name="currentElement"/>">lock freigeben</a>