[jboss-cvs] JBossAS SVN: r106601 - in trunk/weld-int/deployer-mc-int: src/main/java/org/jboss/weld/integration/deployer/mc and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jul 12 13:13:55 EDT 2010


Author: kabir.khan at jboss.com
Date: 2010-07-12 13:13:55 -0400 (Mon, 12 Jul 2010)
New Revision: 106601

Modified:
   trunk/weld-int/deployer-mc-int/pom.xml
   trunk/weld-int/deployer-mc-int/src/main/java/org/jboss/weld/integration/deployer/mc/WeldBeanMetaDataDeployerPlugin.java
   trunk/weld-int/deployer-mc-int/src/test/resources/org/jboss/test/deployers/test/McIntegrationTestCase.xml
Log:
[JBAS-8106] Use annotation scanner instead of jboss-reflect to look for the annotations

Modified: trunk/weld-int/deployer-mc-int/pom.xml
===================================================================
--- trunk/weld-int/deployer-mc-int/pom.xml	2010-07-12 15:24:12 UTC (rev 106600)
+++ trunk/weld-int/deployer-mc-int/pom.xml	2010-07-12 17:13:55 UTC (rev 106601)
@@ -348,6 +348,11 @@
       <scope>test</scope>
     </dependency>
     
+    <dependency>
+      <groupId>org.jboss.scanning</groupId>
+      <artifactId>scanning-deployers</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <profiles>

Modified: trunk/weld-int/deployer-mc-int/src/main/java/org/jboss/weld/integration/deployer/mc/WeldBeanMetaDataDeployerPlugin.java
===================================================================
--- trunk/weld-int/deployer-mc-int/src/main/java/org/jboss/weld/integration/deployer/mc/WeldBeanMetaDataDeployerPlugin.java	2010-07-12 15:24:12 UTC (rev 106600)
+++ trunk/weld-int/deployer-mc-int/src/main/java/org/jboss/weld/integration/deployer/mc/WeldBeanMetaDataDeployerPlugin.java	2010-07-12 17:13:55 UTC (rev 106601)
@@ -21,6 +21,8 @@
 */ 
 package org.jboss.weld.integration.deployer.mc;
 
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -38,15 +40,12 @@
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.deployers.vfs.spi.deployer.helpers.BeanMetaDataDeployerPlugin;
-import org.jboss.kernel.plugins.config.Configurator;
 import org.jboss.kernel.plugins.dependency.AbstractKernelControllerContext;
-import org.jboss.kernel.spi.config.KernelConfigurator;
-import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.kernel.weld.metadata.api.annotations.Weld;
 import org.jboss.kernel.weld.plugins.annotations.WeldEnabledBeanAnnotationPluginInitializer;
