Exception thrown from CorrelationDataProvider breaks transaction management

Hello,

I’m not sure this can be considered a bug in Axon Framework 4.5.8 but I think it is something users should be made aware of by the documentation.

I recently learned the hard way that CorrelationDataProviders are a critical section of the UnitOfWork life-cycle because they are called during exception handling, more specifically when constructing the result message, right before handling rollback.

See this excerpt from the DefaultUnitOfWork class:

try {
    result = task.call();
    ...
} catch (Error | Exception e) {
    resultMessage = asResultMessage(e); // <-- Correlation data providers are called here
    if (rollbackConfiguration.rollBackOn(e)) {  // If an exception was thrown on the line before, rollback is not performed which leaves the transaction in a broken state.
        rollback(e);
        return resultMessage;
    }
}

As I said above, I’m not sure there’s an obvious way to handle this problem, but I believe the documentation should make it obvious that exception thrown from a CorrelationDataProvider is a no-no.

Thanks for raising this concern with us, @svolle.
Although chances are typically slim the CorrelationDataProvider throws an exception, the chance is still there, as you’ve noticed.

I think it wouldn’t hurt if Axon Framework would find a way to catch exceptions on that level to at the very least invoke the rollback method.
Would you mind drafting up an issue for this on AF’s GitHub, perhaps?

Thanks @Steven_van_Beelen, I created an enhancement issue as suggested:

1 Like

Thanks for this, @svolle!
I’ve replied under the issues you’ve constructed.

We’ll try to make it a part of 4.6.0, as a fix should be relatively trivial to add.
If you fancy doing a pull request for it, that would also be fine, of course.