When you are using Berkeley DB for XA transactions, there are a few restrictions you should be aware of:
Configure environment using the DB_CONFIG file
You must configure your environment via the DB_CONFIG file because an XA application or server cannot control the environment creation.
No in-memory logging
Upon return from xa_open, Berkeley DB checks to ensure there is no in-memory logging. If in-memory logging is detected, a FAILURE message is returned to the application.
No application-level child transactions
Berkeley DB verifies in the xa_start and xa_end calls that no XA transaction has a parent. If application-level child transactions are detected, a FAILURE message is returned to the application.
All database-level operations, such as create, rename, and remove, must be performed in local BDB transactions, not distributed XA transactions
Berkeley DB checks that there is no XA transaction currently active during these operations, and if detected, a FAILURE message is returned to the application.
Close cursors before a service invocation returns
Berkeley DB checks in the xa_end
call that the DB_TXN
has no active cursors open and and if detected, a FAILURE message is returned to the application.