1#ifndef INC_GLODBMANAGER_H
2#define INC_GLODBMANAGER_H
47#if defined (__PTHREADS)
56#if defined (__PTHREADS)
58 #include <semaphore.h>
66#if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__)
68#elif defined(__GNUC__)
72 #include <sys/types.h>
73 #include <sys/socket.h>
74 #include <netinet/in.h>
76 #include <arpa/inet.h>
77 #define SOCKET uintptr_t
78 #define SOCKADDR_IN sockaddr_in
79 #define SOCKADDR sockaddr
80 #define HOSTENT hostent
81 #define INVALID_SOCKET (SOCKET)(~0)
82 #define SOCKET_ERROR (-1)
89 class CommunicaterThread;
92 class ManagerActionVisualiser;
96 class SchemaInterface;
98 class TableReaderInterface;
99 class TransactionIndexPool;
100 class TableWriterInterface;
101 class WatchNotifyManager;
107 #pragma warning( disable : 4251 )
179 #if defined (__PTHREADS)
522 std::map<
ObjID,
Record *, std::less<ObjID> > * pDependRecordMap );
601 #if defined(_MSC_VER)
617 #elif defined(__MINGW32__) || defined(__MINGW64__)
631 void * m_hLockFileHandle;
633 #elif defined(__GNUC__)
647 int m_iLockFileHandle;
670 #if defined(_MSC_VER)
704 std::ofstream * pLockFile );
706 #elif defined(__MINGW32__) || defined(__MINGW64__)
741 void * hLockFileHandle );
743 #elif defined(__GNUC__)
778 int iLockFileHandle );
782 #if defined(_MSC_VER)
793 #elif defined(__MINGW32__) || defined(__MINGW64__)
804 #elif defined(__GNUC__)
1019 std::map< std::string, SchemaMapItem *, std::less< std::string > >
m_SchemaMap;
1054 std::map< Communicator *, Receiver * , std::less< Communicator * > >
m_ReceiverMap;
1125 #if defined (__PTHREADS)
1145 #if defined(__GNUC__)
1146 __attribute__((noreturn))
1169 const std::vector< std::string > & rAllowedSchemes );
1227 const std::vector< std::string > & rAllowedSchemes );
1348 const std::string & rsActiontype,
1349 const std::string & rsActionString,
1393 const std::string & rsActionString,
1416 const std::string & rsActionString,
1439 const std::string & rsActionString,
1543 std::string * psSchemaName = 0 )
const;
1618 const std::string & rsSchemaName )
const;
2046 std::string sSchemaName );
2073 std::string sSchemaName,
2074 std::map<
ObjID,
Record *, std::less<ObjID> > * pInputDataRecordMap );
2168 std::list<ObjID> * pObjectIDsToBeLocked,
2234 const ObjID & rObjID,
2236 const std::string & rsSchemaName );
2258 const std::list<ObjID> & rObjIDList,
2260 const std::string & rsSchemaName );
2265 #if defined(_MSC_VER)
2295 #elif defined(__MINGW32__) || defined(__MINGW64__)
2322 int lockBaseExclusive(
void *& prLockFileHandle,
2325 #elif defined(__GNUC__)
2352 int lockBaseExclusive(
int & riLockFileHandle,
2496 std::string * psSchemaName = 0,
2569 const std::map<
ObjID,
Record *, std::less<ObjID> > & rRecordMap,
2596 std::string & rsSchemaName );
2635 const std::string & rsSchemaName,
2784 #pragma warning( default : 4251 )
Header for CriticalSection
#define NULL_PTR
Definition EuDef_NULL_PTR.h:74
Header for EuEndlessPThread
Header for EuPCriticalSection
Header for RepeatingThread
Header for LockSpecification
Header for TransactionManager TransactionManager::TransactionBase TransactionManager::Transaction...
For each library, here 'GlobalObjects' there is a type file.
#define __glo_export_dll
Definition GloTypes.h:63
Header for WatchSpecification
Base class for a thread that executes its work endlessly until aborted.
Definition EuEndlessPThread.h:69
Is a mutex which can be queried via its lock mode. See isLocked().
Definition EuPCriticalSection.h:89
Is a mutex which can be queried via its lock mode. See isLocked().
Definition EuCriticalSection.h:94
Base class for a thread that executes its work endlessly until aborted.
Definition EuRepeatingThread.h:78
A CommunicaterThread accepts requests for its TableReaderInterface.
Definition GloCommunicaterThread.h:82
Superclass of LocalThread, ClientThread and ServerThread, because they can act as senders and receive...
Definition GloCommunicator.h:86
IndexPool is the base class for the RealIndexPool and the TransactionIndexPool for the individual tra...
Definition GloIndexPool.h:192
Objects of this class monitor the lock state of persistent objects.
Definition GloLockManager.h:228
To be able to lock objects, the 'lock mode' and the 'lock depth' are required as parameters....
Definition GloLockSpecification.h:58
Is the remote station or the communicator which communicates with the Manager. In multi-user operatio...
Definition GloManager.h:216
CommunicaterThread * m_pCommunicatorThread
Definition GloManager.h:272
std::string getSchemaName() const
std::string m_sSchemaName
Definition GloManager.h:250
unsigned int m_uiRefCounter
Definition GloManager.h:237
unsigned int decrementRefCounter()
Receiver(const std::string &sSchemaName, CommunicaterThread *pCommunicatorThread, Communicator *pCommunicator)
Receiver(const Receiver &)
Communicator * m_pCommunicator
Definition GloManager.h:261
unsigned int incrementRefCounter()
CommunicaterThread * getCommunicatorThread() const
Communicator * getCommunicator() const
Objects of this class represent an open database. There is one object of this class for each open dat...
Definition GloManager.h:560
TableWriterInterface * m_pTableWriterInterface
Definition GloManager.h:599
unsigned int Counter() const
SchemaMapItem(const SchemaMapItem &)
SchemaInterface * m_pSchema
Definition GloManager.h:588
std::ofstream * m_pLockFile
Definition GloManager.h:615
unsigned int m_uiCounter
Definition GloManager.h:577
TableWriterInterface * getTableWriterInterface() const
SchemaInterface * getSchema() const
SchemaMapItem(SchemaInterface *pSchema, RealIndexPool *pRealIndexPool, std::ofstream *pLockFile)
Shows the actions of the Manager via std::cout
Definition GloManagerActionVisualiser.h:63
The object of this class is the central point of contact for actions that deal with GlobalObjects dat...
Definition GloManager.h:184
int createSchemaInterface(SchemaInterface *&prNewSchemaInterface, const std::string &rsSchemaName) const
static ShowLevel getShowLevel()
std::map< SOCKET, ClientInfo, std::less< SOCKET > > m_ConnectedClientsMap
Definition GloManager.h:1041
RealIndexPool * getRealIndexPool()
static Manager * create(const std::string &rsSchemaPath, const std::vector< std::string > &rAllowedSchemes)
void deleteCommunicatorWatches(OrderMsg *pOrderMsg)
void openBase(OrderMsg *pOrderMsg)
int transactionManagerSetTransactionStep(const SchemaInterface &rSchema, Communicator *pCommunicator, TransactionManager::EnStoreDelete eStoreOrDelete, Record *pRecord)
void sendToWatchNotifyManager(OrderMsg *pOrderMsg)
void getAllTransactionIndexPools(std::vector< TransactionIndexPool * > &rTransactionIndexPoolVector, std::string *psSchemaName=0, Communicator *pWithoutThisCommunicator=0) const
void compressBase(OrderMsg *pOrderMsg)
std::size_t getNumberReceiver() const
static void showWriterAction(OrderMsg *pOrderMsg, const std::string &rsActionString, char cSE)
std::vector< std::string > m_KnownSchemes
Definition GloManager.h:1006
void getAllDataTypes(OrderMsg *pOrderMsg) const
WatchNotifyManager * m_pWatchNotifyManager
Definition GloManager.h:1087
Manager::SchemaMapItem * getSchemaMapItem(const std::string &rsSchemaName) const
static ManagerActionVisualiser * m_pActionVisualiser
Definition GloManager.h:971
void deleteAllObjectsInReceiverMap()
std::map< Communicator *, Receiver *, std::less< Communicator * > > m_ReceiverMap
Definition GloManager.h:1054
std::string getSchemaPath() const
eut::CriticalSection m_LocalCriticalSection
Definition GloManager.h:1128
int sendBEGINtoTransactionManager(Communicator *pCommunicator)
void processObjectNotify(TdWatchNotifyMode nWatchNotifyMode, const std::list< ObjID > &rObjIDList, Communicator *pCommunicator, const std::string &rsSchemaName)
int checkAllRecordIndices(int iCheckStatus, const SchemaInterface &rSchema, const std::map< ObjID, Record *, std::less< ObjID > > &rRecordMap, IndexPool &rGloIndexPool) const
static int ms_iReferenceCounter
Definition GloManager.h:938
void insertInKnownBases(const std::vector< std::string > &rNewSchemes)
std::string m_strSchemaPath
Definition GloManager.h:995
void deleteAllObjectsInSchemaMap()
int lockBaseExclusive(std::ofstream *&prLockFile, const SchemaInterface &rSchemaInterface)
void processObjectNotify(TdWatchNotifyMode nWatchNotifyMode, const ObjID &rObjID, Communicator *pCommunicator, const std::string &rsSchemaName)
void getDataTypeLimits(OrderMsg *pOrderMsg) const
LockManager * m_pLockManager
Definition GloManager.h:1065
void unlockTransactionStepList(std::list< TransactionManager::TransactionBase * > &rTransactionStepList, Communicator *pCommunicator, const std::string &rsSchemaName, TransactionIndexPool *pTransactionIndexPool, bool bDelete)
static ShowLevel m_ulShowLevel
Definition GloManager.h:960
static void showTransactionAction(OrderMsg *pOrderMsg, const std::string &rsActionString, char cSE)
void releaseStrIndexesFromTransactionStepList(std::list< TransactionManager::TransactionBase * > &rTransactionStepList, std::string &rsSchemaName)
void getBaseOrSubClassInfos(OrderMsg *pOrderMsg) const
void repairBase(OrderMsg *pOrderMsg)
void switchOffAllRecieverReader()
void sendToTransactionManager(OrderMsg *pOrderMsg)
static void setActionVisualiser(ManagerActionVisualiser *pActionVisualiser)
void getAllKnownBases(OrderMsg *pOrderMsg) const
void getClassInfo(OrderMsg *pOrderMsg) const
void removeCommunicator(OrderMsg *pOrderMsg, WatchNotifyManager *pWatchNotifyManager=0)
int sendToLockManager(OrderMsg::EnOrderType eOrderType, SchemaInterface *pSchema, std::list< ObjID > *pObjectIDsToBeLocked, LockSpecification *pLockSpec, Communicator *pCommunicator)
void sendToLockManager(OrderMsg *pOrderMsg)
static void showOrderAction(OrderMsg *pOrderMsg, char cSE)
virtual void work() override
void closeBase(OrderMsg *pOrderMsg)
void getKnownBases(std::vector< std::string > &rKnownBasesVector) const
std::map< std::string, SchemaMapItem *, std::less< std::string > > m_SchemaMap
Definition GloManager.h:1019
static Manager * getAvailableInstance()
void getAllClients(std::vector< ClientInfo > &rClientInfoVector, std::string *psSchemaName=0) const
static void showActionString(const std::string &sActionString)
void getAllClients(OrderMsg *pOrderMsg) const
void switchOnRecieverReader(std::string sSchemaName)
SchemaInterface * getSchemaInterface(const std::string &rsSchemaName) const
std::size_t getNumberReceiver(std::string sSchemaName) const
bool m_bWorkingExclusiv
Definition GloManager.h:1111
void getDependRecordsRecursive(std::map< ObjID, Record *, std::less< ObjID > > &rDependRecordMap, Record &rSourceRecord, const TableReaderInterface &rTableReaderInterface, EnDeepMode eDeepMode, Communicator *pCommunicator=NULL_PTR) const
int sendCOMMITtoTransactionManager(Communicator *pCommunicator, std::string sSchemaName, std::map< ObjID, Record *, std::less< ObjID > > *pInputDataRecordMap)
static void showReaderAction(OrderMsg *pOrderMsg, const std::string &rsActionString, char cSE)
std::queue< OrderMsg * > m_MsgQueue
Definition GloManager.h:1030
void reindexBase(OrderMsg *pOrderMsg)
void sendToWriter(OrderMsg *pOrderMsg)
unsigned int m_uiCommunicatorID
Definition GloManager.h:984
static void setShowLevel(ShowLevel ulLevel)
Manager(const std::string &rsSchemaPath, const std::vector< std::string > &rAllowedSchemes)
RealIndexPool * m_pRealIndexPool
Definition GloManager.h:1098
static void showAction(const OrderMsg *pOrderMsg, const std::string &rsActiontype, const std::string &rsActionString, char cSE)
int sendABORTtoTransactionManager(Communicator *pCommunicator, std::string sSchemaName)
void processNewConnectedClient(OrderMsg *pOrderMsg)
void switchOnAllRecieverReader()
int takeOrder(OrderMsg *pOrderMsg)
void sendToReaderThread(OrderMsg *pOrderMsg)
void processDisconnectedClient(OrderMsg *pOrderMsg)
static Manager * m_pInstance
Definition GloManager.h:949
bool isBaseOpen(Communicator *pCommunicator)
void switchOffRecieverReader(std::string sSchemaName)
Manager::Receiver * getReceiver(Communicator *pCommunicator)
void getDependRecords(std::map< ObjID, Record *, std::less< ObjID > > &rDependRecordMap, Record &rSourceRecord, const TableReaderInterface &rTableReaderInterface, EnDeepMode eDeepMode, Communicator *pCommunicator=NULL_PTR) const
TransactionManager * m_pTransactionManager
Definition GloManager.h:1076
An object ID consists of the class ID, a database ID and the actual unique object number (all unsigne...
Definition GloObjID.h:77
This class is used to handle the communication between the application that uses GlobalObjects and Gl...
Definition GloOrderMsg.h:77
EnOrderType
Definition GloOrderMsg.h:98
The real index as opposed to the TransactionIndexPool, which is created for each transaction
Definition GloIndexPool.h:5151
Objects of this class transport the data from the tables into the persistent object and from these ag...
Definition GloRecord.h:101
This class is the interface to a GlobalObjects schema. It contains all class information to store obj...
Definition GloSchemaInterface.h:84
An object of this class accesses tables and reads data records (Record) and binary files (eut::Blob).
Definition GloTableReaderInterface.h:77
An object of this class accesses tables and writes data records (Record) and binary files (eut::Blob)...
Definition GloTableWriterInterface.h:70
Class that communicates with a tcp::Client via a SOCKET and delivers the result of the reception of t...
Definition GloTcpServerReceiver.h:74
This index is generated in each transaction and changes such as saving, deleting or inserting an obje...
Definition GloIndexPool.h:5924
class to guarantee transactions.
Definition GloTransactionManager.h:162
EnStoreDelete
Definition GloTransactionManager.h:176
Classes to monitor persistent objects and to notify the respective clients of changes.
Definition GloWatchNotifyManager.h:344
Definition GloAbstractBaseLot.h:42
EnDeepMode
Definition GloTypes.h:247
unsigned long ShowLevel
Definition GloTypes.h:854
unsigned long TdWatchNotifyMode
Definition GloTypes.h:543
A structure to map the object ID of a persistent object with the data records of the dependent object...
Definition GloManager.h:460
ObjIdWithDepends(const ObjID &rObjID, std::map< ObjID, Record *, std::less< ObjID > > *pDependRecordMap)
std::map< ObjID, Record *, std::less< ObjID > > * m_pDependRecordMap
Definition GloManager.h:489
ObjID m_ObjID
Definition GloManager.h:473