Dostęp do BeanManager można również uzyskać za pomocą CDI.current(), co pozwala zapisać kilka prostych wierszy kodu. Przykład wzięty z here
Korzystanie CDI.current()
BeanManager bm = CDI.current().getBeanManager();
Korzystanie JNDI:
BeanManager bm = null;
try {
InitialContext context = new InitialContext();
bm = (BeanManager) context.lookup("java:comp/BeanManager");
} catch (Exception e) {
e.printStackTrace();
}
teraz masz BeanManager można uzyskać dostęp do CDI fasolę, wykonując jedną odnośnika typu oparte lub wyszukiwanie oparte na nazwach.
Rodzaj oparta:
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);
Nazwa oparte
Bean bean = bm.getBeans("crudService").iterator().next();
CreationalContext ctx = bm.createCreationalContext(bean);
CrudService crudService = bm.getReference(bean, bean.getClass(), ctx);
Pełny przykład:
//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);
UPDATE - To może teraz zostać osiągnięte w jednej linii, jeśli używasz CDI 1.1 :
CrudService crudService = CDI.current().select(CrudService.class).get();
Znalazłem dobry przykład kodu na http://dominikdorn.com/2010/04/cdi-weld-manual-bean-lookup/ – Sebi
Nazwany @ManagedBean (value = "MyManagedBean") POJO można sprawdzić za pomocą JNDI za pomocą np. InitialContext.doLookup ("java: app/myapp/MyManagedBean"); zobacz dokumentacja API javax.annotation.ManagedBean –
Ciekawi mnie, czym dokładnie jest 'javax.annotation.ManagedBean', tutaj jest dobra odpowiedź: http://stackoverflow.com/a/32420123/1341535 –