首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在非托管CDI中引用CDI

在非托管CDI中引用CDI
EN

Stack Overflow用户
提问于 2015-02-19 07:06:48
回答 1查看 1.6K关注 0票数 4

是否可以在使用new关键字创建的类中获取CDI的实例?我们目前正在对一个旧的应用程序进行一些增强,每次在应用程序中对CDI进行ContextNotActiveException查找时,我们都会得到一个方案性

获取参考的代码:

代码语言:javascript
复制
public class ClassCreatedWithNew{
     public void doSomething(){
         MySingletonBean myBean = BeanManagerSupport.getInstance().getBean(MySingletonBean.class);
     }
}

BeanManagerSupport.java

代码语言:javascript
复制
public class BeanManagerSupport {

    private static final Logger LOG = Logger.getLogger(BeanManagerSupport.class);

    private static final BeanManagerSupport beanManagerSupport = new BeanManagerSupport();

    private BeanManager beanManager;

    private BeanManagerSupport() {
        try {
            beanManager = InitialContext.doLookup("java:comp/BeanManager");
        } catch (NamingException e) {
            LOG.error("An error has occured while obtaining an instance of BeanManager", e);
        }
    }

    @SuppressWarnings("unchecked")
    public <T> T getBean(Class<T> clazz) {
        Iterator<Bean< ? >> iter = beanManager.getBeans(clazz).iterator();

        if (!iter.hasNext()) {
            throw new IllegalStateException("CDI BeanManager cannot find an instance of requested type " + clazz.getName());
        }

        Bean<T> bean = (Bean<T>) iter.next();

        return (T) beanManager.getContext(bean.getScope()).get(bean);
    }

    public static BeanManagerSupport getInstance(){
        return beanManagerSupport;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2015-04-09 09:50:01

有两种可能的解决方案。

  1. 如果您有JavaEE-7容器,那么可以使用CDI.current().get(MySingletonClass.class);
  2. 如果您有JavaEE-6容器,甚至是JavaEE应用程序,那么您可以使用Apache DeltaSpike BeanProvider。它尝试从JNDI查找BeanManager,但也执行其他技巧,如果没有完整的EE容器,这些技巧也能工作。例如在SE和单元测试中。

您还需要注意,不仅容器被引导,而且上下文也被正确激活。这通常是通过ServletListener完成的。如果你在一个EE容器中,那么他们会为你注册它。如果你使用的是普通的猫,码头等,那么你需要自己激活它。

请参阅Apache OpenWebBeans中的OpenWebBeans。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28600457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档