In the preceding code, if the redelivered flag was set on the message, we invoked the processCompensatingTransaction method to reverse any persisted or cached changes as a result of the prior message processing. In our case, the call to processInterimMes sage really doesn’t do anything except add the message payload to an internal Array List. However, in a real-world application, the call to processInterimMessage would probably execute some business logic and place data in a database table in preparation for the next message. Upon failure of the client, the messages would be redelivered, and the processCompensatingTransaction would clean up or reinitialize any application- specific data that may have been left in an unclean state. This is a good argument for message autonomy. Each message should be self-contained. When multiple messages need to depend on each other, the application should be written like a finite state machine where the results of