-import org.jboss.reflect.spi.AnnotatedInfo;
-import org.jboss.reflect.spi.ClassInfo;
+import org.jboss.scanning.annotations.spi.AnnotationIndex;
+import org.jboss.scanning.annotations.spi.Element;
 import org.jboss.weld.integration.deployer.DeployersUtils;
 
 /**
@@ -63,6 +62,8 @@
 {
    public static int DEFAULT_ORDER = 50;
    
+   private final static String ATTACHMENT = "Annotated_$_" + WeldBeanMetaDataDeployerPlugin.class.getName();
+   
    private final int order;
    
    static
@@ -127,6 +128,14 @@
    
    private boolean isMcBeanWithWeldAnnotatedInjectionPoints(Controller controller, DeploymentUnit unit, BeanMetaData beanMetaData)
    {
+      if (checkBeanMetaDataForWeldAnnotationOverridesOnInjectionPoints(controller, unit, beanMetaData))
+         return true;
+
+      return checkAnnotationRepositoryForWeldAnnotationOnInjectionPoints(unit, beanMetaData);
+   }
+   
+   private boolean checkBeanMetaDataForWeldAnnotationOverridesOnInjectionPoints(Controller controller, DeploymentUnit unit, BeanMetaData beanMetaData)
+   {
       ConstructorMetaData con = beanMetaData.getConstructor();
       if (con != null)
       {
@@ -153,8 +162,54 @@
                return true;
          }
       }
+      return false;
+   }   
+   
+   private boolean checkAnnotationRepositoryForWeldAnnotationOnInjectionPoints(DeploymentUnit unit, BeanMetaData beanMetaData)
+   {
+      //This will currently not work if the deployment unit does not contain the classes referenced by the beanmetadata
       
-      //TODO - use the annotation scanner instead
+      while (unit.isComponent())
+         unit = unit.getParent();
+      
+      Set<String> classNames = (Set<String>)unit.getAttachment(ATTACHMENT);
+      if (classNames == null)
+      {
+         AnnotationIndex index = unit.getAttachment(AnnotationIndex.class);
+         if (index == null)
+            return false;
+         
+         Set<Element<Weld, ?>> result = new HashSet<Element<Weld, ?>>(1);
+         result.addAll(index.classHasConstructorAnnotatedWith(Weld.class));
+         result.addAll(index.classHasFieldAnnotatedWith(Weld.class));
+         result.addAll(index.classHasMethodAnnotatedWith(Weld.class));
+         
+         if (result.size() == 0)
+         {
+            classNames = Collections.emptySet();
+         }
+         else
+         {
+            classNames = new HashSet<String>();
+            for (Element<Weld, ?> item : result)
+               classNames.add(item.getOwnerClassName());
+         }
+         unit.addAttachment(ATTACHMENT, classNames);
+      }
+      try
+      {
+         return classNames.contains(beanMetaData.getBean());
+      }
+      catch (Exception e)
+      {
+         // AutoGenerated
+         throw new RuntimeException(e);
+      }
+   }
+   
+   /* I don't want to delete this yet, although the check for the annotations now comes from the annotation repository
+   private boolean checkClassInfoForWeldAnnotationOnInjectionPoints(Controller controller, DeploymentUnit unit, BeanMetaData beanMetaData)
+   {
       if (controller instanceof KernelController == false)
          throw new IllegalArgumentException(controller + " is not a KernelController");
       ClassInfo classInfo; 
@@ -193,7 +248,7 @@
             return true;
       }
       return false;
-   }
+   }*/
    
    private boolean hasWeldAnnotation(DeploymentUnit unit, FeatureMetaData fmd)
    {

Modified: trunk/weld-int/deployer-mc-int/src/test/resources/org/jboss/test/deployers/test/McIntegrationTestCase.xml
===================================================================
--- trunk/weld-int/deployer-mc-int/src/test/resources/org/jboss/test/deployers/test/McIntegrationTestCase.xml	2010-07-12 15:24:12 UTC (rev 106600)
+++ trunk/weld-int/deployer-mc-int/src/test/resources/org/jboss/test/deployers/test/McIntegrationTestCase.xml	2010-07-12 17:13:55 UTC (rev 106601)
@@ -43,4 +43,17 @@
 
   <bean name="RealTransactionManager" class="java.lang.Object"/>
 
+  <!--  Annotation scanning -->
+  <bean name="ScanningMDDeployer"  class="org.jboss.scanning.deployers.metadata.ScanningMetaDataDeployer"/>
+
+  <bean name="ScannerDeployer"  class="org.jboss.scanning.deployers.ScanningDeployer">
+    <property name="filter">
+      <bean  class="org.jboss.scanning.deployers.filter.ScanningDeploymentUnitFilter"/>
+    </property>
+    <incallback method="addFactory" />
+    <uncallback method="removeFactory" />
+  </bean>
+
+  <bean name="AnnScanningPlugin"  class="org.jboss.scanning.annotations.plugins.AnnotationsScanningPluginFactory"/>  
+
 </deployment>



More information about the jboss-cvs-commits mailing list