I tend to agree on the I hope we don't need it thought.  I'm thinking maybe we 
don't do either approach. 

For the large part, there's little difference between

    public void observe(final @Observes(after=A.class) SimpleEvent event)

..and

    public void observe(final @Observes AfterSimpleEvent event)

The one difference is the LinkedList and Collections.sort calls (and the equals 
and/or string compares it involves) would not affect Observer performance.

Seems like the cleaner API and the more performant.

Agreed we still want to be careful how many events we add.


-David

On Mar 21, 2014, at 2:30 PM, Romain Manni-Bucau <rmannibu...@gmail.com> wrote:

> yep both have advantages and drawbacks. One open question for me is
> Class or String but not int cause first thing you'll do if not the
> name (or class) is to look for all other adatpers...not efficient.
> Class makes a forced dependency, String make it optional. ATM I think
> Class is enough while we don't abuse of it in extensions like does
> arquillian (which uses priority because it can't do anything else).
> 
> I really hope we don't need it.
> 
> Trying to summarize my thoughts: while internal events I think api is
> nice and efficient but for the particular event we speak about we can
> just fire a CDI event and benefit from @Priority very soon ;). Would
> make everybody happy
> Romain Manni-Bucau
> Twitter: @rmannibucau
> Blog: http://rmannibucau.wordpress.com/
> LinkedIn: http://fr.linkedin.com/in/rmannibucau
> Github: https://github.com/rmannibucau
> 
> 
> 
> 2014-03-21 21:09 GMT+01:00 David Blevins <david.blev...@gmail.com>:
>> There are some downsides to reference based approaches as well.
>> 
>>    A.class:   public void observe(final @Observes SimpleEvent event)
>>    Z.class:   public void observe(final @Observes(after=A.class) SimpleEvent 
>> event)
>> 
>> If you later want to add B.class or C.class in the middle between A and Z, 
>> you can't.
>> 
>> As well you can't really express things like "low priority" and "high 
>> priority"
>> 
>>    EventLogger.class:   public void observe(final @Observes(priority=1) 
>> Object event)
>> 
>> 
>> On Mar 21, 2014, at 12:08 PM, Romain Manni-Bucau <rmannibu...@gmail.com> 
>> wrote:
>> 
>>> -1 to index, it is what is in deltaspike, spec etc and it doesn't work
>>> by design (see the spec already defined constants). For such an
>>> internal thing we know where we want to bind our event so I still
>>> think referencing the event is better.
>>> 
>>> Always better to say where you want to be than saying "i want to be
>>> here...almost" which is the index case.
>>> Romain Manni-Bucau
>>> Twitter: @rmannibucau
>>> Blog: http://rmannibucau.wordpress.com/
>>> LinkedIn: http://fr.linkedin.com/in/rmannibucau
>>> Github: https://github.com/rmannibucau
>>> 
>>> 
>>> 
>>> 2014-03-21 20:02 GMT+01:00 David Blevins <david.blev...@gmail.com>:
>>>> For Observers maybe we can find another way to achieve OPENEJB-2082 
>>>> without binding one observer directly to another:
>>>> 
>>>>  public void observe(final @Observes(after = SimpleObserver.class) 
>>>> SimpleEvent event)
>>>> 
>>>> I can see that creating just as much of a mess as having too many events.  
>>>> Having to sort each event is not exactly optimal for speed either.
>>>> 
>>>> If we were to take a sorting based approach, maybe we can take a page from 
>>>> the interceptor ordering of Java EE 7, based on unix start orders:
>>>> 
>>>>  @Priority(5)
>>>>  public void observe(final @Observes SimpleEvent event)
>>>> 
>>>> Default priority for all observers would be say, 5, like it is for a 
>>>> thread.  We would recommend 1-10 as the range and use a float rather than 
>>>> an int so it can be easy to break a tie without complex hacking.
>>>> 
>>>> Also as an optimization, we don't actually call the sort method unless one 
>>>> of the Observers actually has a priority.
>>>> 
>>>> Thoughts?
>>>> 
>>>> 
>>>> -David
>>>> 
>> 

Reply via email to