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.