Title: Message Title
|
|
|
When firing an CDI event from another transaction synchronisation, the TransactionalObserverNotifier fails to defer the notification, because registering the TransactionSynchronizedRunnable fails with an "ARJUNA016082: Synchronizations are not allowed".
In my case this for example happens when I fire the event from a JPA Lifecycle listener, which is triggered by the flush call on the EntityManager through Hibernates JtaTransactionCoordinatorImpl bound in the JCAOrderedLastSynchronizationList.
The current behaviour has one very odd side effect: namely, the exception is swallowed in the TransactionalObserverNotifier, which then notifies a filtered set of observers, assuming that a rollback exception must have occurred. As a result, the `AFTER_FAILURE` observers are invoked and not the `AFTER_SUCCESS` observers, even though the transaction commits successfully (because the IllegalStateException was caused by not being able to register the synchronisation, and not due to the fact that the transaction failed altogether).
I think the error handling should be fixed, because it seems odd that AFTER_FAILURE observers get invoked for a successful transaction.
Furthermore it would be nice to actually support events with transactional observers to be fired from another synchronisation. I am not entirely sure whether it is feasible to support, but I am thinking having a couple of ideas:
* an implementation where we just register a synchronisation by default and handle the synchronisation from there, rather than registering the synchronisation on the transaction just in time * Hook on the JCAOrderedLastSynchronizationList instead of the Transaction, just as Hibernate seems to do * Register an interposed synchronisation rather than a regular synchronisation .
Some more background (a stack trace) can be found in the Stackoverflow issue: https://stackoverflow.com/questions/47953827/defer-transactionalobservernotifier-fails-with-arjuna016082-synchronizations-ar
|
|
|
|
|
|
_______________________________________________
weld-issues mailing list
weld-issues@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/weld-issues