Hi,
I have a composite that needs to support quite a few CDI event generators and observer methods. I would like to minimize the number of injected Event fields and dynamically fire events using the Event.select() method. While the simple event case works:
@Qualifier @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.FIELD, ElementType.PARAMETER }) public static @interface MyQualifier { } ... @Inject @MyQualifier Event<MyEvent> myEvent; ... myEvent.fire(new MyEvent()) ... public void eventListener(@Observes @MyQualifier MyEvent event) {
I am having problems with more advanced event triggering. For example, if I try to use an extension of AnnotationLiteral to dynamically fire an event I receive this compilation error:
public static class MyQualifierAnnotationLiteral extends AnnotationLiteral<Topic>{ }
[ERROR] Line 129: No source code is available for type javax.enterprise.util.AnnotationLiteral<T>; did you forget to inherit a required module?
Also if I try to use an enumeration as an annotation parameter
public enum MyEnum{ SomeValue; } @Qualifier @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.FIELD, ElementType.PARAMETER }) public static @interface MyQualifier { MyEnum value(); } MyQualifierImpl implements MyQualifier{ MyEnum value(){ return MyEnum.SomeValue; } @Override public Class<? extends Annotation> annotationType() { return MyQualifier.class } } ... @Inject Event<MyEvent> myEvent; ... myEvent.select(new MyQualifierImpl() ).fire(new MyEvent()); ... public void eventListener(@Observes @MyQualifier(SomeValue) @MyQualifier MyEvent event) {
The qualifier is ignored and the observer method is invoked for every MyEvent fired.
Hi Aaron,
These features aren't supported currently but I think they would be good additions. Would you mind creating a feature request for us in JIRA
https://jira.jboss.org/browse/ERRAI
Cheers,
Christian