XmlTransaction objects are actually wrappers around Berkeley DB objects. It is therefore possible for you to use both XmlTransaction and handles for the same transaction simultaneously.
( are what Berkeley DB use to manage transactions. See the version of this guide for details on their usage.)
This is interesting if you want to write an application that makes use of both Berkeley DB databases and Berkeley DB XML containers. Because BDB XML is a layer on top of Berkeley DB, all of the Berkeley DB APIs are available to your BDB XML application.
To obtain the underlying object from an XmlTransaction object, use XmlTransaction::getDbTxn(). You can also create an XmlTransaction object around an existing object by passing that object to
When you use both BDB XML and Berkeley DB transaction handles for the same transaction simultaneously, there are a few things you need to keep in mind:
Any handle for a transaction object can commit or abort that transaction. Once committed or aborted, all handles to the transaction are no longer valid.
If the XmlTransaction object goes out of scope without being committed or aborted, then the external object that was used to create it is still valid and the underlying transaction is still active (until such a time as the transaction is either committed or aborted in some other location in your code).
Likewise, if the parent object goes out scope while the XmlTransaction object is still active, then the underlying transaction is still active until such a time as the XmlTransaction object calls either commit or abort.
If all XmlTransaction objects go out of scope and there are no in-scope objects, then the underlying transaction is automatically aborted.