GlobalObjects
Lade ...
Suche ...
Keine Treffer
glo::LockManager Klassenreferenz

Objekte dieser Klasse überwachen den Sperrzustand von Objekten. Mehr ...

#include <GloLockManager.h>

Klassen

class  LockedObject
 Objekte können gesperrt werden. Objekte dieser Klasse repräsentiert ein vom Kommunikatoren gesperrtes Objekt, mit ggf. mit gesperrten Objekten wie z.B. eingebettete Objekte. Mehr ...
 

Öffentliche Methoden

 LockManager (Manager *pDBManager)
 
virtual ~LockManager ()
 
void deleteAllLocks (Communicator *pCommunicator, const std::string &rsSchemaName)
 
void getNotAllowedReadObjects (std::list< ObjID > &rReadLockObjList, const TransactionOwner &rCommunicatorWithTreadID) const
 
LockPossibleSpecification getProcessingPossibilities (const ObjID &rObjID, std::map< ObjID, Record *, std::less< ObjID > > &rDependObjects, const TransactionOwner &rCommunicatorWithTreadID)
 
bool isPossible (const ObjID &rObjID, std::map< ObjID, Record *, std::less< ObjID > > &rDependObjects, const TransactionOwner &rCommunicatorWithTreadID, bool bRead, bool bWrite, bool bDelete)
 
int lockObject (const ObjID &rObjID, std::map< ObjID, Record *, std::less< ObjID > > &rDependObjects, const TransactionOwner &rCommunicatorWithTreadID, const std::string &rsSchemaName, EnLockMode eLockMode, EnDeepMode eDeepMode, bool bSimulate=false)
 
int unlockObject (const ObjID &rObjID, const TransactionOwner &rCommunicatorWithTreadID, const std::string &rsSchemaName, EnLockMode eLockMode, EnDeepMode eDeepMode, bool bSimulate=false)
 

Geschützte Methoden

 LockManager ()
 

Private Methoden

 LockManager (const LockManager &)
 
LockManageroperator= (const LockManager &)
 
void sendNotify (TdWatchNotifyMode nWatchNotifyMode, const ObjID &rObjID, Communicator *pCommunicator, const std::string &rsSchemaName)
 

Private Attribute

std::unordered_map< unsigned long, LockedObject * > m_LockedObjectMap
 
Managerm_pDBManager
 

Ausführliche Beschreibung

Objekte dieser Klasse überwachen den Sperrzustand von Objekten.

Es werden keine Sperrzustände in den Tabellen abgelegt. Der Manager muss hier Objekte zum sperren anmelden (mit dem sperrenden bzw. freigebenden Kommunikator) und immer vor Aktionen anfragen, ob diese erlaubt sind. Sperrzustände von einzelnen Objekten können erfragt werden.

Da ein Objekt z.B. mit seinen abhängigen Objekten gesperrt werden können soll, werden Objekte mit ihren abhängigen Objekten zum sperren übergeben. Es wird die Sperrmöglichkeit jedes Objektes geprüft und wenn möglich werden alle Objekte mit übergebenen Sperrmodus gesperrt, oder keines.

Für jeden Sperrmodus gibt es eine Liste, in der die Liste der abhängigen Objekte mit dem Sperrtiefenmodus abgelegt wird.

Wenn ein Objekt mit einem bestimmten Sperrmodus und Sperrtiefenmodus freigegeben wird, wird die Liste aus der Sperrmodus-Liste genommen und die evtl. enthaltenen Objekte auch mit gleichem Sperrmodus freigegeben.

Das ist Notwendig, weil z.B. ein Objekt 'A' mit einem referenzierten Objekt 'B' gesperrt werden kann. Die Anwendung kann nun z.B. das referenzierte Objekt 'B' in Objekt 'A' dereferenzieren. Bei einer Freigabe von Objekt 'A' ist das früher referenzierte Objekt 'B' nicht mehr mit Objekt A verbunden und würde demnach auch nicht mehr freigegeben werden.

In folgender Tabelle sind die einzelnen Sperrmodi mit ihren Auswirkungen aufgelistet.

Es gelten folgende Abkürzungen für die Sperrmodi:

Es gelten folgende Abkürzungen für Aktionen:

  • R -> Lesen
  • W -> Schreiben
  • D -> Löschen
Sperrmodi und deren Auswirkungen
Sperrende InstanzAndere Instanzen
SperrmodusGarantie zu tun...Schutz vor...Elaubte SperrmodiMöglichkeitenRestriktionen
NNkeinekeinenalleallekeine
RDRDRD, RW, WW, TWR, WD
RWRD, WRD, RWRD, W
WWR, WD, WRDRD, W
DWR, W, DD, WkeineRD, W
DRR, W, DD, W, RkeinekeineD, R, W
EXR, W, DD, W, RkeinekeineD, R, W
TWR, WD, WRDRD, W
TDR, W, DD, WkeineRD, W



Die Struktur vom LockManager sieht so aus:

Autor
Helmut Jakoby

Beschreibung der Konstruktoren und Destruktoren

◆ LockManager() [1/3]

glo::LockManager::LockManager ( )
protected

Der Standard-Konstruktor steht nicht zur Verfügung.

◆ LockManager() [2/3]

glo::LockManager::LockManager ( Manager * pDBManager)

Konstruktor mit Parameterübergabe.

Parameter
[in]pDBManagerRückreferenz auf den besitzenden Manager, darf wärend der Lebensdauer dieses Objektes nicht aus dem Speicher entfernt werden.

◆ ~LockManager()

virtual glo::LockManager::~LockManager ( )
virtual

Destruktor, es wird aufgeräumt.

◆ LockManager() [3/3]

glo::LockManager::LockManager ( const LockManager & )
private

Der Copy-Konstruktor steht nicht zur Verfügung.

