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

Klasse um Transaktionen zu gewährleisten. Mehr ...

#include <GloTransactionManager.h>

Klassen

class  CommunicatorTransactionStack
 Der Transaktions-Stack eines Client-Kommunikators für eine Datenbank. Mehr ...
 
class  TransactionBase
 Basisklasse für TransactionPoint und TransactionStep. Mehr ...
 
class  TransactionPoint
 Objekte dieser Klasse spiegeln einen Transaktions-Start wieder. Mehr ...
 
class  TransactionStep
 Objekte dieser Klasse spiegeln eine Datensatz-Operation wieder. Mehr ...
 

Öffentliche Typen

enum  EnStoreDelete { eTRX_STORE , eTRX_DELETE }
 

Öffentliche Methoden

 TransactionManager ()
 
virtual ~TransactionManager ()
 
int abortTransaction (std::list< TransactionBase * > &rAbortedTransactionStepList, Communicator *pCommunicator)
 
void beginTransaction (Communicator *pCommunicator)
 
int commitTransaction (CommunicatorTransactionStack *&prRetVal, Communicator *pCommunicator)
 
void deleteTransaction (Communicator *pCommunicator)
 
int getActionRecord (Record *&prRetVal, EnStoreDelete &reAction, Communicator *pCommunicator, const ObjID &rObjID, const std::string &rsDataPath, bool bInRecursion=false)
 
bool inTransaction (Communicator *pCommunicator) const
 
int setTransactionStep (NUM_PTR &nNewTrxStepAddr, Communicator *pCommunicator, EnStoreDelete eAction, Record *pActionRecord)
 

Geschützte Methoden

TransactionManager::CommunicatorTransactionStackgetTransactionStack (Communicator *pCommunicator)
 
void removeCurrentTransactionStack ()
 

Private Methoden

 TransactionManager (const TransactionManager &)
 
TransactionManageroperator= (const TransactionManager &)
 
int writeTransactionFile (CommunicatorTransactionStack *pTransactionStack)
 

Private Attribute

std::map< ObjID, Record *, std::less< ObjID > > m_RecursionRecordMap
 
std::map< NUM_PTR, CommunicatorTransactionStack *, std::less< NUM_PTR > > m_TransactionStackMap
 
std::map< NUM_PTR, CommunicatorTransactionStack * >::iterator m_TransactionStackMapIterator
 

Ausführliche Beschreibung

Klasse um Transaktionen zu gewährleisten.

Objekte dieser Klasse werden vom Manager instanziiert und verwaltet.

Jede Datenbank-Operation (Speichern und Löschen) wird in eine Transaktion gepackt und dem Transaction-Manager übergeben (z.B. Aktion mit den abhängigen Objekten).

Der Verlauf sieht folgendermaßen aus: Der Transaktion-Start (TransactionPoint) wird auf den Transaktions-Stack der anfragenden Instanz gelegt und ein Transaktions-Zähler inkrementiert (beim ersten auf 1 gesetzt).

Dann wird jede Datensatz-Operation (TransactionStep) auf den Transaktions-Stack dazu gelegt . Der TransactionStep beinhaltet den Datensatz, wie er vor der Aktion aussieht, und wie er nach der jeweiligen Aktion aussieht (z.B. gespeichert oder gelöscht).

Wenn ein neuer Transaktion-Start (TransactionPoint) dazukommt, wird dieser auch auf den Transaktions-Stack gelegt und wieder der Transaktions-Zähler inkrementiert.

Wenn ein Transaktions-Abbort (TransactionPoint) kommt, wird der Transaktions-Stack bis zum letzten Transaktions-Start (TransactionPoint) abgebaut und der Transaktions-Zähler dekrementiert. Wenn der erste Transaktions-Start (TransactionPoint) erreicht, wird die Transaktion verworfen.

Wenn ein Transaktion-Commit auf den Transaktions-Stack gelegt wird, wird der Transaktions-Zähler dekrementiert ( wenn 0, wird alles auf dem Transaktions-Stack ausgeführt).

Alle Zugriffe einer anfragenden Instanz auf Daten, welche vom TableReaderInterface vorgenommen werden sollen, gehen erst mal an den TransactionManager. Wenn dieser die erfragten Datensätze vorhält (siehe weiter oben, die Datensätze nach der Aktion, ausgelöst durch die anfragenden Instanz), werden erst mal diese geliefert. Der Rest wird vom TableReaderInterface direkt aus den Tabellen gelesen.

