[jboss-user] [JBoss Microcontainer Development] New message: "Re: AnnotatedElementMetaDataLoader component metadata optimization"
Kabir Khan
do-not-reply at jboss.com
Wed Feb 17 06:55:25 EST 2010
User development,
A new message was posted in the thread "AnnotatedElementMetaDataLoader component metadata optimization":
http://community.jboss.org/message/526747#526747
Author : Kabir Khan
Profile : http://community.jboss.org/people/kabir.khan@jboss.com
Message:
--------------------------------------------------------------
Ok, I'll go with the singleton. The problems I was seeing with returning the singleton was that its getValidTime() method returned null, adding a validTime field makes all tests in mdr and kernel pass. I'll add a simple test for that and commit what I have so far against https://jira.jboss.org/jira/browse/JBMDR-66
So far we avoid creating AnnotatedElementLoaders and ScopeKeys for the cases where a member does not have any annotations.
I think this could be taken a bit further, when a member has annotations, we currently create an AnnotatedElementLoader and thus a ScopeKey. As mentioned ScopeKeys are expensive to create due to creating their contained ConcurrentSkipListMap and this add call in the constructor which adds to the ConcurrentSkipListMap:
public ScopeKey(Scope scope)
{
addScope(scope);
}
Since it looks like there will only be one scope level in the key created by AnnotatedElementLoader, I am going to play with changing
private static final ScopeKey getScopeKey(AnnotatedElement annotated)
{
Scope scope;
if (annotated instanceof Class)
{
Class<?> clazz = Class.class.cast(annotated);
scope = new Scope(CommonLevels.CLASS, clazz);
}
else if (annotated instanceof Member)
{
Member member = (Member) annotated;
scope = new Scope(CommonLevels.JOINPOINT, member);
}
else
{
return ScopeKey.DEFAULT_SCOPE;
}
return new ScopeKey(scope);
}
to
private static final ScopeKey getScopeKey(AnnotatedElement annotated)
{
Scope scope;
if (annotated instanceof Class)
{
Class<?> clazz = Class.class.cast(annotated);
scope = new Scope(CommonLevels.CLASS, clazz);
return new ScopeKey(scope);
}
else if (annotated instanceof Member)
{
Member member = (Member) annotated;
scope = new Scope(CommonLevels.JOINPOINT, member);
return new SingleLevelScopeKey(scope);
}
else
{
return ScopeKey.DEFAULT_SCOPE;
}
}
where SingelLevelScopeKey will be a lightweight implementation of ScopeKey that does not have the internal ConcurrentSkipListMap. I might even be able to use the existing UnmodifiableScopeKey, so I will look into that first.
I think this could this also be used for the CLASS scope?
I need to check, but need to see if this could this also be used for the other metadata retrievals.
--------------------------------------------------------------
To reply to this message visit the message page: http://community.jboss.org/message/526747#526747
More information about the jboss-user
mailing list