[
https://issues.jboss.org/browse/WFLY-11450?page=com.atlassian.jira.plugin...
]
Jan-Willem Gmelig Meyling commented on WFLY-11450:
--------------------------------------------------
I'll create a PR with a reproducer. Hopefully I can rather easily figure out how to
enable JTA and JMS with a queue to write on, but I suppose ill find my way around rather
easily.
But basically the test will come down to:
* Start a transaction
* Registrer a synchronization that accesses an injected JMS context in the
beforeCompletion method.
* Don't interact with the JMS context.
* Try to create a producer from the JMSContext in the sync, notice that it will fail
because the delegate tries to register a synchronization that will do the clean up of the
jms context.
In reality my synchronization is not placed by myself, but Hibernate, which uses a synch
to flush the entities prior to commit, but I think that aspect is mostly irrelevant to the
reproducer.
Cannot get delegate of JMSContext during an beforeCompletion synch
------------------------------------------------------------------
Key: WFLY-11450
URL:
https://issues.jboss.org/browse/WFLY-11450
Project: WildFly
Issue Type: Bug
Components: CDI / Weld
Affects Versions: 14.0.1.Final, 8.0.0.CR1
Environment: WildFly 14.0.1.Final, narayana 5.9.0.Final
WildFly 8.0.0.CR1
Reporter: Jan-Willem Gmelig Meyling
Assignee: Matej Novotny
Priority: Minor
Attachments: ARJUNA016082.log
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)
*Use case*
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}}.
*Workaround*
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-s...
(Which refers to WildFly 8.0.0.CR1)
Back in the day, it seemed [~smarlow] suggested that an *interposed* synchronization
should be registered with the {{TransactionSynchronizationRegistry}} instead.
See the attached log for a full stack trace.
--
This message was sent by Atlassian Jira
(v7.12.1#712002)