Underlying Design

Transaction management happens on the server, rather than the client side. Client-initiated transactions would involve complicated and largely unnecessary communication overhead. However, this imposes a requirement on the application to guarantee that the database data remains consistent across a series of client/server calls. In practice this usually involves deferring the database updates done by a business function until the last client/server interaction in a series.

Transactions typically have to encompass interactions with more than one resource manager even if legacy systems are not used. The server database is one resource manager and the queues used for deferred processing and workflow are another. In order to guarantee atomicity of a transaction that is distributed across multiple resource managers, a two-phase-commit protocol is required to coordinate the distributed transaction.