Extensions and produces
william.drai Nov 24, 2009 12:14 PMHi all,
I am trying to build an simple extension to collect classes annotated with a particular annotation during startup and provide this list to another bean later by injection.
public class ModelExtension implements Extension {
private ModuleEntityClasses moduleEntityClasses = new ModuleEntityClasses();
public void beforeBeanDiscovery(@Observes ProcessAnnotatedType<?> event) {
AnnotatedType<?> annotatedType = event.getAnnotatedType();
for (Annotation annotation : annotatedType.getAnnotations()) {
if (annotation.annotationType().isAnnotationPresent(Module.class)) {
// This is a model class
moduleEntityClasses.registerEntityClass(annotatedType.getJavaClass(), annotation.annotationType());
}
}
}
@Produces
public ModuleEntityClasses produceModuleEntityClasses() {
return moduleEntityClasses;
}
}
public class ModuleEntityClasses {
private Map<Class<? extends Annotation>, Set<Class<?>>> moduleEntityClasses = new HashMap<Class<? extends Annotation>, Set<Class<?>>>();
public void registerEntityClass(Class<?> entityClass, Class<? extends Annotation> annotationType) {
Set<Class<?>> entityClasses = moduleEntityClasses.get(annotationType);
if (entityClasses == null) {
entityClasses = new HashSet<Class<?>>();
moduleEntityClasses.put(annotationType, entityClasses);
}
entityClasses.add(entityClass);
}
public Set<Class<?>> getEntityClasses(Class<? extends Annotation> moduleMetadataClass) {
return moduleEntityClasses.get(moduleMetadataClass);
}
}
I would like to inject this ModuleEntityClasses in another bean with :
@Inject private ModuleEntityClasses moduleEntityClasses;
but I get this error :
Injection point has ambiguous dependencies. Injection point: field com.adequate.core.metadata.EntityMetadataStore.moduleEntityClasses; Qualifiers: [@javax.enterprise.inject.Default()]; Possible dependencies: [ org.jboss.weld.bean-flat-ManagedBean-com.adequate.core.jcdi.ModuleEntityClasses, org.jboss.weld.bean-flat-ProducerMethod-com.adequate.core.jcdi.ModelExtension.produceModuleEntityClasses() ], **ERROR**
I don't understand why ModuleEntityClasses is seen as a CDI bean by itself as it has absolutely no CDI annotation, I just would like to define it as a produced object.
Note: all classes are in the same jar inside an ear in JBoss 5.2.