ObjectDatabase++ supports both the traditional transaction methodology of 2-phases commit, as well as deadlock prevention through a global locking order - a grayed phase commit. When design your database tables, you can nominate which order and which indexes are to be used to create a global order of locking.
Transaction that execute within the same order as the global locking order are given twenty times the length of time to complete its operation and transaction that go against the grain are let to be aborted sooner. Used correctly, transactions are latterly guaranteed to complete first time and not run into a continuing sequence of both transactions aborting.
The standard 2-phase transaction uses the ReadObjectmethod to gain object locks before re-executing the transaction with ReadObject, RewriteObject and DeleteObject. The in built global locking order is another feature of ObjectDatabase++ that allows correctly drafted transactions to be deadlock free when following the order. This allows the transaction to proceed while gaining object locks on the fly and hence the name grayed-phase commit.