Locking: Unterschied zwischen den Versionen

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen
K (Schützte „Locking“ [edit=autoconfirmed:move=autoconfirmed])
Zeile 1: Zeile 1:
Elemente können von einem Nutzer für einen exklusiven schreibenden Zugriff gelockt werden. Informationen über den Lock-Status eines Elementes kann über das <code>lock</code>-Attribut ([[Lock]]) des [[Element]]-Objektes abgefragt werden.
+
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 <code>HandlerKeys</code>. 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.
  
Ein Lock wird mit dem Request-Parameter <code>SYS_lock</code> gesetzt. Der Wert des Parameters muß die [[ID]] des Elementes enthalte, das gelockt werden soll. Um mehrere Elemente gleichzeitig zu locken, können entweder mehrere <code>SYS_lock</code>-Parameter in einem Request gesendet werden oder die ID's werden mit Kommata getrennt in einem Parameter gesendet.
+
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.
  
Um einen Lock aufzuheben muß der Request-Parameter <code>SYS_unlock</code> mit den entsprechenden ID's der Elemente gesendet werden. Wird innerhalb einer bestimmten Zeit (standardmäßig 2 Minuten) der Lock nicht erneuert wird er ebenfalls aufbehoben.
+
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 <code>SpmlServlets</code> (beliebige URL des IES) lediglich ein weiterer Parameter via <code>POST</code> oder <code>GET</code> übergeben. Der Parameter heißt je nach Aktion
 +
 
 +
*;<code>SYS_lock</code>
 +
:Mit <code>SYS_lock=${elementID}</code> wird versucht das Element <code>${elementID}</code> durch den aktuellen Benutzer zu locken. Ist das Element bereits durch einen anderen Nutzer gelockt worden, wird ein Fehler (<code>LockException</code>) zurückgegeben, der abgefangen werden sollte.
 +
 
 +
:ERROR-Code: [[Errorcodes#SYS_ERROR_010|SYS_ERROR_010]]
 +
 
 +
*;<code>SYS_unlock</code>
 +
:Mit <code>SYS_unlock=${elementID}</code> wird veruscht das Element vom aktuellen Benutzer wieder freizugeben. Ist das Lock von einem anderen Benutzer angelegt worden, so wird ein Fehler (<code>AccessDeniedException</code>) zurückgegeben, der entsprechend abgefangen werden sollte.
 +
 
 +
:ERROR-Code: [[Errorcodes#SYS_ERROR_010|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: [[Errorcodes#SYS_FATAL_01|SYS_FATAL_012]] zurückgegeben.
 +
 
 +
Ist ein Lock gesetzt, ist der Wert von "<code>.isReadOnly</code>" des entsprechenden Elementes automatisch für die Dauer des Locks auf "<code>true</code>" gesetzt worden.
 +
 
 +
Ein Beispiel für das Setzen und Freigeben von Locks:
 +
<source lang="xml">
 +
<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>
 +
</source>
  
 
<noinclude>
 
<noinclude>

Version vom 9. Juli 2008, 10:24 Uhr

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>