[cdi-dev] [JBoss JIRA] (CDI-124) Clarify how the ObserverMethod interface should be used

Pete Muir (JIRA) jira-events at lists.jboss.org
Tue Sep 18 08:19:35 EDT 2012


     [ https://issues.jboss.org/browse/CDI-124?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Pete Muir resolved CDI-124.
---------------------------

    Fix Version/s: 1.1.PRD
                       (was: 1.1 (Proposed))
       Resolution: Done

    
> Clarify how the ObserverMethod interface should be used
> -------------------------------------------------------
>
>                 Key: CDI-124
>                 URL: https://issues.jboss.org/browse/CDI-124
>             Project: CDI Specification Issues
>          Issue Type: Clarification
>          Components: Events
>    Affects Versions: 1.0
>            Reporter: Jozef Hartinger
>            Assignee: Pete Muir
>             Fix For: 1.1.PRD
>
>
> The CDI specification (10.5) says:
> "For a custom implementation of the ObserverMethod interface defined in Section 11.1.3, "The ObserverMethod interface",
> the container must call getReception() and getTransactionPhase() to determine if the observer method is a conditional
> or transactional observer method, and notify() to invoke the method."
> However, calling ObserverMethod.getReception() is useless.
> An ObserverMethod implementation can be registered by an portable extension via the AfterBeanDiscovery event. The observer method may or may not be hosted by a CDI bean:
> a) A portable extension adds a different way of declaring an observer method on a CDI bean (e.g. using a different annotation like @Listens, or allowing a different method signature)
> b) A portable extension allows CDI observer methods to be registered on non-CDI beans (e.g. on a Spring Bean)
> In both cases, the container is not able find out if an instance of the hosting component has been created already - it does not know the hosting bean in (a) and it obviously does not know anything about the Spring bean (b).
> Therefore, if the observer method is conditional (ObserverMethod.getReception() returns IF_EXISTS), the container cannot decide whether it should invoke the observer method since it has no way of finding out whether the underlying instance exists or not.
> As a result, the container has to invoke ObserverMethod.notify() anyway. That's why I consider ObserverMethod.getReception() useless.
> To fix the problem, I think that the responsibility of deciding whether to invoke a conditional observer method should be shifted from container to the ObserverMethod implementation.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the cdi-dev mailing list