Czy Mogę (i jak) wyszukać CDI managed beans używając javax.nazewnictwo.Context#lookup w module EJB?
Czy Mogę (a jeśli tak, to w jaki sposób?) lookup CDI managed Beans using javax.naming.Context#lookup
in EJB module?
@Named
, ale jaka jest nazwa JNDI CDI managed bean? Chcę je wyszukać z niezarządzanych Pojo, więc nie mogę użyć @Inject
. 2 answers
Możesz wyszukać BeanManager
za pomocą JNDI (java:comp/BeanManager
), a następnie użyć interfejsu API JSR-299 zawieszonego z BeanManager
, aby uzyskać kontekstowe odniesienie do zarządzanej fasoli.
Zarządzane fasole JSR-299 nie są dostępne dla bezpośredniego wyszukiwania JNDI.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-07 09:18:23
Możesz również uzyskać dostęp do Menedżera Beanmanagera za pomocą CDI.current (), która oszczędza wpisanie kilku linijek kodu. Przykład wzięty z tutaj
Za pomocą CDI.current ()
BeanManager bm = CDI.current().getBeanManager();
Użycie 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żesz uzyskać dostęp do fasoli CDI, wykonując wyszukiwanie oparte na typie lub na nazwie.
Oparte na typie:
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-based
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 - można to teraz osiągnąć w jednej linii, jeśli używasz CDI 1.1:
CrudService crudService = CDI.current().select(CrudService.class).get();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-31 00:59:49