When developing integrations, you will at some point work with non-transactional resources that maintain some sort of state, such as web service endpoints. As an exchange is processed through your routes, it will trigger calls to these endpoints, modifying that state.
We have already seen how a compensating operation may be triggered when an exception is thrown in the Fine-grained error handling using doTry…doCatch recipe. As an example, if the original operation called was place order, you may have to call a cancel order operation to unwind it.
Camel's DSL contains an onCompletion
statement, which allows you to define actions taken when a message completes successfully or fails at the level of a route.
This allows multiple levels of failure compensation to be written cleanly without nesting doTry..doCatch..doFinally
blocks.
This mechanism can also be used to implement a two stage pessimistic transaction process, such as:
Call an initial operation that you intend to...