有没有办法使用其名称查找外部CDI bean或EJB会话?

时间:2014-12-11 15:09:17

标签: java java-ee jboss cdi

我正在使用jboss Seam框架来调用像Component.forName(“exampleBean”)这样的seam组件.newInstance();作为“exampleBean”我必须查找的bean的名称。 但是最近我迁移到JEE6并且我正在寻找在不使用JNDI上下文的情况下查找EJB或CDI bean的方法?

3 个答案:

答案 0 :(得分:1)

你正在寻找Deltaspike。

解析一个简单的上下文实例: MyBean myBean = BeanProvider.getContextualReference(MyBean.class,false); 如果查找给定接口的实现并且不需要实现,或者不要求存在具有给定限定符的实例(请参阅限定符示例以获取更多详细信息),则将true作为第二个参数传递[... ]

http://deltaspike.apache.org/documentation/core.html#_beanprovider

答案 1 :(得分:0)

要按名称查找CDI bean,可以使用BeanManager's getBeans method结合同一类的resolve方法。以下是如何使用它的示例:

    @Inject BeanManager beanManager;  //inject bean manager into the class

    void someMethod() {
        Set<Bean<E>> possibleBeans = beanManager.getBeans("aBeanName");
        Bean<E> bean = (Bean<E>) beanManager.resolve(possibleBeans);        
        E instance = beanManager.getContext(bean.getScope()).get(bean, beanManager.createCreationalContext(bean));
    }

答案 2 :(得分:0)

我认为BeanManager会解决你的问题 你可以看看here