[jboss-cvs] JBossAS SVN: r77012 - in projects/metadata/trunk/src: main/java/org/jboss/metadata/annotation/creator/client and 4 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Aug 13 11:09:04 EDT 2008


Author: emuckenhuber
Date: 2008-08-13 11:09:03 -0400 (Wed, 13 Aug 2008)
New Revision: 77012

Modified:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractCreator.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/client/ApplicationClient5MetaDataCreator.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/EjbJar30Creator.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/JBoss50Creator.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/Web25MetaDataCreator.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/AnnotationClientUnitTestCase.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/HandlerChainsTestCase.java
Log:
[JBMETA-69], [JBMETA-94] creators should check if they really need to process the annotated class

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractCreator.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractCreator.java	2008-08-13 11:49:28 UTC (rev 77011)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractCreator.java	2008-08-13 15:09:03 UTC (rev 77012)
@@ -67,9 +67,54 @@
     * @param element the classes
     * @return the metadata
     */
-   public abstract MD create(Collection<Class<?>> element);
+   public abstract MD create(Collection<Class<?>> classes);
    
    /**
+    * Process the meta data.
+    * 
+    * @param classes the classes
+    * @param metaData the meta data
+    */
+   protected <T extends MD> void processMetaData(Collection<Class<?>> classes, T metaData)
+   {
+      Collection<Class<?>> validatedClasses = validateClasses(classes);
+      // Don't create meta data for a empty collection
+      if(validatedClasses.isEmpty())
+         return;
+
+      // Process the meta data
+      for(Class<?> clazz : validatedClasses)
+         process(metaData, clazz);
+   }
+   
+   /**
+    * Check a class if it needs to be processed.
+    * 
+    * @param clazz the Class
+    * @return if it needs to be further processed
+    */
+   protected abstract boolean validateClass(Class<?> clazz);
+
+   
+   /**
+    * Check a set of classes if further processing is needed.
+    * 
+    * @param classes the classes
+    * @return a collection of checked classes
+    */
+   protected Collection<Class<?>> validateClasses(Collection<Class<?>> classes)
+   {
+      Collection<Class<?>> validatedClasses = new HashSet<Class<?>>();
+      for(Class<?> clazz : classes)
+      {
+         if(validateClass(clazz))
+            validatedClasses.add(clazz);
+      }
+      return validatedClasses;
+   }
+   
+   
+   /**
     * Add a Class<?> processor.
     * 
     * @param processor

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/client/ApplicationClient5MetaDataCreator.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/client/ApplicationClient5MetaDataCreator.java	2008-08-13 11:49:28 UTC (rev 77011)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/client/ApplicationClient5MetaDataCreator.java	2008-08-13 15:09:03 UTC (rev 77012)
@@ -38,27 +38,63 @@
 public class ApplicationClient5MetaDataCreator extends AbstractCreator<ApplicationClient5MetaData>
    implements Creator<Collection<Class<?>>, ApplicationClient5MetaData>
 {
+   
+   /** The main-class name. */
+   private String mainClassName = null;
+   
+   @Deprecated
    public ApplicationClient5MetaDataCreator(AnnotationFinder<AnnotatedElement> finder)
    {
       super(finder);
       
       addProcessor(new ApplicationClientProcessor(finder));
    }
-
+   
+   public ApplicationClient5MetaDataCreator(AnnotationFinder<AnnotatedElement> finder, String mainClassName)
+   {
+      this(finder);
+      if(mainClassName == null)
+         throw new IllegalStateException("null mainClassName");
+      
+      this.mainClassName = mainClassName;
+   }
+   
+   /**
+    * Create the meta data for a set of annotated classes.
+    * 
+    * @param classes
+    */
    public ApplicationClient5MetaData create(Collection<Class<?>> classes)
    {
       // Don't create meta data for a empty collection
       if(classes == null || classes.isEmpty())
          return null;
       
+      // Create the meta data
+      ApplicationClient5MetaData md = create();
+
+      processMetaData(classes, md);
+      
+      return md;
+   }
+   
+   protected ApplicationClient5MetaData create()
+   {
       ApplicationClient5MetaData metaData = new ApplicationClient5MetaData();
       metaData.setVersion("5");
+      return metaData;
+   }
 
