WebSphereUowTransactionManager stores an exception during the execution of a transactional method in UOWActionAdapter.exception
it would be rethrown during action.getResult()
but not if there is another exception during commit
in that case only the latter exception is thrown and the "inner" exception silently ignored
It would be nice if the previous exception could be logged, when it is shadowed by a subsequent commit failure.
Reasoning: We are currently analysing a problem, where a JMS-Publish takes a long time and aborts after some timeout. This is the inner exception. During this time the global transaction is rolled back, which leads to an exception during commit. The behaviour is okay, but we have "lost" the actual cause of the problem.
Of course there are workaround, e.g. using a LoggingInterceptor around the transaction method, but that would log any exception (that will usually still be there after commit/rollback) not only the "shadowed" ones.
From the perspective of our code paths, this is also an alignment issue: TransactionAspectSupport has such extra logging of swallowed exceptions for regular PlatformTransactionManager implementations but not for CallbackPreferringPlatformTransactionManager (where it is harder to implement due to the callback nature of the target, with the commit/rollback step automatically applied).
I'll add some extra logging in several places: debug-level when a callback exception is encountered (where we don't know the outcome yet), and error-level when we know it's been shadowed in a rollback case afterwards. We'll also store the original exception as application exception in our TransactionSystemException, like we do for the regular PlatformTransactionManager code path in TransactionAspectSupport.