Changeset 6053 for trunk

Show
Ignore:
Timestamp:
11/14/11 12:08:03 (6 months ago)
Author:
mtld
Message:

CDI fix

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/pustefix-cdi/src/main/java/org/pustefixframework/cdi/CDIExtension.java

    r6019 r6053  
    2828 
    2929import javax.enterprise.event.Observes; 
    30 import javax.enterprise.inject.Any; 
    31 import javax.enterprise.inject.Default; 
    3230import javax.enterprise.inject.spi.AfterBeanDiscovery; 
     31import javax.enterprise.inject.spi.Annotated; 
    3332import javax.enterprise.inject.spi.AnnotatedType; 
    3433import javax.enterprise.inject.spi.Bean; 
     
    3938import javax.enterprise.inject.spi.ProcessBean; 
    4039import javax.enterprise.inject.spi.ProcessInjectionTarget; 
    41 import javax.enterprise.util.AnnotationLiteral; 
    4240import javax.inject.Named; 
    4341 
     
    6765        List<SpringBean> beans = getUnknownBeans(manager); 
    6866        for(SpringBean bean : beans) { 
    69             event.addBean(bean); 
     67            Set<Bean<?>> found = null; 
     68            if(bean.getName() != null) { 
     69                found = manager.getBeans(bean.getName()); 
     70            }  
     71            if(found == null || found.size() == 0) { 
     72                Annotation[] qualifiers = bean.getQualifiers().toArray(new Annotation[bean.getQualifiers().size()]); 
     73                found = manager.getBeans(bean.getBeanClass(), qualifiers); 
     74            } 
     75            if(found.size() == 0) { 
     76                event.addBean(bean); 
     77            } 
    7078        } 
    7179    } 
     
    8694        Set<InjectionPoint> ips = pit.getInjectionTarget().getInjectionPoints(); 
    8795        for(InjectionPoint ip : ips) { 
     96             
     97            BeanFactoryAdapter beanFactoryAdapter = beanFactoryAdapters.get(beanManager); 
    8898            Class<?> clazz = (Class<?>)ip.getType(); 
     99            Annotated annotated = ip.getAnnotated(); 
     100             
     101            String name = null; 
     102            Named named = annotated.getAnnotation(Named.class); 
     103            if(named != null) { 
     104                name = named.value(); 
     105                //if(name.equals("")) { 
     106                //    name = clazz.getSimpleName(); 
     107                //    name = Character.toLowerCase(name.charAt(0)) + name.substring(1); 
     108                //} 
     109            } 
     110             
    89111            AnnotatedType<?> annotatedType = beanManager.createAnnotatedType(clazz); 
    90             //TODO: check if really no CDI bean by additional criteria 
    91             if(!annotatedType.isAnnotationPresent(Named.class)) { 
    92                 Set<Type> beanTypes = annotatedType.getTypeClosure(); 
    93                 BeanFactoryAdapter beanFactoryAdapter = beanFactoryAdapters.get(beanManager); 
    94                 HashSet<Annotation> qualifiers = new HashSet<Annotation>(); 
    95                 qualifiers.add(new AnnotationLiteral<Any>() {}); 
    96                 qualifiers.add(new AnnotationLiteral<Default>() {}); 
    97                 Set<Class<? extends Annotation>> stereotypes = new HashSet<Class<? extends Annotation>>(); 
    98                 getUnknownBeans(beanManager).add(new SpringBean(beanFactoryAdapter, clazz.getSimpleName(), clazz, beanTypes, qualifiers, stereotypes)); 
     112            Set<Type> beanTypes = annotatedType.getTypeClosure(); 
     113             
     114            Set<Annotation> qualifiers = new HashSet<Annotation>(); 
     115            Set<Class<? extends Annotation>> stereoTypes = new HashSet<Class<? extends Annotation>>(); 
     116            Set<Annotation> annotations = ip.getAnnotated().getAnnotations(); 
     117            for(Annotation annotation: annotations) { 
     118                if(beanManager.isQualifier(annotation.annotationType())) { 
     119                    qualifiers.add(annotation); 
     120                } else if(beanManager.isStereotype(annotation.annotationType())) { 
     121                    stereoTypes.add(annotation.annotationType()); 
     122                } 
    99123            } 
     124             
     125            SpringBean bean = new SpringBean(beanFactoryAdapter, name, clazz, beanTypes, qualifiers, stereoTypes); 
     126             
     127            getUnknownBeans(beanManager).add(bean); 
     128             
    100129        } 
    101130    } 
    102      
     131 
    103132}