[jboss-cvs] JBossAS SVN: r101067 - in projects/jboss-mdr/trunk/src: test/java/org/jboss/test/metadata/shared and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Feb 17 07:02:30 EST 2010
Author: kabir.khan at jboss.com
Date: 2010-02-17 07:02:30 -0500 (Wed, 17 Feb 2010)
New Revision: 101067
Modified:
projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/reflection/AnnotatedElementMetaDataLoader.java
projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/ComponentBasicAnnotationsTest.java
Log:
[JBMDR-66] When getting component metadata for an element that does not have annotations, avoid the overhead of having to create a new AnnotatedElementMetaDataLoader and its associated ScopeKey by returning a singleton representing no annotations
Modified: projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/reflection/AnnotatedElementMetaDataLoader.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/reflection/AnnotatedElementMetaDataLoader.java 2010-02-17 11:56:37 UTC (rev 101066)
+++ projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/reflection/AnnotatedElementMetaDataLoader.java 2010-02-17 12:02:30 UTC (rev 101067)
@@ -31,14 +31,21 @@
import org.jboss.logging.Logger;
import org.jboss.metadata.plugins.loader.BasicMetaDataLoader;
import org.jboss.metadata.plugins.loader.SimpleMetaDataLoader;
+import org.jboss.metadata.spi.loader.MetaDataLoader;
import org.jboss.metadata.spi.retrieval.AnnotationItem;
import org.jboss.metadata.spi.retrieval.AnnotationsItem;
+import org.jboss.metadata.spi.retrieval.MetaDataItem;
import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
+import org.jboss.metadata.spi.retrieval.MetaDatasItem;
+import org.jboss.metadata.spi.retrieval.ValidTime;
+import org.jboss.metadata.spi.retrieval.basic.BasicAnnotationsItem;
+import org.jboss.metadata.spi.retrieval.basic.BasicMetaDatasItem;
import org.jboss.metadata.spi.retrieval.simple.SimpleAnnotationItem;
import org.jboss.metadata.spi.retrieval.simple.SimpleAnnotationsItem;
import org.jboss.metadata.spi.scope.CommonLevels;
import org.jboss.metadata.spi.scope.Scope;
import org.jboss.metadata.spi.scope.ScopeKey;
+import org.jboss.metadata.spi.scope.ScopeLevel;
import org.jboss.metadata.spi.signature.ConstructorParametersSignature;
import org.jboss.metadata.spi.signature.ConstructorSignature;
import org.jboss.metadata.spi.signature.DeclaredMethodSignature;
@@ -137,6 +144,8 @@
log.trace("Constructor with signature " + signature + " does not exist on class " + clazz.getName());
return null;
}
+ if (constructor.getAnnotations().length == 0)
+ return NullAnnotatedElementComponentMetaDataLoader.INSTANCE;
return new AnnotatedElementMetaDataLoader(constructor);
}
else if (signature instanceof MethodSignature)
@@ -151,6 +160,8 @@
log.trace("Method with signature " + signature + " does not exist on class " + clazz.getName());
return null;
}
+ if (method.getAnnotations().length == 0)
+ return NullAnnotatedElementComponentMetaDataLoader.INSTANCE;
return new AnnotatedElementMetaDataLoader(method);
}
else if (signature instanceof DeclaredMethodSignature)
@@ -173,6 +184,8 @@
return null;
}
}
+ if (method.getAnnotations().length == 0)
+ return NullAnnotatedElementComponentMetaDataLoader.INSTANCE;
return new AnnotatedElementMetaDataLoader(method);
}
else if (signature instanceof MethodParametersSignature)
@@ -188,6 +201,8 @@
return null;
}
Annotation[][] paramAnnotations = method.getParameterAnnotations();
+ if (paramAnnotations[methodParametersSignature.getParam()].length == 0)
+ return NullAnnotatedElementComponentMetaDataLoader.INSTANCE;
return new SimpleMetaDataLoader(paramAnnotations[methodParametersSignature.getParam()]);
}
else if (signature instanceof ConstructorParametersSignature)
@@ -203,6 +218,8 @@
return null;
}
Annotation[][] paramAnnotations = constructor.getParameterAnnotations();
+ if (paramAnnotations[constructorParametersSignature.getParam()].length == 0)
+ return NullAnnotatedElementComponentMetaDataLoader.INSTANCE;
return new SimpleMetaDataLoader(paramAnnotations[constructorParametersSignature.getParam()]);
}
else if (signature instanceof FieldSignature)
@@ -217,6 +234,8 @@
log.trace("Field " + signature.getName() + " does not exist on class " + clazz.getName());
return null;
}
+ if (field.getAnnotations().length == 0)
+ return NullAnnotatedElementComponentMetaDataLoader.INSTANCE;
return new AnnotatedElementMetaDataLoader(field);
}
}
@@ -228,6 +247,8 @@
Method method = (Method)annotated;
Annotation[][] paramAnnotations = method.getParameterAnnotations();
MethodParametersSignature sig = (MethodParametersSignature) signature;
+ if (paramAnnotations[sig.getParam()].length == 0)
+ return NullAnnotatedElementComponentMetaDataLoader.INSTANCE;
return new SimpleMetaDataLoader(paramAnnotations[sig.getParam()]);
}
}
@@ -239,6 +260,8 @@
Constructor<?> constructor = Constructor.class.cast(annotated);
Annotation[][] paramAnnotations = constructor.getParameterAnnotations();
ConstructorParametersSignature sig = (ConstructorParametersSignature) signature;
+ if (paramAnnotations[sig.getParam()].length == 0)
+ return NullAnnotatedElementComponentMetaDataLoader.INSTANCE;
return new SimpleMetaDataLoader(paramAnnotations[sig.getParam()]);
}
}
@@ -280,4 +303,86 @@
}
return null;
}
+
+ /**
+ * http://community.jboss.org/thread/148203
+ * Singleton be returned by AnnotatedElementMetaDataLoader.getComponentMetaDataRetrieval() when there are no annotations for the member. This is to avoid
+ * the overhead of creating a new AnnotatedElementMetaDataLoader even in those cases, something which shows up to be a big bottleneck in AS startup time,
+ * mainly due to the creation of AnnotatedElementMetaDataLoader's ScopeKey.
+ */
+ private static class NullAnnotatedElementComponentMetaDataLoader implements MetaDataRetrieval
+ {
+ final static NullAnnotatedElementComponentMetaDataLoader INSTANCE = new NullAnnotatedElementComponentMetaDataLoader();
+ final static ScopeKey nullScopeKey = new ScopeKey(new Scope(CommonLevels.JOINPOINT, INSTANCE));
+
+ final BasicAnnotationsItem noANnnotationsItem = new BasicAnnotationsItem(null, new AnnotationItem[0]);
+ final BasicMetaDatasItem noMetaDatasItem = new BasicMetaDatasItem(null, new MetaDataItem[0]);
+ final ValidTime validTime = new ValidTime();
+
+ public MetaDataRetrieval getComponentMetaDataRetrieval(Signature signature)
+ {
+ return INSTANCE;
+ }
+
+ public ScopeKey getScope()
+ {
+ return nullScopeKey;
+ }
+
+ public MetaDataRetrieval getScopedRetrieval(ScopeLevel level)
+ {
+ return INSTANCE;
+ }
+
+ public ValidTime getValidTime()
+ {
+ return validTime;
+ }
+
+ public boolean isEmpty()
+ {
+ return true;
+ }
+
+ public <T extends Annotation> AnnotationItem<T> retrieveAnnotation(Class<T> annotationType)
+ {
+ return null;
+ }
+
+ public AnnotationsItem retrieveAnnotations()
+ {
+ return noANnnotationsItem;
+ }
+
+ public AnnotationsItem retrieveAnnotationsAnnotatedWith(Class<? extends Annotation> meta)
+ {
+ return noANnnotationsItem;
+ }
+
+ public AnnotationsItem retrieveLocalAnnotations()
+ {
+ return noANnnotationsItem;
+ }
+
+ public MetaDatasItem retrieveLocalMetaData()
+ {
+ return noMetaDatasItem;
+ }
+
+ public MetaDatasItem retrieveMetaData()
+ {
+ return noMetaDatasItem;
+ }
+
+ public <T> MetaDataItem<T> retrieveMetaData(Class<T> type)
+ {
+ return null;
+ }
+
+ public MetaDataItem<?> retrieveMetaData(String name)
+ {
+ return null;
+ }
+
+ }
}
Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/ComponentBasicAnnotationsTest.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/ComponentBasicAnnotationsTest.java 2010-02-17 11:56:37 UTC (rev 101066)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/ComponentBasicAnnotationsTest.java 2010-02-17 12:02:30 UTC (rev 101067)
@@ -100,6 +100,7 @@
protected void testEmpty(MetaData metaData) throws Exception
{
assertNotNull(metaData);
+ assertNotNull(metaData.getValidTime());
ExpectedAnnotations expectedAnnotations = emptyExpectedAnnotations();
assertNoAnnotation(metaData, NotPresentAnnotation.class);
More information about the jboss-cvs-commits
mailing list