[cdi-dev] [JBoss JIRA] (CDI-271) Provide a way to inject Event metadata into an observer method

Pete Muir (JIRA) jira-events at lists.jboss.org
Mon Nov 26 13:29:21 EST 2012


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

Pete Muir commented on CDI-271:
-------------------------------

I'm not sure that it's right to reuse InjectionPoint, as it has other stuff on it that perhaps doesn't make sense (e.g. what do getMember() return, getAnnotated() , isDelegate() and isTransient() return)? And also, the case of doing the fire via BeanManager would not fit well.

How about introducing

{code}
public interface EventCaller {

   public Set<Annotation> getEventQualifiers();
   public Type getEventType();

}

Which could be injected into an event observer?
                
> Provide a way to inject Event metadata into an observer method
> --------------------------------------------------------------
>
>                 Key: CDI-271
>                 URL: https://issues.jboss.org/browse/CDI-271
>             Project: CDI Specification Issues
>          Issue Type: Feature Request
>          Components: Events
>            Reporter: Arne Limburg
>             Fix For: 1.1 (Proposed)
>
>
> Currently there is no way for observer methods to access the qualifiers of the fired event (i.e. to access @Nonbinding members).
> Consider the following example:
> {code}
> @Inject @MyQualifier
> Event<MyObject> event;
> public void fireEvent(MyObject object, MyTypeValue type) {
>     event.select(new MyTypeAnnotationLiteral(type)).fire(object);
> }
> {code}
> Currently no observer can receive the value of MyTypeValue. I suggest to introduce an interface AnnotatedEvent that extends Annotated and contains this information. It then could be injected via the InjectionPoint like this:
> {code}
> public void observeEvent(@Observes @MyType MyObject object, InjectionPoint ip) {
>     MyType annotation = ip.getAnnotated().getAnnotation(MyType.class);
>     MyTypeValue value = annotation.value();
>     ...
> }
> {code}

--
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