GlobalObjects
Lade ...
Suche ...
Keine Treffer
GloLockManager.h
gehe zur Dokumentation dieser Datei
1#ifndef INC_GLOLOCKMANAGER_H
2#define INC_GLOLOCKMANAGER_H
3//-----------------------------------------------------------------------------
41//-----------------------------------------------------------------------------
42#include <list>
43#include <map>
44#include <stack>
45#include "GloTypes.h"
46#include "GloManager.h"
47#include "GloObjID.h"
48//-----------------------------------------------------------------------------
49namespace glo
50{
51 //---------------------------------------------------------------------------
52 /* Forwards */
53 class Communicator;
54 class Manager;
55 class Record;
56 //---------------------------------------------------------------------------
57 // doxygen -> warning: unable to resolve reference to 'GLO_REF_DEPENDENT' for \ref command
58 // Is a reference to the GlobalObjects documentation.
59 //---------------------------------------------------------------------------
189 // English
190 // |==========================================================================|
191 // | Obj1 | Obj2 |
192 // |--------------------------------------------------------------------------|
193 // |LOCK |Guarantee|Protection| Allowed LOCKs | Possibilities| Restrictions |
194 // |==========================================================================|
195 // | NN | none | none | all | all | none |
196 // | RD | R | D | RD, RW, WW, TW | R, W | D |
197 // | RW | R | D, W | RD, RW | R | D, W |
198 // | WW | R, W | D, W | RD | R | D, W |
199 // | DW | R, W, D | D, W | none | R | D, W |
200 // | DR | R, W, D | D, W, R | none | none | D, W, R |
201 // | EX | R, W, D | D, W, R | none | none | D, W, R |
202 // | TW | R, W | D, W | RD | R | D, W |
203 // | TD | R, W, D | D, W | none | R | D, W |
204 // |==========================================================================|
205
206 // German
207 // |==========================================================================|
208 // | Obj1 | Obj2 |
209 // |--------------------------------------------------------------------------|
210 // |LOCK | Garantie | Schutz | Elaubte LOCKs | Möglichkeiten | Restriktionen |
211 // |==========================================================================|
212 // | NN | keine | keine | alle | alle | keine |
213 // | RD | R | D | RD, RW, WW, TW | R, W | D |
214 // | RW | R | D, W | RD, RW | R | D, W |
215 // | WW | R, W | D, W | RD | R | D, W |
216 // | DW | R, W, D | D, W | keine | R | D, W |
217 // | DR | R, W, D | D, W, R | keine | keine | D, W, R |
218 // | EX | R, W, D | D, W, R | keine | keine | D, W, R |
219 // | TW | R, W | D, W | RD | R | D, W |
220 // | TD | R, W, D | D, W | keine | R | D, W |
221 // |==========================================================================|
222
223 #ifdef _GLO_TEST
224 class __glo_export_dll LockManager
225 #else
227 #endif
228 {
229 public:
230 //-----------------------------------------------------------------------
231 // >>>>>>>>>>>>>>>>> LockManager::LockedObject >>>>>>>>>>>>>>>>>>>>>>>>>>
232 //-----------------------------------------------------------------------
248 #ifdef _GLO_TEST
250 #else
252 #endif
253 {
254 private:
255 //============== Friends
256 //-------------------------------------------------------------------
257 friend class LockManager;
258 //-------------------------------------------------------------------
259
260 #ifdef _GLO_TEST
261 public:
262 #else
263 protected:
264 #endif
265 //-------------------------------------------------------------------
266 // >>>> LockManager::LockedObject::CommunicatorRightsRestrictions >>>
267 //-------------------------------------------------------------------
288 #ifdef _GLO_TEST
290 #else
292 #endif
293 {
294 private:
295 //============== Friends
296 //---------------------------------------------------------------
297 friend class LockManager;
298 friend class LockedObject;
299 //---------------------------------------------------------------
300
301 #ifdef _GLO_TEST
302 public:
303 #else
304 protected:
305 #endif
306 //============== Attribute
307 //---------------------------------------------------------------
318 //---------------------------------------------------------------
332 std::list< DependentObjsWithDeepMode * > m_READvDELETE_Count;
333 //---------------------------------------------------------------
347 std::list< DependentObjsWithDeepMode * > m_READvWRITE_Count;
348 //---------------------------------------------------------------
362 std::list< DependentObjsWithDeepMode * > m_WRITEvWRITE_Count;
363 //---------------------------------------------------------------
377 std::list< DependentObjsWithDeepMode * > m_DELETEvWRITE_Count;
378 //---------------------------------------------------------------
392 std::list< DependentObjsWithDeepMode * > m_DELETEvREAD_Count;
393 //---------------------------------------------------------------
407 std::list< DependentObjsWithDeepMode * > m_EXCLUSIVE_Count;
408 //---------------------------------------------------------------
422 std::list< DependentObjsWithDeepMode * > m_TRANSACTION_WRITE_Count;
423 //---------------------------------------------------------------
437 std::list< DependentObjsWithDeepMode * > m_TRANSACTION_DELETE_Count;
438 //---------------------------------------------------------------
439
440 public:
441 //============= Konstruktor
442 //---------------------------------------------------------------
453 //---------------------------------------------------------------
466 //---------------------------------------------------------------
477 //---------------------------------------------------------------
478
479 //============== Methoden
480 //---------------------------------------------------------------
496 bool isNULL() const;
497 //---------------------------------------------------------------
516 //---------------------------------------------------------------
535 //---------------------------------------------------------------
554 //---------------------------------------------------------------
573 //---------------------------------------------------------------
592 //---------------------------------------------------------------
610 //---------------------------------------------------------------
629 //---------------------------------------------------------------
648 //---------------------------------------------------------------
664 bool hasReadProtection() const;
665 //---------------------------------------------------------------
681 bool hasWriteProtection() const;
682 //---------------------------------------------------------------
699 //---------------------------------------------------------------
714 bool hasReadGuarantee() const;
715 //---------------------------------------------------------------
730 bool hasWriteGuarantee() const;
731 //---------------------------------------------------------------
746 bool hasDeleteGuarantee() const;
747 //---------------------------------------------------------------
748
749 private:
750 //---------------------------------------------------------------
764 void deleteObjectsInList( std::list< DependentObjsWithDeepMode * > * pList );
765 //---------------------------------------------------------------
766 };
767 //-------------------------------------------------------------------
768 // <<<< LockManager::LockedObject::CommunicatorRightsRestrictions <<<
769 //-------------------------------------------------------------------
770
771 #ifdef _GLO_TEST
772 public:
773 #else
774 protected:
775 #endif
776 //============== Attribute
777 //-------------------------------------------------------------------
788 //-------------------------------------------------------------------
804 std::map< NUM_PTR, CommunicatorRightsRestrictions *, std::less<NUM_PTR> > m_CommunicatorMap;
805 //-------------------------------------------------------------------
806
807 //============= Konstruktor
808 //-------------------------------------------------------------------
819 //-------------------------------------------------------------------
820
821 public:
822 //============= Konstruktor
823 //-------------------------------------------------------------------
835 LockedObject (const ObjID & rLockObjekt);
836 //-------------------------------------------------------------------
847 //-------------------------------------------------------------------
848
849 private:
850 //============= Konstruktor
851 //-------------------------------------------------------------------
862 //-------------------------------------------------------------------
863
864 public:
865 //============== Methoden
866 //-------------------------------------------------------------------
878 ObjID getObjID () const;
879 //-------------------------------------------------------------------
907 int lockObject( Communicator * pCommunicator,
908 std::stack< ObjID > * pDependObjIdStack,
909 EnLockMode eLockMode,
910 EnDeepMode eDeepMode,
911 bool bSimulate = false );
912 //-------------------------------------------------------------------
943 int unlockObject( Communicator * pCommunicator,
944 std::stack< ObjID > *& prDependObjIdStack,
945 EnLockMode eLockMode,
946 EnDeepMode eDeepMode,
947 bool bSimulate = false );
948 //-------------------------------------------------------------------
973 EnLockMode eLockMode ) const;
974 //-------------------------------------------------------------------
997 bool isPossible( Communicator * pCommunicator,
998 bool bRead,
999 bool bWrite,
1000 bool bDelete) const;
1001 //-------------------------------------------------------------------
1015 std::size_t getNumCommunicators();
1016 //-------------------------------------------------------------------
1028 void deleteCommunicator( Communicator * pCommunicator );
1029 //-------------------------------------------------------------------
1030
1031 private:
1032 //============== Methoden
1033 //-------------------------------------------------------------------
1068 EnLockMode eLockMode,
1069 EnDeepMode eDeepMode,
1070 std::stack< ObjID > *& prUnlockDependObjIdStack,
1071 std::stack< ObjID > * pLockDependObjIdStack,
1072 bool bSimulate = false);
1073 //-------------------------------------------------------------------
1103 int setLockCount( std::list< DependentObjsWithDeepMode * > & rLockCountList,
1104 std::stack< ObjID > *& prUnlockDependObjIdStack,
1105 std::stack< ObjID > * pLockDependObjIdStack,
1106 EnDeepMode eDeepMode,
1107 bool bSimulate = false );
1108 //-------------------------------------------------------------------
1109
1110 private:
1111 //============== Operatoren
1112 //-------------------------------------------------------------------
1123 //-------------------------------------------------------------------
1124 };
1125 //-----------------------------------------------------------------------
1126 // <<<<<<<<<<<<<<<<< LockManager::LockedObject <<<<<<<<<<<<<<<<<<<<<<<<<<
1127 //-----------------------------------------------------------------------
1128
1129 private:
1130 //============== Attribute
1131 //-----------------------------------------------------------------------
1141 std::unordered_map< unsigned long, LockedObject * > m_LockedObjectMap;
1142 //-----------------------------------------------------------------------
1153 //-----------------------------------------------------------------------
1154
1155 protected:
1156 //============= Konstruktoren
1157 //-----------------------------------------------------------------------
1168 //-----------------------------------------------------------------------
1169
1170 public:
1171 //============== De- und Konstruktor
1172 //-----------------------------------------------------------------------
1187 LockManager( Manager * pDBManager );
1188 //-----------------------------------------------------------------------
1198 virtual ~LockManager();
1199 //-----------------------------------------------------------------------
1200
1201 private:
1202 //============== Konstruktoren
1203 //-----------------------------------------------------------------------
1214 //-----------------------------------------------------------------------
1215
1216 public:
1217 //============== Method
1218 //-----------------------------------------------------------------------
1246 int lockObject( const ObjID & rObjID,
1247 std::map< ObjID, Record *, std::less<ObjID> > & rDependObjects,
1248 Communicator * pCommunicator,
1249 const std::string & rsSchemaName,
1250 EnLockMode eLockMode,
1251 EnDeepMode eDeepMode,
1252 bool bSimulate = false );
1253 //-----------------------------------------------------------------------
1280 int unlockObject( const ObjID & rObjID,
1281 Communicator * pCommunicator,
1282 const std::string & rsSchemaName,
1283 EnLockMode eLockMode,
1284 EnDeepMode eDeepMode,
1285 bool bSimulate = false );
1286 //-----------------------------------------------------------------------
1313 bool isPossible( const ObjID & rObjID,
1314 std::map< ObjID, Record *, std::less<ObjID> > & rDependObjects,
1315 Communicator * pCommunicator,
1316 bool bRead,
1317 bool bWrite,
1318 bool bDelete );
1319 //-----------------------------------------------------------------------
1338 std::map< ObjID, Record *, std::less<ObjID> > & rDependObjects,
1339 Communicator * pCommunicator );
1340 //-----------------------------------------------------------------------
1355 void getNotAllowedReadObjects( std::list< ObjID > & rReadLockObjList,
1356 Communicator * pCommunicator ) const;
1357 //-----------------------------------------------------------------------
1358 #ifdef _GLO_TEST
1374 std::unordered_map< unsigned long, LockedObject * > & getLockedObjects();
1375 #endif
1376 //-----------------------------------------------------------------------
1390 void deleteAllLocks( Communicator * pCommunicator, const std::string & rsSchemaName );
1391 //-----------------------------------------------------------------------
1392
1393 private:
1394 //============== Method
1395 //-----------------------------------------------------------------------
1413 void sendNotify( TdWatchNotifyMode nWatchNotifyMode,
1414 const ObjID & rObjID,
1415 Communicator * pCommunicator,
1416 const std::string & rsSchemaName );
1417 //-----------------------------------------------------------------------
1418
1419 private:
1420 //============== Operatoren
1421 //-----------------------------------------------------------------------
1431 LockManager & operator= ( const LockManager & );
1432 //-----------------------------------------------------------------------
1433 };
1434 //---------------------------------------------------------------------------
1435} // namespace glo
1436#endif
Header für Manager Manager::Receiver Manager::ObjIdWithDepends Manager::SchemaMapItem
Header für ObjID
Für jede Bibliothek, hier 'GlobalObjects' gibt es eine Typen-Datei.
#define __glo_export_dll
Definition GloTypes.h:63
OberKlasse von LocalThread, ClientThread und ServerThread, weil diese als Sender und Empfänger (Kommu...
Definition GloCommunicator.h:86
Die einzelnen Sperrmodi des Objekts mit Objekt-ID aus LockedObject::m_LockObjektID für einen Kommunik...
Definition GloLockManager.h:293
std::list< DependentObjsWithDeepMode * > m_READvDELETE_Count
Definition GloLockManager.h:332
std::list< DependentObjsWithDeepMode * > m_TRANSACTION_WRITE_Count
Definition GloLockManager.h:422
Communicator * m_pCommunicator
Definition GloLockManager.h:317
std::list< DependentObjsWithDeepMode * > m_TRANSACTION_DELETE_Count
Definition GloLockManager.h:437
std::list< DependentObjsWithDeepMode * > m_EXCLUSIVE_Count
Definition GloLockManager.h:407
std::list< DependentObjsWithDeepMode * > m_READvWRITE_Count
Definition GloLockManager.h:347
void deleteObjectsInList(std::list< DependentObjsWithDeepMode * > *pList)
std::list< DependentObjsWithDeepMode * > m_DELETEvWRITE_Count
Definition GloLockManager.h:377
std::list< DependentObjsWithDeepMode * > m_WRITEvWRITE_Count
Definition GloLockManager.h:362
std::list< DependentObjsWithDeepMode * > m_DELETEvREAD_Count
Definition GloLockManager.h:392
Objekte können gesperrt werden. Objekte dieser Klasse repräsentiert ein vom Kommunikatoren gesperrtes...
Definition GloLockManager.h:253
int lockObject(Communicator *pCommunicator, std::stack< ObjID > *pDependObjIdStack, EnLockMode eLockMode, EnDeepMode eDeepMode, bool bSimulate=false)
LockedObject(const ObjID &rLockObjekt)
ObjID m_LockObjektID
Definition GloLockManager.h:787
int setLocks(CommunicatorRightsRestrictions *pItem, EnLockMode eLockMode, EnDeepMode eDeepMode, std::stack< ObjID > *&prUnlockDependObjIdStack, std::stack< ObjID > *pLockDependObjIdStack, bool bSimulate=false)
int unlockObject(Communicator *pCommunicator, std::stack< ObjID > *&prDependObjIdStack, EnLockMode eLockMode, EnDeepMode eDeepMode, bool bSimulate=false)
std::map< NUM_PTR, CommunicatorRightsRestrictions *, std::less< NUM_PTR > > m_CommunicatorMap
Definition GloLockManager.h:804
bool isPossible(Communicator *pCommunicator, bool bRead, bool bWrite, bool bDelete) const
bool hasAnyOtherCompetingProtection(Communicator *pCommunicator, EnLockMode eLockMode) const
void deleteCommunicator(Communicator *pCommunicator)
LockedObject(const LockedObject &)
int setLockCount(std::list< DependentObjsWithDeepMode * > &rLockCountList, std::stack< ObjID > *&prUnlockDependObjIdStack, std::stack< ObjID > *pLockDependObjIdStack, EnDeepMode eDeepMode, bool bSimulate=false)
Objekte dieser Klasse überwachen den Sperrzustand von Objekten.
Definition GloLockManager.h:228
Manager * m_pDBManager
Definition GloLockManager.h:1152
LockManager(Manager *pDBManager)
virtual ~LockManager()
LockManager(const LockManager &)
void sendNotify(TdWatchNotifyMode nWatchNotifyMode, const ObjID &rObjID, Communicator *pCommunicator, const std::string &rsSchemaName)
int lockObject(const ObjID &rObjID, std::map< ObjID, Record *, std::less< ObjID > > &rDependObjects, Communicator *pCommunicator, const std::string &rsSchemaName, EnLockMode eLockMode, EnDeepMode eDeepMode, bool bSimulate=false)
bool isPossible(const ObjID &rObjID, std::map< ObjID, Record *, std::less< ObjID > > &rDependObjects, Communicator *pCommunicator, bool bRead, bool bWrite, bool bDelete)
LockPossibleSpecification getProcessingPossibilities(const ObjID &rObjID, std::map< ObjID, Record *, std::less< ObjID > > &rDependObjects, Communicator *pCommunicator)
int unlockObject(const ObjID &rObjID, Communicator *pCommunicator, const std::string &rsSchemaName, EnLockMode eLockMode, EnDeepMode eDeepMode, bool bSimulate=false)
void getNotAllowedReadObjects(std::list< ObjID > &rReadLockObjList, Communicator *pCommunicator) const
void deleteAllLocks(Communicator *pCommunicator, const std::string &rsSchemaName)
std::unordered_map< unsigned long, LockedObject * > m_LockedObjectMap
Definition GloLockManager.h:1141
Das Objekt dieser Klasse ist die zentrale Anlaufstelle für Aktionen, welche mit GlobalObjects-Daten z...
Definition GloManager.h:184
Ein Objekt-ID besteht aus der Klassen-ID, einer Datenbank-ID und der eigentlichen eindeutigen ObjektZ...
Definition GloObjID.h:77
Objekte dieser Klasse transportieren die Daten von den Tabellen ins persistente Objekt und von diesen...
Definition GloRecord.h:101
Definition GloAbstractBaseLot.h:42
EnDeepMode
Definition GloTypes.h:247
EnLockMode
Definition GloTypes.h:1070
unsigned long TdWatchNotifyMode
Definition GloTypes.h:543
Es können erlaubte Aktionen in der Datenbank wie lesen, schreiben und löschen für ein Objekt erfragt ...
Definition GloTypes.h:1271