2011-11-17 21 views

cevap

6

Sen JNDI (java:comp/BeanManager) üzerinden BeanManager arama sonra JSR-299 API yönetilen bir fasulye için bir bağlamsal başvuru almak için BeanManager kapalı asılı kullanabilirsiniz.

JSR-299 yönetilen fasulye doğrudan JNDI araması için mevcut değildir.

+3

http://dominikdorn.com/2010/04/cdi-weld-manual-bean-lookup/ – Sebi

+0

adresinde iyi bir kod örneği buldum @ManagedBean adlı bir A (value = "MyManagedBean") POJO, JNDI'ye bakılabilir. InitialContext.doLookup ile ("java: app/myapp/MyManagedBean"); javax.annotation.ManagedBean API'sini görebilmeniz için –

+0

'javax.annotation.ManagedBean' ifadesinin tam olarak ne olduğunu merak ettim: http://stackoverflow.com/a/32420123/1341535 –

16

Ayrıca, birkaç satır kod yazmanızı sağlayan CDI.current() kullanarak BeanManager'a da erişebilirsiniz. Örnek JNDI kullanarak CDI.current kullanma here

()

BeanManager bm = CDI.current().getBeanManager(); 

alınan:

BeanManager bm = null; 
try { 
    InitialContext context = new InitialContext(); 
    bm = (BeanManager) context.lookup("java:comp/BeanManager"); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Şimdi BeanManager bir tip tabanlı arama birini yaparak sizin CDI fasulye erişebilir var veya isim tabanlı bir arama.

Tipi tabanlı:

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); 

Adı tabanlı

Bean bean = bm.getBeans("crudService").iterator().next(); 
CreationalContext ctx = bm.createCreationalContext(bean); 
CrudService crudService = bm.getReference(bean, bean.getClass(), ctx); 

için tam bir örnek:

//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); 

GÜNCELLEME - Eğer CDI 1.1 kullanıyorsanız bu şimdi bir satır elde edilebilir :

CrudService crudService = CDI.current().select(CrudService.class).get(); 
+5

Benim durumumda WELD-001305 istisnasını önlemek için 'bean.getClass() 'yerine bean.getBeanClass()' kullanmak zorunda kaldım. –

+3

CDI.current() öğesini seçebilirsiniz. (CrudService.class) .get() CDI 1.1+ ile – ravthiru

+0

CDI.current() kullanırken kimlik doğrulama bilgilerini nasıl geçirebilirim? InitialContext() kullanırken constructor özelliklerinde Principal belirtebilirim. CDI.current() ile eşdeğer bir şeyi nasıl yaparım? –