You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ar...@apache.org on 2013/01/07 08:40:25 UTC

svn commit: r1429694 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation: AbstractBeanCreator.java AbstractInjecionTargetBeanCreator.java

Author: arne
Date: Mon Jan  7 07:40:24 2013
New Revision: 1429694

URL: http://svn.apache.org/viewvc?rev=1429694&view=rev
Log:
OWB-745: Delayed setting of injection targets

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java?rev=1429694&r1=1429693&r2=1429694&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractBeanCreator.java Mon Jan  7 07:40:24 2013
@@ -101,6 +101,11 @@ public abstract class AbstractBeanCreato
         this.webBeansContext = bean.getWebBeansContext();
     }
 
+    public Class<? extends Annotation> getScope()
+    {
+        return scope;
+    }
+
     /**
      * {@inheritDoc}
      */

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java?rev=1429694&r1=1429693&r2=1429694&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjecionTargetBeanCreator.java Mon Jan  7 07:40:24 2013
@@ -38,6 +38,7 @@ import javax.enterprise.inject.Disposes;
 import javax.enterprise.inject.Produces;
 import javax.enterprise.inject.Specializes;
 import javax.enterprise.inject.spi.AnnotatedField;
+import javax.enterprise.inject.spi.AnnotatedMember;
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedParameter;
 import javax.enterprise.inject.spi.AnnotatedType;
@@ -73,6 +74,7 @@ public abstract class AbstractInjecionTa
 {    
     
     private WebBeansContext webBeansContext;
+    private Set<AnnotatedMember<? super T>> injectionPoints = new HashSet<AnnotatedMember<? super T>>();
 
     /**
      * Creates a new instance.
@@ -217,10 +219,10 @@ public abstract class AbstractInjecionTa
         {
             if(Modifier.isPublic(annotatedField.getJavaMember().getModifiers()) && !annotatedField.isStatic())
             {
-                if(webBeansContext.getBeanManagerImpl().isNormalScope(getBean().getScope()))
+                if(webBeansContext.getBeanManagerImpl().isNormalScope(getScope()))
                 {
                     throw new WebBeansConfigurationException("If bean has a public field, bean scope must be defined as @Scope. Bean is : "
-                            + getBean().toString());
+                            + getBeanType().getName());
                 }
             }                
             
@@ -238,7 +240,7 @@ public abstract class AbstractInjecionTa
             Annotation[] anns = AnnotationUtil.asArray(annotatedField.getAnnotations());
             if(Modifier.isPublic(field.getModifiers()))
             {
-                if(!getBean().getScope().equals(Dependent.class))
+                if(!getScope().equals(Dependent.class))
                 {
                     throw new WebBeansConfigurationException("Error in annotated field : " + annotatedField
                                                     +" while definining injected field. If bean has a public modifier injection point, bean scope must be defined as @Dependent");
@@ -322,7 +324,7 @@ public abstract class AbstractInjecionTa
         
         }
 
-        AnnotationManager annotationManager = getBean().getWebBeansContext().getAnnotationManager();
+        AnnotationManager annotationManager = webBeansContext.getAnnotationManager();
 
         List<AnnotatedParameter<T>> annotatedParameters = annotatedMethod.getParameters();
         for (AnnotatedParameter<T> annotatedParameter : annotatedParameters)
@@ -364,7 +366,7 @@ public abstract class AbstractInjecionTa
             if(found)
             {
                 checkObserverMethodConditions((AnnotatedMethod<T>) annotatedMethod, annotatedMethod.getDeclaringType().getJavaClass());
-                if (getBean().getScope().equals(Dependent.class))
+                if (getScope().equals(Dependent.class))
                 {
                     //Check Reception
                      AnnotationUtil.getAnnotatedMethodFirstParameterWithAnnotation(annotatedMethod, Observes.class);
@@ -373,7 +375,7 @@ public abstract class AbstractInjecionTa
                      Reception reception = observes.notifyObserver();
                      if(reception.equals(Reception.IF_EXISTS))
                      {
-                         throw new WebBeansConfigurationException("Dependent Bean : " + getBean() + " can not define observer method with @Receiver = IF_EXIST");
+                         throw new WebBeansConfigurationException("Dependent Bean : " + getBeanType() + " can not define observer method with @Receiver = IF_EXIST");
                      }
                 }
                 
@@ -460,7 +462,7 @@ public abstract class AbstractInjecionTa
                     //WebBeansUtil.checkForValidResources(annotatedField.getDeclaringType().getJavaClass(), field.getType(), field.getName(), anns);
                     if(!Modifier.isStatic(field.getModifiers()))
                     {
-                        ResourceReference<T, Annotation> resourceRef = new ResourceReference<T, Annotation>(getBean().getBeanClass(), field.getName(),
+                        ResourceReference<T, Annotation> resourceRef = new ResourceReference<T, Annotation>(getBeanType(), field.getName(),
                                                                                                             (Class<T>)field.getType(), resourceAnnotation);
                         
                         //Can not define EL name
@@ -623,7 +625,19 @@ public abstract class AbstractInjecionTa
      */
     public AbstractInjectionTargetBean<T> getBean()
     {
-        return (AbstractInjectionTargetBean<T>)super.getBean();
+        AbstractInjectionTargetBean<T> bean = (AbstractInjectionTargetBean<T>)super.getBean();
+        for (AnnotatedMember<? super T> member : injectionPoints)
+        {
+            if (member instanceof AnnotatedField)
+            {
+                addFieldInjectionPointMetaData((AnnotatedField<?>) member);
+            }
+            else if (member instanceof AnnotatedMethod)
+            {
+                addMethodInjectionPointMetaData((AnnotatedMethod<?>) member);
+            }
+        }
+        return bean;
     }
 
     protected AnnotatedType<T> getAnnotated()