Brandon, without looking at the full application with all the configs etc., everything i would say would be speculation.
One thing i can say for sure is that by adding @Tx to the XMPP adapter would not help.
TX is bound to the thread-local so anything on the stack of that thread is now under transaction
For example:
@Transactional
ComponentA -> ComponentB -> ComponentC -> . . .
In the above, because ComponentA is transactional, ComponentB and ComponentC are also transactional because they are part of the same stack.
Now in messaging that is not always true since it could be affected by the nature of your flow.
For example, if you break the single-theraded nature (e.g., by adding an executor or pollable channel in between the components) of your flow, it will also break your transactional boundaries.
But unless you are doing that I would honestly ask the question on Spring DataAccess forum or you can also try Hibernate forum.
