2016-09-17 98 views
1

我在Wildfly 10上使用Java EE,並且想要創建一個名爲@WorkflowFinished的註釋,該註釋具有在發生某些事情時調用的方法。查找具有自定義註釋的所有bean

我希望能夠擁有多個由此註釋的@Stateless EJB,當我的業務服務完成時,它應該使用此註釋搜索所有EJB並調用它們的方法。

我該如何解決這個問題?事情是這樣的:

public void process(SomeBean b){ 
    b.doSomething(); 

    List<?> listOfAnnotatedBeans = getAnnotatedEJBs(WorkflowFinished.class); 

    for(? ejb : listOfAnnotatedBeans){ 
     ejb.someMethod(b); 
    } 
} 

如何做到這一點在EJB方面,不是春

回答

2

您可以通過當前的「上下文」與特定註釋或註釋數組像這樣的東西所有的豆類迭代:

import com.some.WorkflowFinished; 
import javax.enterprise.inject.spi.Bean; 
import javax.enterprise.inject.spi.BeanManager; 
import javax.enterprise.util.AnnotationLiteral; 

@Inject 
BeanManager beanManager; 
for (Bean<?> bean : beans) { 

Set<Bean<?>> beans = beanManager 
    .getBeans(Object.class,new AnnotationLiteral<WorkflowFinished>() {}); 

所以這可能是你的getAnnotatedEJBs方法的良好基礎。

請注意,您需要將批註保留策略設置爲RUNTIME。

+0

這工作正常,現在我怎麼從'Bean '得到我的課程。如果我將for循環中的'bean'強制轉換爲類實現的接口,那麼即使'bean.getBeanClass()'返回了正確的類,我也會得到一個異常。我如何從'Bean'中獲得實際的類實例? – mikeb