[cdi-dev] Tests on observer resolution

John D. Ament john.d.ament at gmail.com
Mon Mar 17 07:56:39 EDT 2014

Correct, I don't believe best match is in any of the CDI spec.

However, this comes straight from Ken's book:

Say we have observer methods such as the following:

public void afterFictionBookAdded(@Observes @Book(FICTION)
  @Added Book book) { ... }

public void afterBookAdded(@Observes @Added Book book) { ... }

public void onBookEvent(@Observes Book book) { ... }

In such cases, only afterFictionBookAdded() will be called as it
matches the fired event with @Added and @Book(FICTION).

Now say we had an observer method such as the following:

public void afterAdding(@Observes @Any Book book) { ... }

The preceding observer method would also be notified, as @Any informs
Weld that we want to be notified of all Book events, irrespective of
what event qualifiers may be set.

On Mon, Mar 17, 2014 at 7:25 AM, Pete Muir <pmuir at redhat.com> wrote:
> There are no "best match" semantics in CDI I know of...
> On 16 Mar 2014, at 23:56, John D. Ament <john.d.ament at gmail.com> wrote:
>> Funny that this comes up now.  I actually hacked into my coworker's
>> code using an observer on any object.
>> I always assumed the use of @Any in the examples came from a different
>> version of the event observer pattern where it was a best match, not
>> an any match.
>> On Sun, Mar 16, 2014 at 1:51 PM, Pete Muir <pmuir at redhat.com> wrote:
>>> Yeah, agreed, this is something I've puzzled over before.
>>> On 6 Mar 2014, at 11:51, Antoine Sabot-Durand <antoine at sabot-durand.net> wrote:
>>>> Hi all
>>>> Yesterday when reviewing Martin Pull Request [1] regarding CDI 422 [2], we started a discussion about Observer Resolution about a possible issue in the spec. I will not repeat what was said on the IRC, if you're interested you can check the transcript [3] from 09:43.
>>>> To check if this was an issue or not I did some test this morning with different implementations. You can grab the tests on Github [4]
>>>> Good news : OWB and Weld (1.x and 2.x) have the same behavior : the one describe in the current spec, so there are no issue on this point.
>>>> The only strange thing for me is that @Any seems totally useless regarding events firing
>>>> If you write :
>>>> @Inject Event<Payload> payLoadEvent;
>>>> or
>>>> @Inject @Any Event<Payload> payLoadEvent;
>>>> You'll always be allowed call payLoadEvent.select(new QualifierLiteral()) in both case...
>>>> Perhaps this point can be discussed to see if we remove @Any from the examples in the spec or if we enforce its usage in the specification...
>>>> Antoine
>>>> [1] https://github.com/cdi-spec/cdi/pull/207
>>>> [2] https://issues.jboss.org/browse/CDI-422
>>>> [3] http://transcripts.jboss.org/channel/irc.freenode.org/%23jsr346/2014/%23jsr346.2014-03-05.log.html
>>>> [4] https://github.com/antoinesd/EventsTest
>>>> _______________________________________________
>>>> cdi-dev mailing list
>>>> cdi-dev at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>> _______________________________________________
>>> cdi-dev mailing list
>>> cdi-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/cdi-dev

More information about the cdi-dev mailing list