[jboss-cvs] JBossAS SVN: r81544 - in projects/jboss-reflect/trunk/src: test/java/org/jboss/test/beaninfo/support and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Nov 25 08:20:12 EST 2008
Author: alesj
Date: 2008-11-25 08:20:12 -0500 (Tue, 25 Nov 2008)
New Revision: 81544
Added:
projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/support/BeanInfoCache.java
Modified:
projects/jboss-reflect/trunk/src/main/java/org/jboss/beans/info/plugins/AbstractBeanInfoFactory.java
projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/test/BeanInfoCacheTestCase.java
Log:
[JBREFLECT-44]; fix BeanInfo cache II., use CL as key.
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/beans/info/plugins/AbstractBeanInfoFactory.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/beans/info/plugins/AbstractBeanInfoFactory.java 2008-11-25 13:04:52 UTC (rev 81543)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/beans/info/plugins/AbstractBeanInfoFactory.java 2008-11-25 13:20:12 UTC (rev 81544)
@@ -55,7 +55,7 @@
public class AbstractBeanInfoFactory implements BeanInfoFactory
{
/** The cache */
- protected Map<ClassInfo, Map<BeanAccessMode, BeanInfo>> cache = new WeakHashMap<ClassInfo, Map<BeanAccessMode, BeanInfo>>();
+ protected Map<ClassLoader, Map<ClassInfo, Map<BeanAccessMode, BeanInfo>>> cache = new WeakHashMap<ClassLoader, Map<ClassInfo, Map<BeanAccessMode, BeanInfo>>>();
protected static boolean isGetter(MethodInfo minfo)
{
@@ -133,13 +133,19 @@
synchronized (cache)
{
+ ClassLoader cl = classAdapter.getClassLoader();
ClassInfo classInfo = classAdapter.getClassInfo();
- Map<BeanAccessMode, BeanInfo> modeMap = cache.get(classInfo);
- if (modeMap != null)
+ Map<ClassInfo, Map<BeanAccessMode, BeanInfo>> classInfoMap = cache.get(cl);
+ Map<BeanAccessMode, BeanInfo> modeMap = null;
+ if (classInfoMap != null)
{
- BeanInfo info = modeMap.get(accessMode);
- if (info != null)
- return info;
+ modeMap = classInfoMap.get(classInfo);
+ if (modeMap != null)
+ {
+ BeanInfo info = modeMap.get(accessMode);
+ if (info != null)
+ return info;
+ }
}
Set<ConstructorInfo> constructors = getConstructors(classInfo);
@@ -152,10 +158,15 @@
Set<EventInfo> events = getEvents(classInfo);
BeanInfo result = createBeanInfo(classAdapter, accessMode, properties, constructors, methods, events);
+ if (classInfoMap == null)
+ {
+ classInfoMap = new WeakHashMap<ClassInfo, Map<BeanAccessMode, BeanInfo>>();
+ cache.put(cl, classInfoMap);
+ }
if (modeMap == null)
{
modeMap = new WeakValueHashMap<BeanAccessMode, BeanInfo>();
- cache.put(classInfo, modeMap);
+ classInfoMap.put(classInfo, modeMap);
}
modeMap.put(accessMode, result);
return result;
Copied: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/support/BeanInfoCache.java (from rev 81411, projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/support/BeanInfoEmpty.java)
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/support/BeanInfoCache.java (rev 0)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/support/BeanInfoCache.java 2008-11-25 13:20:12 UTC (rev 81544)
@@ -0,0 +1,31 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.beaninfo.support;
+
+/**
+ * BeanInfoCache.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ */
+public class BeanInfoCache
+{
+}
\ No newline at end of file
Property changes on: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/support/BeanInfoCache.java
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/test/BeanInfoCacheTestCase.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/test/BeanInfoCacheTestCase.java 2008-11-25 13:04:52 UTC (rev 81543)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/test/BeanInfoCacheTestCase.java 2008-11-25 13:20:12 UTC (rev 81544)
@@ -23,11 +23,14 @@
import java.lang.reflect.Method;
import java.lang.reflect.Type;
+import java.net.URL;
+import java.net.URLClassLoader;
import java.util.List;
import java.util.Set;
import junit.framework.Test;
import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.config.spi.Configuration;
import org.jboss.reflect.spi.ClassInfo;
import org.jboss.reflect.spi.TypeInfo;
import org.jboss.test.beaninfo.support.BeanInfoAnnotation;
@@ -64,6 +67,31 @@
assertBeanInfoCaching("", BeanInfoEmpty.class);
}
+ public void testClassLoaderCaching() throws Throwable
+ {
+ String className = BeanInfoEmpty.class.getName();
+ Class<?> clazz = Class.forName(className);
+ URL url1 = clazz.getProtectionDomain().getCodeSource().getLocation();
+ URL[] urls = {url1};
+ ClassLoader cl1 = new URLClassLoader(urls, null);
+
+ clazz = Class.forName(ClassInfo.class.getName());
+ URL url2 = clazz.getProtectionDomain().getCodeSource().getLocation();
+ urls = new URL[]{url1, url2};
+ ClassLoader cl2 = new URLClassLoader(urls, null);
+
+ Configuration configuration = getConfiguration();
+
+ ClassInfo ci1 = configuration.getClassInfo(className, cl1);
+ ClassInfo ci2 = configuration.getClassInfo(className, cl2);
+ assertEquals(ci1, ci2);
+
+ className = "org.jboss.test.beaninfo.support.BeanInfoCache";
+ BeanInfo bi1 = configuration.getBeanInfo(className, cl1);
+ BeanInfo bi2 = configuration.getBeanInfo(className, cl2);
+ assertFalse(bi1.equals(bi2));
+ }
+
private void assertBeanInfoCaching(String string, Class<?> clazz) throws Exception
{
Type type = getType(string, clazz);
More information about the jboss-cvs-commits
mailing list