我在Wildfly 10上使用Java EE,并希望创建一个名为@WorkflowFinished
的注释,该注释具有在发生事件时调用的方法。
我希望能够拥有多个使用此注释的@Stateless
EJB,当我的业务服务完成时,它应该搜索带有此注释的所有EJB并在其上调用方法。
我该如何解决这个问题?像这样:
public void process(SomeBean b){
b.doSomething();
List<?> listOfAnnotatedBeans = getAnnotatedEJBs(WorkflowFinished.class);
for(? ejb : listOfAnnotatedBeans){
ejb.someMethod(b);
}
}
如何在EJB上下文中执行此操作, NOT Spring ?
答案 0 :(得分:5)
您可以遍历当前&#34;上下文中的所有bean&#34;使用特定的注释或注释数组,如下所示:
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。