【问题标题】:is there any way to look up external CDI bean or EJB session using its name?有没有办法使用其名称查找外部 CDI bean 或 EJB 会话?
【发布时间】:2014-12-11 15:09:16
【问题描述】:

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

【问题讨论】:

    标签: java jakarta-ee jboss cdi


    【解决方案1】:

    您可能正在寻找 Deltaspike。

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

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

    【讨论】:

      【解决方案2】:

      要按名称查找 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));
          }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多