What are transactions

This topic describes the purpose of transactions when accessing the Comms Database.

The CommsDat API provides the behaviour known as transactions. Tools and applications use transactions to make sure that read and write operations are consistent.

More than one application can use the Comms Database at the same time. Transactions implement a lock that allows applications to perform a set of read and write operations safely. In a transaction, other applications cannot change the data.

The [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]CMDBSession class provides the functions that implement transactions.

You must create a session with the Comms Database before you start your first transaction.

A transaction starts with a call to [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]CMDBSession::OpenTransactionL(), and ends with a call to [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]CMDBSession::CommitTransactionL() or [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]CMDBSession::RollbackTransactionL().

A call to [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]CMDBSession::OpenTransactionL() starts a transaction.

A call to [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]CMDBSession::CommitTransactionL() or [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]CMDBSession::RollbackTransactionL() ends a transaction.

Between the start and end of a transaction, the CommsDat API makes sure that:

  • a write operation started by another session cannot interrupt a read operation or a read/write operation started by this session.

  • all read/write operations succeed after a succesful call to [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]CMDBSession::CommitTransactionL().

  • all read/write operations are discarded after a successful call to [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]CMDBSession::RollbackTransactionL() /

  • the changes are visible only to the tool or application that started the transaction. To the tool or application, the changes appear to have been written to the Comms Database.

  • other users of the Comms Database cannot see the changes made by a transaction until that transaction is committed.

The CommsDat API cannot make other guarantees. Tools and applications must not make assumptions about the lock mechanism used by the implementation of the Comms Database.

Tools and applications must make sure that transactions are short. The Comms Database is a shared resource, and long transactions cause performance problems. The Comms Database implements a timeout to protect the database. The Comms Database can terminate very long transactions. The timeout does not affect the normal operation.

It is more efficient to wrap several write operations in one transaction, because data is only written to the Comms Database in a call to [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]CMDBSession::CommitTransactionL(). Tools and applications must not hold a transaction open for longer than is necessary.

All read and write functions provided by [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CommsDat']]]MMetaDatabase use transactions internally and are consistent.