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 Elements verhindert. Der IES unterstützt das Locking von Elementen unabhängig vom Typ. 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, dass Locks auf Elemente, nach einer konfigurierten Zeit in der keine Aktionen vorgenommen wurden (Standardwert ist 2 Min.), automatisch wieder zurückgesetzt werden. So kann sichergestellt werden, daS 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, wird ein Fehler (LockException
) zurückgegeben, der abgefangen werden sollte.
- ERROR-Code: SYS-E010
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-E010
Ist es nötig mehre Elemente auf einmal zu locken, so kann auch eine kommaseparierte Liste von IDs übergeben werden. Tritt beim Locken bzw. Freigeben ein Fehler mit den übergebenen IDs auf, wird ein Fehler mit dem ERROR-Code: SYS-F012 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>