저의 목표는 JSF2 ExceptionHandlerWrapper 내에서 (특정 상위 클래스의) 모든 인 서비스 CDI 관리 빈 컬렉션을 얻는 것입니다. 클래스가 유효한 주입 대상 자체가 아니기 때문에 예외 처리기 부분이 중요합니다. 그래서 내 가정 (어쩌면 틀린)은 내 유일한 경로가 BeanManager를 통해 프로그래밍 방식이라는 것입니다.서비스중인 CDI 관리 빈 만 가져 오기
BeanManager.getBeans를 사용하여 주입에 사용할 수있는 모든 콩 세트를 성공적으로 가져올 수 있습니다. 내 문제는 BeanManager.getReference를 사용하여 Bean의 컨텍스트 인스턴스를 가져올 때 이미 존재하지 않는 경우 Bean이 작성된다는 것이다. 그래서 인스턴스화 된 빈을 반환 할 대안을 찾고 있습니다. 아래 코드는 내가 빈 인스턴스에 대한 GET() 메소드의 두 가지 버전이 있습니다 Context을 발견 Javadoc을 통해 파고 ... 우리가 여기 내 출발점
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;
}