GlobalObjects
Persistente Objekte sperren

Grundsätzliches

Es kann der Zugriff auf persistente Objekte für andere Instanzen (im Mehrbenutzerbtrieb) vielfältig eingeschränkt bzw. Rechte für eine Instanz an einem persistenten Objekte eingeräumt werden (siehe auch GloEnLockMode ). Es können einzelne Objekte oder auch Gruppen von Objekten gesperrt werden. Grundsätzlich müssen die einzelnen Sperren mit der korrespondieren unlock-Methode mit gleichen Parametern wieder aufgehoben werden.

Es besteht zudem die Möglichkeit, für jedes persistente Objekt die aktuellen Sperren anderer Instanzen abzufragen.

Zu beachten
Die Sperrfunktionalität liefert auch im Einzelbenutzerbetrieb valide Ergebnisse (es kann wie im Mehrbenutzerbtrieb gesperrt und abgefragt werden). Bei der Entwicklung einer Applikation braucht also nicht extra zwischen Mehr- und Einzelbenutzerbetrieb unterschieden werden.

Ein persistentes Objekt sperren

Jedes persistentes Objekt kann in der Objektdatenbank gesperrt werden, wenn der gewünschte Sperrmodus noch nicht von einer anderen Instanz eingeschränkt wurde. Dieses kann wahlweise über GloBasePersistent::lock (...) , GloReference::lock (...) oder GloBase::lockObject (...) initiiert werden.

Eine weitere Möglichkeit besteht, indem ein GloTPointerSet, eine GloTPointerList, ein GloTOndemandSet oder eine GloTOndemandList genutzt wird. In diesen Containern kann eine Sperre gesetzt werden. Jedes Objekt, welches man in den Container einfügt wird automatisch mit der Sperre des Containers gesperrt, bzw. wieder freigegeben wenn aus dem Container entfernt.

Achtung
Eine Sperre muss immer mit den gleichen Parametern aufgehoben werden. Das kann wiederum wahlweise über GloBasePersistent::unlock (...), GloReference::unlock (...) oder GloBase::unlockObject (...) geschehen.
Ggf. werden referenzierte Objekte mitgesperrt, wenn über dass Schlüsselwort dependent (siehe auch in Tabelle Glo-Datentypen in Spalte TypInfo) eingestellt und der Sperrtiefenmodus GloEnDeepMode dementsprechend ist. Dieses gilt auch für die folgenden Ausführungen wenn mehrere Objekte gleichzeitig gesperrt werden.

Mehrere persistente Objekte sperren

Eine Gruppen von persistenten Objekten kann entweder wahlfrei über eine Liste von deren GloObjID's über GloBase::lockObjIdList (...) oder mit Übergabe einer Unterklasse von GloBaseLot an Methode GloBase::lockLot (...) bzw. den direkten Aufruf von GloBaseLot::lock(GloEnLockMode eLockMode, GloEnDeepMode eDeepMode) bzw. GloBaseLot::lock(const GloLockSpecification & rLockSpecification) gesperrt werden.

Achtung
Eine Sperre muss immer mit den gleichen Parametern aufgehoben werden. Das kann wiederum wahlweise über GloBase::unlockObjIdList (...), GloBase::unlockSet (...) oder GloBaseLot::unlock(GloEnLockMode eLockMode, GloEnDeepMode eDeepMode) bzw. GloBaseLot::unlock(const GloLockSpecification & rLockSpecification) geschehen.

Objekt auf Sperren bzw. Möglichkeiten prüfen

Ob ein persistentes Objekt mit einem bestimmten Modus gesperrt ist, kann direkt das Objekt selbst über GloBasePersistent::isLocked (...) mitteilen oder es wird die GloObjID des zu prüfenden Objekts an GloBase::isLockedObject (...) übergeben.

Ob ein persistentes Objekt gelesen, geschrieben und/oder gelöscht werden kann, erfährt man direkt vom Objekt selbst über GloBasePersistent::isPossible (...) bzw. auch mit GloObjID über GloBase::isPossible (...).

Um alle noch vorhandenen Möglichkeiten eines persistenten Objektes in der Objektdatenbank zu erfahren, stehen die Methoden GloBasePersistent::getProcessingPossibilities (...) bzw. GloBase::getProcessingPossibilities (...) zur Verfügung.