There is currently multiple ways to do same things.
To start a transaction wrapping multiple things outside of a \Tuleap\DB\DataAccessObject instance you can:
* use a \Tuleap\DB\DataAccessObject instance and call \Tuleap\DB\DataAccessObject->wrapAtomicOperations()
* use a \Tuleap\DB\TransactionExecutor instance
To start a transaction form within a \Tuleap\DB\DataAccessObject instance you also have multiple choices:
* call \Tuleap\DB\DataAccessObject->wrapAtomicOperations()
* call \Tuleap\DB\DataAccessObject->getDB()->tryFlatTransaction()
There is no good reason to expose multiple ways to do the same things, it is not sane and can be confusing for contributors. The API must be cleaned.