-      // Process
-      for(Class<?> cls : classes)
-         process(metaData, cls);
+   protected boolean validateClass(Class<?> clazz)
+   {
+      // TODO - this check should be removed, this only exists for backward compatibility
+      if(mainClassName == null)
+         return true;
       
-      return metaData;
+      if(clazz.getName().equals(mainClassName))
+         return true;
+      
+      return false;
    }
-
+   
 }

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/EjbJar30Creator.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/EjbJar30Creator.java	2008-08-13 11:49:28 UTC (rev 77011)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/EjbJar30Creator.java	2008-08-13 15:09:03 UTC (rev 77012)
@@ -70,16 +70,26 @@
          return null;
       
       // Create meta data
-      EjbJar30MetaData metaData = new EjbJar30MetaData();
-      metaData.setVersion("3.0");
+      EjbJar30MetaData metaData = create();
       
-      // Process metadata
-      for(Class<?> cls : classes)
-         process(metaData, cls);
+      processMetaData(classes, metaData);
       
       return metaData;
    }
    
+   protected EjbJar30MetaData create()
+   {
+      EjbJar30MetaData metaData = new EjbJar30MetaData();
+      metaData.setVersion("3.0");
+      return metaData;
+   }
+   
+   protected boolean validateClass(Class<?> clazz)
+   {
+      // The AnnotationDeployer picks up only classes based on to the AnnotationContext, therefore no further validation 
+      return true;
+   }
+   
    /**
     * Get the annotation context. This overrides the inherited method,
     * as we just need the Type annotations. e.g. @Stateful, @Stateless, @Service

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/JBoss50Creator.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/JBoss50Creator.java	2008-08-13 11:49:28 UTC (rev 77011)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ejb/jboss/JBoss50Creator.java	2008-08-13 15:09:03 UTC (rev 77012)
@@ -73,17 +73,27 @@
          return null;
       
       // Create meta data
+      JBoss50MetaData metaData = create();
+      
+      processMetaData(classes, metaData);
+
+      return metaData;
+   }
+   
+   protected JBoss50MetaData create()
+   {
       JBoss50MetaData metaData = new JBoss50MetaData();
       metaData.setVersion("3.0");
       metaData.setEjbVersion("3.0");
-      
-      // Process classes
-      for(Class<?> cls : classes)
-         process(metaData, cls);
-
       return metaData;
    }
    
+   protected boolean validateClass(Class<?> clazz)
+   {
+      // The AnnotationDeployer picks up only classes based on to the AnnotationContext, therefore no further validation
+      return true;
+   }
+   
    /**
     * Get the annotation context. This overrides the inherited method,
     * as we just need the Type annotations. e.g. @Stateful, @Stateless, @Service

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/Web25MetaDataCreator.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/Web25MetaDataCreator.java	2008-08-13 11:49:28 UTC (rev 77011)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/web/Web25MetaDataCreator.java	2008-08-13 15:09:03 UTC (rev 77012)
@@ -21,9 +21,19 @@
  */
 package org.jboss.metadata.annotation.creator.web;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.AnnotatedElement;
 import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
 
+import javax.ejb.MessageDriven;
+import javax.ejb.Stateful;
+import javax.ejb.Stateless;
+
+import org.jboss.ejb3.annotation.Consumer;
+import org.jboss.ejb3.annotation.Service;
+import org.jboss.logging.Logger;
 import org.jboss.metadata.annotation.creator.AbstractCreator;
 import org.jboss.metadata.annotation.creator.Creator;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
@@ -39,6 +49,24 @@
 public class Web25MetaDataCreator extends AbstractCreator<WebMetaData>
       implements Creator<Collection<Class<?>>, Web25MetaData>
 {
+ 
+   /** The ignore type annotations */
+   private static final Set<Class<? extends Annotation>> ignoreTypeAnnotations;
+   
+   /** The Logger. */
+   private static final Logger log = Logger.getLogger(Web25MetaDataCreator.class);
+   
+   static
+   {
+      // Ignoring classes with the the following type annotations
+      ignoreTypeAnnotations = new HashSet<Class<? extends Annotation>>();
+      ignoreTypeAnnotations.add(Stateful.class);
+      ignoreTypeAnnotations.add(Stateless.class);
+      ignoreTypeAnnotations.add(MessageDriven.class);
+      ignoreTypeAnnotations.add(Service.class);
+      ignoreTypeAnnotations.add(Consumer.class);
+   }
+   
    public Web25MetaDataCreator(AnnotationFinder<AnnotatedElement> finder)
    {
       super(finder);
@@ -52,14 +80,33 @@
          return null;
       
       // Create meta data
+      Web25MetaData metaData = create();
+
+      processMetaData(classes, metaData);
+      
+      return metaData;
+   }
+   
+   protected Web25MetaData create()
+   {
       Web25MetaData metaData = new Web25MetaData();
       metaData.setVersion("2.5");
-
-      // Process classes
-      for (Class<?> cls : classes)
-         process(metaData, cls);
-
       return metaData;
    }
+   
+   protected boolean validateClass(Class<?> clazz)
+   {
+      boolean trace = log.isTraceEnabled();
+      for(Class<? extends Annotation> annotation : ignoreTypeAnnotations)
+      {
+         if(finder.getAnnotation(clazz, annotation) != null)
+         {
+            if(trace)
+               log.trace("won't process class: " + clazz + ", because of the type annotation: "+ annotation);
+            return false;
+         }
+      }
+      return true;
+   }
 
 }

