Imagine 3 system components: 1. External ecommerce web service to process credit card transactions 2. Local Database to store processing results 3. Local UI (or win service) to perform payment processing of the customer order document
The external web service is obviously not transactional, so how to guarantee: 1. results to be eventually persisted to database when received from web service even in case the database is not accessible at that moment(network issue, db timeout) 2. prevent clients from processing the customer order while payment initiated by other client but results not successfully persisted to database yet(and waiting in some kind of recovery queue)
The aim is to do processing having non transactional system components and guarantee the transaction won't be repeated by other process in case of failure.
(please look at it in the context of post sell payment processing, where multiple operators might attempt manual payment processing; not web checkout application)