Zukunftsmusik: Ausführen bedeutet, dass ein Transaktionsfile geschrieben wird, welches vom Manager interpretiert wird (alle Aktionen an den TableWriterInterface). Wenn alles vom TableWriterInterface abgearbeitet wurde, wird das Transaktionsfile gelöscht, ansonsten nicht. Wenn der Manager z.B. mit Exception abstürzt, existiert bei einer nicht abgeschlossenen Transaktion das Transaktionsfile noch. Bei einem Neustart wird dann grundsätzlich zuerst versucht, ein vorhandenes Transaktionsfile abzuarbeiten.

Autor
Helmut Jakoby

Dokumentation der Aufzählungstypen

◆ EnStoreDelete

Intern, welche Aktion ausgeführt werden soll.

Aufzählungswerte
eTRX_STORE 

Es soll gespeichert werden.

eTRX_DELETE 

Es soll gelöscht werden.

Beschreibung der Konstruktoren und Destruktoren

◆ TransactionManager() [1/2]

glo::TransactionManager::TransactionManager ( )

Standard-Konstruktor.

◆ ~TransactionManager()

virtual glo::TransactionManager::~TransactionManager ( )
virtual

Destruktor.

◆ TransactionManager() [2/2]

glo::TransactionManager::TransactionManager ( const TransactionManager & )
private

Der Copy-Konstruktor steht nicht zur Verfügung.

Dokumentation der Elementfunktionen

◆ abortTransaction()

int glo::TransactionManager::abortTransaction ( std::list< TransactionBase * > & rAbortedTransactionStepList,
Communicator * pCommunicator )

Es wird aktuelle Transaktion abgebrochen.

Parameter
[in,out]rAbortedTransactionStepListIn dieser Liste werden die verworfenen TransactionSteps geliefert (müssen u.a. noch im LockManager freigegeben werden).
[in]pCommunicatorDer Client-Kommunikator, der die Transaktion abbricht.
Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.
Achtung
Die Objekte in der gelieferten Liste müssen von der aufrufenden Instanz aus dem Speicher entfernt werden.

◆ beginTransaction()

void glo::TransactionManager::beginTransaction ( Communicator * pCommunicator)

Beginnt eine neue Transaktion, indem ein neuer TransactionPoint auf den Transaktions-Stack gelegt wird.

Parameter
[in]pCommunicatorDer Client-Kommunikator, der die Transaktion startet.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem Fehler wird eine Exception geworfen.

◆ commitTransaction()

int glo::TransactionManager::commitTransaction ( CommunicatorTransactionStack *& prRetVal,
Communicator * pCommunicator )

Es wird aktuelle Transaktion akzeptiert.

Parameter
[in,out]prRetValWenn Rückgabe > 0, dann wird der Transaktions-Stack des Client-Kommunikators zum ausführen der Arbeitsschritte geliefert.
[in]pCommunicatorDer Client-Kommunikator, der die Transaktion commited.
Rückgabe
Eine Rückgabe > 0 zeigt an, dass der gelieferte Transaktions-Stack abgearbeitet werden kann.
Eine Rückgabe == 0 zeigt an, dass innerhalb einer geschachtelten Transaktion akzeptiert wurde.
Eine Rückgabe < 0 zeigt einen Fehler an.
Achtung
Das gelieferte Objekt muss von der aufrufenden Instanz aus dem Speicher entfernt werden.

◆ deleteTransaction()

void glo::TransactionManager::deleteTransaction ( Communicator * pCommunicator)

Es wird eine, ggf. vorhanden, Transaktionen des übergebenen Client-Kommunikator entfernt.

Parameter
[in]pCommunicatorDer Client-Kommunikator.

◆ getActionRecord()

int glo::TransactionManager::getActionRecord ( Record *& prRetVal,
EnStoreDelete & reAction,
Communicator * pCommunicator,
const ObjID & rObjID,
const std::string & rsDataPath,
bool bInRecursion = false )

Liefert den letzten im Transaktions-Stack angehängten Datensatz inkl. der Datenbank-Aktion mit der übergebenen Objekt-ID und dem Client-Kommunikator.

