[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