-
Enhancement
-
Resolution: Done
-
Major
-
5.9.2.Final
-
None
It would be beneficial to have the CDI-specific wrapper around Narayana's TransactionManagerImple that fires an @Initialized(TransactionScoped.class)-qualified event.
For the CDI, it's a good practice. The all built-in scopes have to provide this behaviour.
The CDI specification says (in section 6.7):
Portable extensions are encouraged to synchronously fire:
- an event with qualifier @Initialized(X.class) when a custom context is initialized, i.e. ready for use,
- an event with qualifier @BeforeDestroyed(X.class) when a custom context is about to be destroyed, i.e. before the actual destruction,
- an event with qualifier @Destroyed(X.class) when a custom context is destroyed, i.e. after the actual destruction,
where X is the scope type associated with the context.
A suitable event payload should be chosen.
The begin() method a Narayana-supplied but CDI-specific transaction manager wrapping Narayana's "ordinary" one should do:
@Inject @Initialized(TransactionScoped.class) private Event<Transaction> initializationBroadcaster; @Inject @BeforeDestroyed(TransactionScoped.class) private Event<Transaction> beforeDestructionBroadcaster; @Inject @Destroyed(TransactionScoped.class) private Event<TransactionManager> destructionBroadcaster; // in its begin() method: super.begin(); initializationBroadcaster.fire(this.getTransaction()); // in its commit() and rollback() methods and anywhere else I'm forgetting: beforeDestructionBroadcaster.fire(this.getTransaction()); super.commit(); // or rollback or whatever destructionBroadcaster.fire(this);
- is related to
-
WFLY-11858 [Wildfly16] CDI fails to inject InitialContext during startup
- Closed
-
JBTM-3416 JTA CDI to emit the CDI TransactionScoped @BeforeDestroy event
- Closed