The TransactionContext registers a TransactionScopeCleanup Synchronization with the active transaction. This prevents a TransactionContext to be opened from another beforeCompletion Synchronization, if the transacted JMSContext was not interacted with earlier in the transaction. (Because the synchronization cannot be placed)
I have a JPA post insert lifecycle listener that needs to publish an event. I'd like this to happen within the same XA transaction. The lifecycle listener is handled in during the pre-commit flush, itself invoked through another beforeCompletion transaction Synchronization.
Flush the EntityManager and don't leave the flushing up to the beforeCompletion synchronization.
The issue seems also described in the following Stack Overflow issue: https://stackoverflow.com/questions/21523534/jboss-wildfly-arjuna016082-synchronizations-are-not-allowed-when-sending-mess
(Which refers to WildFly 8.0.0.CR1)
Back in the day, it seemed Scott Marlow suggested that an interposed synchronization should be registered with the TransactionSynchronizationRegistry instead.
See the attached log for a full stack trace.