You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2011/03/06 19:49:29 UTC

svn commit: r1078546 - in /openwebbeans/trunk: webbeans-impl/src/main/java/org/apache/webbeans/config/ webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/ webbeans-impl/src/main/java/org/apache/webbeans/util/ webbeans-osgi/src/main/java/or...

Author: struberg
Date: Sun Mar  6 18:49:28 2011
New Revision: 1078546

URL: http://svn.apache.org/viewvc?rev=1078546&view=rev
Log:
OWB-538 extend ScannerService to collect all annotations of a class

This information gets used for determining if a bean can be lazily initialised

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
    openwebbeans/trunk/webbeans-osgi/src/main/java/org/apache/webbeans/osgi/scanner/OsgiMetaDataScannerService.java
    openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ScannerService.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java?rev=1078546&r1=1078545&r2=1078546&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/DefinitionUtil.java Sun Mar  6 18:49:28 2011
@@ -32,13 +32,9 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
 import javax.enterprise.context.Dependent;
 import javax.enterprise.context.NormalScope;
 import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Alternative;
-import javax.enterprise.inject.Stereotype;
 import javax.enterprise.inject.Typed;
 import javax.enterprise.inject.Disposes;
 import javax.enterprise.inject.Produces;
@@ -366,11 +362,9 @@ public final class DefinitionUtil
                 {
                     throw new WebBeansConfigurationException(exceptionMessage);
                 }
-                else
-                {
-                    found = true;
-                    component.setImplScopeType(annotation);
-                }
+
+                found = true;
+                component.setImplScopeType(annotation);
             }
             else
             {
@@ -380,11 +374,9 @@ public final class DefinitionUtil
                     {
                         throw new WebBeansConfigurationException(exceptionMessage);
                     }
-                    else
-                    {
-                        found = true;
-                        component.setImplScopeType(annotation);
-                    }                    
+
+                    found = true;
+                    component.setImplScopeType(annotation);
                 }
             }
         }
