Dinam dinamicamente evento CDI com qualificador com membros

Estou tentando usar eventos CDI em meus serviços de back-end, no JBoss AS6 - idealmente com a máxima reutilização de códig

Posso ver os documentos que posso reduzir nas classes de anotação do qualificador que tenho que criar usando um qualificador com membros, por exemplo,

@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface Type {
    TypeEnum value();
}

Eu posso observar isso com

public void onTypeAEvent(@Observes @Type(TypeEnum.TYPEA) String eventMsg) {...}

Por enquanto, tudo bem. No entanto, para reduzir ainda mais o número de classes necessárias, desejo ter uma classe EventFirer, em que o qualificador do evento lançado seja dinâmico. Não há problema com qualificadores sem membros:

public class DynamicEventFirer {

    @Inject @Any private Event<String> event;

    public void fireEvent(AnnotationLiteral<?> eventQualifier){
        event.select(eventQualifier).fire("FIRED"); 
    }
}

then chamado como

dynamicEventFirer.fireEvent(new AnnotationLiteral<Type>() {});

Mas e quando o qualificador deve ter membros? Olhando o código para AnnotationLiteral, certamente está configurado para membros, e o comentário do elemento de classe tem o exemplo:

new PayByQualifier() { public PaymentMethod value() { return CHEQUE; } }

Isso faz sentido para mim - você está substituindo o método value () da interface de anotação. No entanto, quando tentei isso sozinho:

dynamicEventFirer.fireEvent(new AnnotationLiteral<Type>() {
    public TypeEnum value() {
        return TypeEnum.TYPEA;
    }
});

Eu recebo a exceção

java.lang.RuntimeException: class uk.co.jam.concept.events.MemberQualifierEventManager$1 does not implement the annotation type with members uk.co.jam.concept.events.Type
    at javax.enterprise.util.AnnotationLiteral.getMembers(AnnotationLiteral.java:69)
    at javax.enterprise.util.AnnotationLiteral.hashCode(AnnotationLiteral.java:281)
    at java.util.HashMap.getEntry(HashMap.java:344)
    at java.util.HashMap.containsKey(HashMap.java:335)
    at java.util.HashSet.contains(HashSet.java:184)
    at org.jboss.weld.util.Beans.mergeInQualifiers(Beans.java:939)
    at org.jboss.weld.bean.builtin.FacadeInjectionPoint.<init>(FacadeInjectionPoint.java:29)
    at org.jboss.weld.event.EventImpl.selectEvent(EventImpl.java:96)
    at org.jboss.weld.event.EventImpl.select(EventImpl.java:80)
    at uk.co.jam.concept.events.DynamicEventFirer.fireEvent(DynamicEventFirer.java:20)

Alguém pode ver o que estou fazendo de errado? MemberQualifierEventManager é um bean ApplicationScoped que chama DynamicEventFirer para disparar o evento.

brigado, Ben

questionAnswers(2)

yourAnswerToTheQuestion