Parameter
[in,out]prRetValDie Datensatz, wenn vorhanden.
[in,out]reActionDie Aktion wie mit dem Datensatz umgegangen werden sollte; speichern oder löschen.
[in]pCommunicatorDer Client-Kommunikator, der den Datensatz in einer Transaktion bearbeiten wollte.
[in]rObjIDDie Objekt-ID des gewünschten Datensatzes.
[in]rsDataPathDer Datei-Pfad um ggf. die Objekt-IDs aus Dateien zu holen.
[in]bInRecursionWenn true, dann Aufruf in sich selbst.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.
Achtung
Die aufrufende Instanz muss den evtl. gelieferten Datensatz mittels Record::forget() aus dem Speicher entfernen.
Zu beachten
Für Glo-Entwickler: Ist in GloRecordAttributeFunctions.cpp implementiert, damit Erweiterungen von Datensatz-Attributen dort gesammelt vorgenommen werden können.

◆ getTransactionStack()

TransactionManager::CommunicatorTransactionStack * glo::TransactionManager::getTransactionStack ( Communicator * pCommunicator)
protected

Liefert einen Zeiger auf den Transaktions-Stack des übergebenen Client-Kommunikator.

Parameter
[in]pCommunicatorDer Client-Kommunikator.
Rückgabe
Der Zeiger auf einen, ggf. vorhandenen, Transaktions-Stack. Wenn der Client-Kommunikator keine Transaktion am Laufen hat, ist der Rückgabewert == NULL_PTR.

◆ inTransaction()

bool glo::TransactionManager::inTransaction ( Communicator * pCommunicator) const

Prüft ob übergebener Client-Kommunikator eine Transaktion am Laufen hat.

Parameter
[in]pCommunicatorDer Client-Kommunikator.
Rückgabe
Wenn true, hat der übergebener Client-Kommunikator eine Transaktion am Laufen.

◆ operator=()

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

Der Zuweisungsoperator steht nicht zur Verfügung.

◆ removeCurrentTransactionStack()

void glo::TransactionManager::removeCurrentTransactionStack ( )
protected

Entfernt den aktuellen Transaktions-Stack. Wenn eine nachfolgende Transaktion vorhanden ist, wird diese zur aktuellen Transaktion in der m_TransactionStackMap.

◆ setTransactionStep()

int glo::TransactionManager::setTransactionStep ( NUM_PTR & nNewTrxStepAddr,
Communicator * pCommunicator,
EnStoreDelete eAction,
Record * pActionRecord )

Generiert einen TransactionStep und legt diesen auf den Transaktions-Stack.

Parameter
[in,out]nNewTrxStepAddrDie Adresse des erstellte Transaktionsschritts, um Indexe veralten zu können (siehe auch IndexPool::ObjectStrIndex::m_ReservedIndexMultiMap).
[in]pCommunicatorDer Client-Kommunikator, der den Datensatz in einer Transaktion bearbeiten möchte.
[in]eActionDie Aktion wie mit dem Datensatz umgegangen werden soll; speichern oder löschen.
[in]pActionRecordDer Datensatz, welcher gespeichert bzw. gelöscht werden soll. Es wird der Datensatz kopiert und nicht 'remembert'.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.

◆ writeTransactionFile()

int glo::TransactionManager::writeTransactionFile ( CommunicatorTransactionStack * pTransactionStack)
private

Noch nicht implementiert!

Dokumentation der Datenelemente

◆ m_RecursionRecordMap

std::map< ObjID, Record *, std::less<ObjID> > glo::TransactionManager::m_RecursionRecordMap
private

Wenn rekursiv Datensätze gelesen werden, kommen die schon gelesene Datensätze hier rein.

◆ m_TransactionStackMap

std::map< NUM_PTR, CommunicatorTransactionStack *, std::less<NUM_PTR> > glo::TransactionManager::m_TransactionStackMap
private

Eine Map mit den Transaktionen. Key ist die auf NUM_PTR gecastete Adresse des Communicator's für den eine Transaktion erstellt wurde .

◆ m_TransactionStackMapIterator

std::map<NUM_PTR,CommunicatorTransactionStack*>::iterator glo::TransactionManager::m_TransactionStackMapIterator
private

Ein interner Iterator auf die Map mit den Transaktionen (m_TransactionStackMap).


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