Amacım, bir JSF2 ExceptionHandlerWrapper içinden tüm hizmet içi CDI yönetilen çekirdeklerinin (belirli bir üst sınıfın) bir koleksiyonunu elde etmektir. Özel durum işleyici bölümünün, sınıfın geçerli bir enjeksiyon hedefi olmadığı için önemli olduğunu unutmayın. Bu yüzden benim varsayımım (belki de yanlış) tek yolumun BeanManager aracılığıyla programlı olması.Yalnızca hizmet içi CDI tarafından yönetilen fasulye alın
BeanManager.getBeans'i kullanarak, tüm çekirdeklerin enjeksiyon için kullanılabilir kümesini başarıyla edinebilirim. Sorunum, BeanManager.getReference ürününün fasülyenin somut örneğini elde etmek için kullanıldığı zaman, zaten mevcut değilse, çekirdeğin oluşturulacağıdır. Bu yüzden sadece çıkarılan fasulyeleri geri getirecek bir alternatif arıyorum. Aşağıdaki kod ben fasulye örnekleri için bir get() metodunun iki sürümü vardır Context bulundu javadoc ile alay ... biz İşte benim başlangıç noktası
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;
}