También puede acceder al BeanManager utilizando CDI.current(), lo que le permite escribir unas pocas líneas de código. Ejemplo tomado de here
Usando CDI.current()
BeanManager bm = CDI.current().getBeanManager();
Usando JNDI:
BeanManager bm = null;
try {
InitialContext context = new InitialContext();
bm = (BeanManager) context.lookup("java:comp/BeanManager");
} catch (Exception e) {
e.printStackTrace();
}
Ahora usted tiene la BeanManager puede acceder a los granos de CDI por hacer ya sea una búsqueda basada en el tipo de o una búsqueda basada en el nombre.
Tipo basa:
Bean<CrudService> bean = (Bean<CrudService>) bm.getBeans(CrudService.class).iterator().next();
CreationalContext<CrudService> ctx = bm.createCreationalContext(bean);
CrudService crudService = (CrudService) bm.getReference(bean, CrudService.class, ctx);
basado en nombres
Bean bean = bm.getBeans("crudService").iterator().next();
CreationalContext ctx = bm.createCreationalContext(bean);
CrudService crudService = bm.getReference(bean, bean.getClass(), ctx);
ejemplo completo:
//get reference to BeanManager
BeanManager bm = CDI.current().getBeanManager();
Bean<CrudService> bean = (Bean<CrudService>) bm.getBeans(CrudService.class).iterator().next();
CreationalContext<CrudService> ctx = bm.createCreationalContext(bean);
//get reference to your CDI managed bean
CrudService crudService = (CrudService) bm.getReference(bean, CrudService.class, ctx);
ACTUALIZACIÓN - Esto ahora se puede lograr en una sola línea si está utilizando CDI 1.1 :
CrudService crudService = CDI.current().select(CrudService.class).get();
Encontré un buen ejemplo de código en http://dominikdorn.com/2010/04/cdi-weld-manual-bean-lookup/ – Sebi
Un nombre @ManagedBean (value = "MyManagedBean") POJO se puede buscar a través de JNDI con ie InitialContext.doLookup ("java: app/myapp/MyManagedBean"); ver API doc de javax.annotation.ManagedBean –
Tenía curiosidad sobre qué es exactamente 'javax.annotation.ManagedBean', aquí hay una buena respuesta: http://stackoverflow.com/a/32420123/1341535 –