Dokumentation der Elementfunktionen

◆ deleteAllLocks()

void glo::LockManager::deleteAllLocks ( Communicator * pCommunicator,
const std::string & rsSchemaName )

Es werden alle Sperren des übergebenen Kommunikator entfernt.

Parameter
[in]pCommunicatorDer Kommunikator.
[in]rsSchemaNameDer Schemaname wird für das Benachrichtigen gebraucht.

◆ getNotAllowedReadObjects()

void glo::LockManager::getNotAllowedReadObjects ( std::list< ObjID > & rReadLockObjList,
const TransactionOwner & rCommunicatorWithTreadID ) const

Liefert für übergebenen Kommunikator alle Objekt-IDs der lesegesperrten Objekte.

Parameter
[in,out]rReadLockObjListDie Objekt-IDs der lesegesperrten Objekte.
[in]rCommunicatorWithTreadIDDer Kommunikator mit Thread-ID.

◆ getProcessingPossibilities()

LockPossibleSpecification glo::LockManager::getProcessingPossibilities ( const ObjID & rObjID,
std::map< ObjID, Record *, std::less< ObjID > > & rDependObjects,
const TransactionOwner & rCommunicatorWithTreadID )

Liefert die möglichen Aktion mit einem Objekt für einen Kommunikator.

Parameter
[in]rObjIDDie zu prüfende Objekt-ID.
[in]rDependObjectsDie Map von Datensätze der mitzuprüfenden Objekte.
[in]rCommunicatorWithTreadIDDer Kommunikator mit Thread-ID.
Rückgabe
Die Möglichkeiten in einer LockPossibleSpecification.

◆ isPossible()

bool glo::LockManager::isPossible ( const ObjID & rObjID,
std::map< ObjID, Record *, std::less< ObjID > > & rDependObjects,
const TransactionOwner & rCommunicatorWithTreadID,
bool bRead,
bool bWrite,
bool bDelete )

Prüft, ob der übergebenen Kommunikator das Objekt mit übergebener Objekt-ID lesen, schreiben und/oder löschen darf.

Parameter
[in]rObjIDDie zu prüfende Objekt-ID.
[in]rDependObjectsDie Map von Datensätze der mitzuprüfenden Objekte.
[in]rCommunicatorWithTreadIDDer Kommunikator mit Thread-ID.
[in]bReadWenn true, wird auf 'lesen' geprüft.
[in]bWriteWenn true, wird auf 'schreiben' geprüft.
[in]bDeleteWenn true, wird auf 'löschen' geprüft.
Rückgabe
Wenn true, ist bzw. sind die true gesetzten Modi für den Kommunikator möglich.

◆ lockObject()

int glo::LockManager::lockObject ( const ObjID & rObjID,
std::map< ObjID, Record *, std::less< ObjID > > & rDependObjects,
const TransactionOwner & rCommunicatorWithTreadID,
const std::string & rsSchemaName,
EnLockMode eLockMode,
EnDeepMode eDeepMode,
bool bSimulate = false )

Sperrt ein Objekt mit übergebener Objekt-ID für einen Kommunikators.

Parameter
[in]rObjIDDie Objekt-ID des zu sperrenden Objektes.
[in]rDependObjectsDie Map von Datensätze der mitzusperrenden Objekte.
[in]rCommunicatorWithTreadIDDer sperrende Kommunikator mit Thread-ID.
[in]rsSchemaNameDer Schemaname wird für das Benachrichtigen gebraucht.
[in]eLockModeDer Sperrmodus.
[in]eDeepModeDer Sperrtiefenmodus.
[in]bSimulateWenn true, wird nur simuliert, also kein Wert gesetzt, aber ein valides Ergebnis bzw.ein Fehler geliefert.
Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ operator=()

LockManager & glo::LockManager::operator= ( const LockManager & )
private

Der Zuweisungsoperator steht nicht zur Verfügung.

◆ sendNotify()

void glo::LockManager::sendNotify ( TdWatchNotifyMode nWatchNotifyMode,
const ObjID & rObjID,
Communicator * pCommunicator,
const std::string & rsSchemaName )
private

Initiiert über seinen m_pDBManager ein Notify.

Parameter
[in]nWatchNotifyModeDer Überwachungsmodus.
[in]rObjIDDie Objekt-ID des betroffenen Objektzs.
[in]pCommunicatorDer Kommunikator.
[in]rsSchemaNameDer Schemaname wird für das Benachrichtigen gebraucht.

◆ unlockObject()

int glo::LockManager::unlockObject ( const ObjID & rObjID,
const TransactionOwner & rCommunicatorWithTreadID,
const std::string & rsSchemaName,
EnLockMode eLockMode,
EnDeepMode eDeepMode,
bool bSimulate = false )

Gibt das von einem Kommunikator gesperrte Objekt mit übergebener Objekt-ID frei.

Parameter
[in]rObjIDDie Objekt-ID des freizugebenden Objektes.
[in]rCommunicatorWithTreadIDDer freigebende Kommunikator mit Thread-ID.
[in]rsSchemaNameDer Schemaname wird für das Benachrichtigen gebraucht.
[in]eLockModeDer Sperrmodus.
[in]eDeepModeDer Sperrtiefenmodus.
[in]bSimulateWenn true, wird nur simuliert, also kein Wert gesetzt, aber ein valides Ergebnis bzw.ein Fehler geliefert.
Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.

Dokumentation der Datenelemente

◆ m_LockedObjectMap

std::unordered_map< unsigned long, LockedObject * > glo::LockManager::m_LockedObjectMap
private

Liste der gesperrten Objekte.

◆ m_pDBManager

Manager* glo::LockManager::m_pDBManager
private

Rückreferenz auf den besitzenden Manager.


Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei: