आप CDI.current() का उपयोग करके BeanManager तक भी पहुंच सकते हैं, जो आपको कोड की अच्छी कुछ पंक्तियों को टाइप करने से बचाता है। उदाहरण here
CDI.current का उपयोग करना()
BeanManager bm = CDI.current().getBeanManager();
से लिया JNDI का उपयोग करना:
BeanManager bm = null;
try {
InitialContext context = new InitialContext();
bm = (BeanManager) context.lookup("java:comp/BeanManager");
} catch (Exception e) {
e.printStackTrace();
}
अब आप BeanManager आप या तो एक प्रकार के आधार पर देखने कार्य करके अपना CDI सेम का उपयोग कर सकते है या एक नाम-आधारित लुकअप।
प्रकार आधारित:
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);
नाम आधारित
Bean bean = bm.getBeans("crudService").iterator().next();
CreationalContext ctx = bm.createCreationalContext(bean);
CrudService crudService = bm.getReference(bean, bean.getClass(), ctx);
पूर्ण उदाहरण:
//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);
अद्यतन - आप CDI 1.1 उपयोग कर रहे हैं यह अब एक पंक्ति में प्राप्त किया जा सकता :
CrudService crudService = CDI.current().select(CrudService.class).get();
स्रोत
2015-03-10 18:13:57
मुझे http://dominikdorn.com/2010/04/cdi-weld-manual-bean-lookup/ – Sebi
पर एक अच्छा कोड उदाहरण मिला, एक नाम @ManagedBean (value = "MyManagedBean") POJO को JNDI के माध्यम से देखा जा सकता है यानी InitialContext.doLookup ("जावा: ऐप/मैप/माईमैनेज्डबीन") के साथ; javax.annotation का एपीआई दस्तावेज़ देखें। प्रबंधित बीन –
मैं उत्सुक था कि 'javax.annotation.ManagedBean' वास्तव में क्या है, यहां एक अच्छा जवाब है: http://stackoverflow.com/a/32420123/1341535 –