मेरा लक्ष्य एक जेएसएफ 2 अपवाद हैडलरवापर के भीतर से सभी सेवा सीडीआई प्रबंधित बीन्स (एक निश्चित अभिभावक वर्ग के) का संग्रह प्राप्त करना है। ध्यान दें कि अपवाद हैंडलर भाग महत्वपूर्ण है क्योंकि कक्षा एक वैध इंजेक्शन लक्ष्य नहीं है। तो मेरी धारणा (शायद गलत) यह है कि मेरा एकमात्र मार्ग बीनमेनगर के माध्यम से प्रोग्रामेटिक है।केवल सेवा में सीडीआई प्रबंधित बीन्स
BeanManager.getBeans का उपयोग करके, मैं सफलतापूर्वक इंजेक्शन के लिए उपलब्ध सभी सेम का सेट प्राप्त कर सकता हूं। मेरी समस्या यह है कि बीनमेनर.getReference का उपयोग बीन के प्रासंगिक उदाहरण को प्राप्त करने के लिए करते समय, बीन बनाया जाएगा यदि यह पहले से मौजूद नहीं है। तो मैं एक विकल्प की तलाश में हूं जो केवल तत्काल बीन्स लौटाएगा। नीचे दिए गए कोड मेरी प्रारंभिक बिंदु
public List<Object> getAllWeldBeans() throws NamingException {
//Get the Weld BeanManager
InitialContext initialContext = new InitialContext();
BeanManager bm = (BeanManager) initialContext.lookup("java:comp/BeanManager");
//List all CDI Managed Beans and their EL-accessible name
Set<Bean<?>> beans = bm.getBeans(AbstractBean.class, new AnnotationLiteral<Any>() {});
List<Object> beanInstances = new ArrayList<Object>();
for (Bean bean : beans) {
CreationalContext cc = bm.createCreationalContext(bean);
//Instantiates bean if not already in-service (undesirable)
Object beanInstance = bm.getReference(bean, bean.getBeanClass(), cc);
beanInstances.add(beanInstance);
}
return beanInstances;
}