Is it possible to get a CDI bean instance inside a class created using the new keyword? Currently, we are making some improvements for the old application, and we always get a ContextNotActiveException every time we do a programmatic search on the CDI Singleton beans in our application.
Code to get the link:
public class ClassCreatedWithNew{ public void doSomething(){ MySingletonBean myBean = BeanManagerSupport.getInstance().getBean(MySingletonBean.class); } }
BeanManagerSupport.java
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; } }
java java-ee-6 cdi openwebbeans
Crx
source share