Expected budget: 300 hours
A transaction engine with industrial grade quality provides
- clean rollback if a problem happens. All objects come back to the previous state
- management of deadlocks between transactions. If there is a competing transaction, it should at last be able to rollback the current transaction. Ideally, it should wait until conflit is solved. In this ideal case, if there is a two way lock, the two-way lock should be solved by timing-out one of the transactions to free the other ones
- Transaction management performance penalty should be minimal. It should be limited to the cost of applying locks to objects, at least on the happy path.
The transaction management should rely to the minimum extent to the database transaction management. Generally:
- database transaction management is used only to place transaction flags on objects.
- Then, the application server will manage the transaction
A cleaning mechanism will monitor ongoing transactions, and will kill transactions that have been blocked for too long. This will involve persistence on the database of the ongoing transactions. This is expected to have a reasonnable performance impact