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 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.