package com.mycompany.controllers;
import java.util.Set;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class CDILocator {
private static BeanManager getBeanManager(){
try{
InitialContext initialContext =
new InitialContext();
return (BeanManager) initialContext.
lookup("java:comp/env/BeanManager");
}catch(NamingException e){
throw new RuntimeException(""
+ "No se puede encontrar BeanManager "
+ "en JNDI");
}
}
@SuppressWarnings("unchecked")
public static <T> T getBean(Class<T> clazz){
BeanManager bm = getBeanManager();
Set<Bean<?>> beans = (Set<Bean<?>>) bm.getBeans(clazz);
if (beans==null || beans.isEmpty()){
return null;
}
Bean<T> bean = (Bean<T>) beans.iterator().next();
CreationalContext<T> ctx =
bm.createCreationalContext(bean);
T o = (T) bm.getReference(bean, clazz, ctx);
return o;
}
}