[cdi-dev] [JBoss JIRA] (CDI-537) Event firing on JavaEE component classes- JPA entity listener

Martin Kouba (JIRA) issues at jboss.org
Thu Oct 1 06:44:00 EDT 2015

    [ https://issues.jboss.org/browse/CDI-537?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13114102#comment-13114102 ] 

Martin Kouba commented on CDI-537:

Yes, I think we should do some work on the spec level. Both the JPA and CDI specs should be aware of the chicken-and-egg problem during bootstrap - the CDI container must support injection of JPA components but JPA entity listeners must be able to inject CDI beans as well. In other words, the entity listeners should be instantiated after the CDI container is initialized. Thus, ProcessInjectionTarget events for these components must be fired before the listeners exist and then later on used by the JPA. Note that the JPA spec states: 
bq. "The persistence provider is responsible for using the CDI SPI to create instances of the entity listener class" 

> Event firing on JavaEE component classes- JPA entity listener
> -------------------------------------------------------------
>                 Key: CDI-537
>                 URL: https://issues.jboss.org/browse/CDI-537
>             Project: CDI Specification Issues
>          Issue Type: Feature Request
>          Components: Java EE integration
>    Affects Versions: 1.2.Final
>            Reporter: Emily Jiang
> In CDI 1.2 spec
> 11.5.7. ProcessInjectionPoint event
> The container must fire an event for every injection point of every Java EE component class
> supporting injection that may be instantiated by the container at runtime, including every managed bean declared using @ManagedBean, EJB session or message-driven bean, bean, interceptor or decorator.
> The JavaEE component classes are mentioned in JavaEE platform EE.5-1, which includes servlets, servlet filters, entity listeners etc.
> My concern is about entity listeners in JPA. Eclipse link has done all the injection for entity listeners. It does not fire the event, @See createEntityListenerAndInjectDependancies(...)
> JPA spec section 3.5.1 does not mention this event requirement. How can the eclipse cdi implementation satisfy the CDI spec?
> [1] http://git.eclipse.org/c/eclipselink/eclipselink.runtime.git/tree/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/sessions/cdi/EntityListenerInjectionManagerImpl.java?h=2.6_WAS]
> I had an initial discussion with Jozef. 
> Jozef wrote: "
> Doing this using purely CDI APIs can be a bit tricky. One option that will most likely work is to combine BeanManager.resolveObserverMethods() method with a custom implementation of ProcessInjectionTarget interface. That way you can resolve the matching observer methods and then call their notify() method to deliver the event. Exception handling needs to be implemented to match the spec.
> We should update the spec to define a more direct route and for the JPA spec to mention this requirement."
> My response:
> "+1 on revisiting this on the CDI spec. I think adding an additional method on the BeanManager api, e.g. fireProcessInjectionTarget would be good. Effectively, it is to promote this very method on WeldManager to BeanManager."

This message was sent by Atlassian JIRA

More information about the cdi-dev mailing list