[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