Modified: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/AnnotationClientUnitTestCase.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/AnnotationClientUnitTestCase.java	2008-08-13 11:49:28 UTC (rev 77011)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/AnnotationClientUnitTestCase.java	2008-08-13 15:09:03 UTC (rev 77012)
@@ -82,6 +82,8 @@
  */
 public class AnnotationClientUnitTestCase extends AbstractJavaEEMetaDataTest
 {
+   private static final String classMainName = "org.jboss.test.metadata.annotation.client.basic.Client"; 
+   
    public static SchemaBindingResolver initResolver()
    {
       DefaultSchemaResolver resolver = new DefaultSchemaResolver();
@@ -108,7 +110,7 @@
       AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
       
       Collection<Class<?>> classes = PackageScanner.loadClasses();
-      ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder);
+      ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder, classMainName);
       ApplicationClient5MetaData clientMD = creator.create(classes);
       assertEquals(3, clientMD.getAnnotatedEjbReferences().size());
 
@@ -222,7 +224,7 @@
    {
       AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
       Collection<Class<?>> classes = PackageScanner.loadClasses();
-      ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder);
+      ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder, classMainName);
       ApplicationClient5MetaData clientMD = creator.create(classes);
       
       ApplicationClient5MetaData xmlMD = super.unmarshal(ApplicationClient5MetaData.class);
@@ -288,7 +290,7 @@
    {
          AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
          Collection<Class<?>> classes = PackageScanner.loadClasses();
-         ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder);
+         ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder, classMainName);
          ApplicationClient5MetaData clientMD = creator.create(classes);         
          
          ApplicationClient5MetaData xmlMD = super.unmarshal("AnnotationClient_testXmlMerge.xml", ApplicationClient5MetaData.class);
@@ -432,7 +434,7 @@
    {
       AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
       Collection<Class<?>> classes = PackageScanner.loadClasses();
-      ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder);
+      ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder, classMainName);
       
       ApplicationClient5MetaData annotatedMetaData = creator.create(classes);         
       ApplicationClient5MetaData specMetaData = super.unmarshal("AnnotationClient_testAnnotatedEnv.xml", ApplicationClient5MetaData.class);

Modified: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/HandlerChainsTestCase.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/HandlerChainsTestCase.java	2008-08-13 11:49:28 UTC (rev 77011)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/client/HandlerChainsTestCase.java	2008-08-13 15:09:03 UTC (rev 77012)
@@ -45,6 +45,8 @@
 public class HandlerChainsTestCase extends AbstractJavaEEMetaDataTest
 {
 
+   private static final String classMainName = "org.jboss.test.metadata.annotation.client.handlerchains.AnnotatedClient";
+   
    AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
    
    public HandlerChainsTestCase(String name)
@@ -76,7 +78,7 @@
       
       Collection<Class<?>> classes = new HashSet<Class<?>>();
       classes.add(AnnotatedClient.class);
-      ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder);
+      ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder, classMainName);
       ApplicationClient5MetaData clientMD = creator.create(classes);
       
       ServiceReferencesMetaData serviceRefs = clientMD.getServiceReferences();
@@ -111,7 +113,7 @@
       {
          Collection<Class<?>> classes = new HashSet<Class<?>>();
          classes.add(AnnotatedClientExternal.class);
-         ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder);
+         ApplicationClient5MetaDataCreator creator = new ApplicationClient5MetaDataCreator(finder, AnnotatedClientExternal.class.getName());
          creator.create(classes);
          
          fail("@HandlerChain points to a non existing host.");




More information about the jboss-cvs-commits mailing list