@@ -467,7 +459,7 @@ public final class DefinitionUtil
             {
                 component.setImplScopeType(new DependentScopeLiteral());
 
-                if (allowLazyInit && component instanceof ManagedBean && isPurePojoBean(component.getBeanClass()))
+                if (allowLazyInit && component instanceof ManagedBean && isPurePojoBean(component.getWebBeansContext(), component.getBeanClass()))
                 {
                     // take the bean as Dependent but we could lazily initialize it
                     // because the bean doesn't contains any CDI feature
@@ -518,7 +510,7 @@ public final class DefinitionUtil
                 {
                     component.setImplScopeType(new DependentScopeLiteral());
 
-                    if (allowLazyInit && component instanceof ManagedBean && isPurePojoBean(component.getBeanClass()))
+                    if (allowLazyInit && component instanceof ManagedBean && isPurePojoBean(component.getWebBeansContext(), component.getBeanClass()))
                     {
                         // take the bean as Dependent but we could lazily initialize it
                         // because the bean doesn't contains any CDI feature
@@ -539,16 +531,30 @@ public final class DefinitionUtil
      * @param cls the Class to check
      * @return <code>false</code> if the bean uses CDI annotations which define other beans somewhere
      */
-    private static boolean isPurePojoBean(Class<?> cls)
+    private static boolean isPurePojoBean(WebBeansContext webBeansContext, Class<?> cls)
     {
         Class<?> superClass = cls.getSuperclass();
 
-        if ( superClass == Object.class || !isPurePojoBean(superClass))
+        if ( superClass == Object.class || !isPurePojoBean(webBeansContext, superClass))
         {
             return false;
         }
 
+        Set<String> annotations = webBeansContext.getScannerService().getAllAnnotations(cls.getSimpleName());
+        if (annotations != null)
+        {
+            for (String ann : annotations)
+            {
+                if (ann.startsWith("javax.inject") || ann.startsWith("javax.enterprise") || ann.startsWith("javax.interceptors"))
+                {
+                    return false;
+                }
+            }
+
+        }
 
+        return true;
+/*X
         Annotation[] anns = cls.getAnnotations();
         for (Annotation ann : anns)
         {
@@ -617,6 +623,7 @@ public final class DefinitionUtil
         }
 
         return true;
+*/
     }
 
 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java?rev=1078546&r1=1078545&r2=1078546&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java Sun Mar  6 18:49:28 2011
@@ -55,6 +55,11 @@ public abstract class AbstractMetaDataDi
     protected boolean isBDAScannerEnabled = false;
     protected BDABeansXmlScanner bdaBeansXmlScanner;
 
+    /**
+     * determines if cross referencing already got performed or not
+     */
+    private boolean isCrossReferenzed = false;
+
     protected AbstractMetaDataDiscovery()
     {
         initAnnotationDB();
@@ -66,10 +71,9 @@ public abstract class AbstractMetaDataDi
         {
             annotationDB = new AnnotationDB();
             annotationDB.setScanClassAnnotations(true);
-            annotationDB.setScanFieldAnnotations(false);
-            annotationDB.setScanMethodAnnotations(false);
-            annotationDB.setScanParameterAnnotations(false);
-            annotationDB.crossReferenceMetaAnnotations();
+            annotationDB.setScanFieldAnnotations(true);
+            annotationDB.setScanMethodAnnotations(true);
+            annotationDB.setScanParameterAnnotations(true);
         }
         catch(Exception e)
         {
@@ -167,6 +171,13 @@ public abstract class AbstractMetaDataDi
         return annotationDB;
     }
 
+    @Override
+    public Set<String> getAllAnnotations(String className)
+    {
+        return annotationDB.getAnnotationIndex().get(className);
+    }
+
+
     /**
      * add the given beans.xml path to the locations list 
      * @param beansXmlLocation location path
@@ -186,6 +197,8 @@ public abstract class AbstractMetaDataDi
     @Override
     public Set<Class<?>> getBeanClasses()
     {
+        crossReferenceBeans();
+
         Set<Class<?>> classSet = new HashSet<Class<?>>();
         Map<String,Set<String>> index = this.annotationDB.getClassIndex();
         
@@ -202,12 +215,31 @@ public abstract class AbstractMetaDataDi
         }    
         
         return classSet;
-    }    
+    }
+
+    /**
+     * Ensure that all Annotation CrossReferences got resolved.
+     */
+    protected synchronized void crossReferenceBeans()
+    {
+        if (!isCrossReferenzed)
+        {
+            try
+            {
+                annotationDB.crossReferenceMetaAnnotations();
+            }
+            catch (AnnotationDB.CrossReferenceException e)
+            {
+                throw new RuntimeException(e);
+            }
+            isCrossReferenzed = true;
+        }
+    }
 
 
     /* (non-Javadoc)
-     * @see org.apache.webbeans.corespi.ScannerService#getBeanXmls()
-     */
+    * @see org.apache.webbeans.corespi.ScannerService#getBeanXmls()
+    */
     @Override
     public Set<String> getBeanXmls()
     {

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java?rev=1078546&r1=1078545&r2=1078546&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java Sun Mar  6 18:49:28 2011
@@ -1301,31 +1301,6 @@ public final class ClassUtil
         return true;
     }
 
-    public static boolean classHasMoreThanOneFieldWithName(Class<?> clazz, String fieldName)
-    {
-        Asserts.nullCheckForClass(clazz);
-        Asserts.assertNotNull(fieldName, "fieldName parameter can not be null");
-
-        Field[] fields = SecurityUtil.doPrivilegedGetDeclaredFields(clazz);
-        boolean ok = false;
-        for (Field field : fields)
-        {
-            if (field.getName().equals(fieldName))
-            {
-                if (ok)
-                {
-                    return true;
-                }
-                else
-                {
-                    ok = true;
-                }
-            }
-        }
-
-        return false;
-    }
-
     public static Field getFieldWithName(Class<?> clazz, String fieldName)
     {
         Asserts.nullCheckForClass(clazz);

Modified: openwebbeans/trunk/webbeans-osgi/src/main/java/org/apache/webbeans/osgi/scanner/OsgiMetaDataScannerService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-osgi/src/main/java/org/apache/webbeans/osgi/scanner/OsgiMetaDataScannerService.java?rev=1078546&r1=1078545&r2=1078546&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-osgi/src/main/java/org/apache/webbeans/osgi/scanner/OsgiMetaDataScannerService.java (original)
+++ openwebbeans/trunk/webbeans-osgi/src/main/java/org/apache/webbeans/osgi/scanner/OsgiMetaDataScannerService.java Sun Mar  6 18:49:28 2011
@@ -223,7 +223,14 @@ public class OsgiMetaDataScannerService 
     {
         return beanClasses;
     }
-    
+
+    @Override
+    public Set<String> getAllAnnotations(String className)
+    {
+        //X TODO this needs go get implemented
+        return null;
+    }
+
     @Override
     public BDABeansXmlScanner getBDABeansXmlScanner()
     {

Modified: openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ScannerService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ScannerService.java?rev=1078546&r1=1078545&r2=1078546&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ScannerService.java (original)
+++ openwebbeans/trunk/webbeans-spi/src/main/java/org/apache/webbeans/spi/ScannerService.java Sun Mar  6 18:49:28 2011
@@ -69,6 +69,13 @@ public interface ScannerService
      * @return bean classes
      */
     public Set<Class<?>> getBeanClasses();
+
+
+    /**
+     * @param className
+     * @return all Annotations used in the whole class
+     */
+    public Set<String> getAllAnnotations(String className);
     
     /**
      * Indicates if BDABeansXmlScanner is available. This method