如何在运行时从观察到的事件中获取限定符

时间:2015-02-25 09:10:18

标签: java-ee java-ee-6

我想创建一个通用的观察者方法,它能够观察实现特定接口的任何事件,并且根据在应用程序启动时解析的配置文件,将用户重定向到特定页面。

此页面由事件类及其限定符定义。在运行时很容易上课,但我不知道应该在哪里放置InjectionPoint以获得事件限定符,或者是否有更好的方法。

说,我在@ApplicationScoped bean中有这个方法(Event是一个空接口,由所有具体的事件类实现):

public void processEvent(@Observes @Any Event pEvent)
{
    System.out.println(pEvent.getClass());
}

此时是否可以获得pEvent的实际限定符?

/编辑:

似乎CDI 1.1正是我需要的EventMetadata形式:http://docs.jboss.org/cdi/api/1.1/javax/enterprise/inject/spi/EventMetadata.html

可悲的是,WebSphere 8.5具有CDI 1.0并且缺少所述类。

1 个答案:

答案 0 :(得分:1)

遗憾的是,无论是在谷歌上搜索还是在“CDI事件元数据”(或其他类似搜索)的StackOverflow上搜索都会返回正确的结果。 实际上目前的问题都没有找到...... 您需要知道“EventMetaData”的确切名称(没有空格)。

我需要查看CDI 2.0工作组文档以找出这个EventMetaData类(从CDI 1.1开始可用)。如何使用它的一个例子:

public void onLifeCycleChange(@Observes @Any Customer customer,
        EventMetadata eventMetadata) {        
    Annotation annotation = new AnnotationLiteral<Foo>() {};        
    if (eventMetadata.getQualifiers().contains(annotation)) {
        reset();
    }
}

这个问题需要加以提高,以提高知名度(但由于缺乏声誉,我不能自己做)