Bean not found on JBossAS 6
viniciuscarvalho.viniciusccarvalho.gmail.com Jul 26, 2011 7:11 AMHi there! I'm developing a CDI extension. And I've just hit a dead end.
my EAR has an EJB module with the extension and a WAR module with some beans.
My problem is that on JBossAS7 the following code works on my extension:
private void createConsumers(CamelContext ctx, BeanManager beanManager){
logger.debug("Creating consumer beans");
CamelPostProcessorHelper helper = new CustomCamelPostProcessorHelper(ctx);
for(Class<?> c : consumerBeans){
logger.debug("Creating consumer for class: " + c.getName());
Set<Bean<?>> beans = beanManager.getBeans(c);
logger.debug("Found " + beans.size() + " beans registred for type [" +c.getName()+"]");
for(Bean b : beans){
final CreationalContext<?> creationalContext = beanManager.createCreationalContext(b);
Object beanRef = beanManager.getReference(b, b.getBeanClass(), creationalContext);
String beanName = b.getName();
if(beanName == null){
beanName = b.getBeanClass().getName();
}
logger.debug("Scanning methods with @Consumes annotation for bean: " + beanName);
Set<Method> annotatedSet = getAnnotatedMethods(c);
logger.debug("Found " + annotatedSet.size() + " methods annotated with @Consumes for bean " + beanName);
for(Method m : annotatedSet){
Consumes con = getConsumesAnnotation(m.getAnnotations());
if(con != null){
String uri = con.uri();
logger.debug("Found @Consumes(uri="+uri+") at method " + m.getName());
logger.debug("Subscribing this method to camel context");
try {
helper.subscribeMethod(m, beanRef, beanName, uri, "");
} catch (Exception e) {
logger.error("Could not subscribe method " + m.getName()+"@"+c.getName() + " from " + beanName +"@" + beanRef.getClass().getName() + " with uri: " + uri,e);
}
}
}
}
}
}But on JBoss AS 6, the line: beanManager.getBeans(c) returns an empty set. For some reason, the beans on the webmodule are not found :(
On JBossAS7 it works fine. But, on AS7 the JIRA #WELD-891 makes deployment on AS7 not possible, since I can not shutdown the camel context using BeforeShutdown observers:
void beforeShutdown(@Observes BeforeShutdown shutdown, final BeanManager beanManager) {
Set<Bean<?>> beans = beanManager.getBeans(CDICamelContext.class);
CamelContext context = null;
for(Bean b : beans){
context = (CamelContext) beanManager.getReference(b, CamelContext.class, beanManager.createCreationalContext(b));
}
if(context != null){
try {
logger.debug("shutting down camel context");
context.stop();
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
}So I guess until issue 891 gets fixed, I'll have to stuck with AS6. Any ideas on why it can not find the beans from the war module?
Regards