[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