[jboss-cvs] JBossAS SVN: r112022 - in projects/aop/branches/Branch_2_2: aop/src/main/java/org and 15 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Aug 12 06:43:35 EDT 2011


Author: kabir.khan at jboss.com
Date: 2011-08-12 06:43:34 -0400 (Fri, 12 Aug 2011)
New Revision: 112022

Modified:
   projects/aop/branches/Branch_2_2/
   projects/aop/branches/Branch_2_2/aop/src/main/java/org/
   projects/aop/branches/Branch_2_2/aop/src/main/java/org/jboss/aop/classpool/ClassLoaderRepository.java
   projects/aop/branches/Branch_2_2/aop/src/main/java/org/jboss/aop/proxy/container/ContainerCache.java
   projects/aop/branches/Branch_2_2/aop/src/test/java/org/
   projects/aop/branches/Branch_2_2/asintegration-core/src/main/java/org/
   projects/aop/branches/Branch_2_2/asintegration-jmx/src/main/java/org/
   projects/aop/branches/Branch_2_2/asintegration-mc/src/main/java/org/
   projects/aop/branches/Branch_2_2/asintegration-mc/src/test/java/org/
   projects/aop/branches/Branch_2_2/asintegration-mc/src/test/resources/log4j.xml
   projects/aop/branches/Branch_2_2/asintegration-mc/src/test/resources/org/
   projects/aop/branches/Branch_2_2/aspects/src/main/java/org/
   projects/aop/branches/Branch_2_2/aspects/src/test/java/org/
   projects/aop/branches/Branch_2_2/aspects/src/test/java/test/
   projects/aop/branches/Branch_2_2/aspects/src/test/resources/aop-deployer_1_1.xsd
   projects/aop/branches/Branch_2_2/aspects/src/test/resources/org/
   projects/aop/branches/Branch_2_2/aspects/src/test/resources/test/
Log:
[JBAOP-807] Clean up containers on undeploy


Property changes on: projects/aop/branches/Branch_2_2
___________________________________________________________________
Added: svn:mergeinfo
   + /projects/aop/branches/JBoss_AOP_2_1_6_GA_CP:112005


Property changes on: projects/aop/branches/Branch_2_2/aop/src/main/java/org
___________________________________________________________________
Deleted: svn:mergeinfo
   - 

Modified: projects/aop/branches/Branch_2_2/aop/src/main/java/org/jboss/aop/classpool/ClassLoaderRepository.java
===================================================================
--- projects/aop/branches/Branch_2_2/aop/src/main/java/org/jboss/aop/classpool/ClassLoaderRepository.java	2011-08-12 10:29:18 UTC (rev 112021)
+++ projects/aop/branches/Branch_2_2/aop/src/main/java/org/jboss/aop/classpool/ClassLoaderRepository.java	2011-08-12 10:43:34 UTC (rev 112022)
@@ -33,6 +33,7 @@
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.advice.SecurityActions;
 import org.jboss.aop.instrument.Instrumentor;
+import org.jboss.aop.proxy.container.ContainerCache;
 import org.jboss.classpool.spi.ClassPoolRepositoryCallback;
 import org.jboss.logging.Logger;
 
@@ -137,6 +138,7 @@
                }
             }
          }
+         ContainerCache.cleanup(cl);
       }
    }
 

Modified: projects/aop/branches/Branch_2_2/aop/src/main/java/org/jboss/aop/proxy/container/ContainerCache.java
===================================================================
--- projects/aop/branches/Branch_2_2/aop/src/main/java/org/jboss/aop/proxy/container/ContainerCache.java	2011-08-12 10:29:18 UTC (rev 112021)
+++ projects/aop/branches/Branch_2_2/aop/src/main/java/org/jboss/aop/proxy/container/ContainerCache.java	2011-08-12 10:43:34 UTC (rev 112022)
@@ -31,6 +31,7 @@
 import org.jboss.aop.introduction.InterfaceIntroduction;
 import org.jboss.aop.metadata.SimpleMetaData;
 import org.jboss.metadata.spi.MetaData;
+import org.jboss.util.collection.WeakSet;
 
 /**
  *
@@ -42,6 +43,7 @@
    private static volatile int counter;
    public static final Object mapLock = new Object();
    private static WeakHashMap<Class<?>, HashMap<String, ClassProxyContainer>> containerCache = new WeakHashMap<Class<?>, HashMap<String, ClassProxyContainer>>();
+   private static WeakHashMap<ClassLoader, WeakSet> classesByLoader = new WeakHashMap<ClassLoader, WeakSet>();
 
    private AspectManager manager;
    private ContainerProxyCacheKey key;
@@ -96,6 +98,20 @@
       return factory;
    }
 
+   public static void cleanup(ClassLoader cl)
+   {
+      synchronized (mapLock)
+      {
+         WeakSet classes = classesByLoader.remove(cl);
+         if (classes != null) {
+            for (Object o : classes)
+            {
+               containerCache.remove(o);
+            }
+         }
+      }
+   }
+
    public ContainerProxyCacheKey getKey()
    {
       return key;
@@ -124,10 +140,10 @@
       }
       return classAdvisor.hasAspects();
    }
-   
+
    public boolean hasIntroductionsForClassAdvisor()
    {
-      return classAdvisor.getInterfaceIntroductions().size() > 0; 
+      return classAdvisor.getInterfaceIntroductions().size() > 0;
    }
 
    public boolean requiresInstanceAdvisor()
@@ -175,7 +191,7 @@
       }
       return null;
    }
-   
+
    private ClassProxyContainer getCachedContainer(AspectManager manager)
    {
       HashMap<String, ClassProxyContainer> managerContainers = containerCache.get(key.getClazz());
@@ -214,6 +230,17 @@
          containerCache.put(key.getClazz(), managerContainers);
       }
       managerContainers.put(key.getManagerFQN(), container);
+      ClassLoader cl = key.getClazz().getClassLoader();
+      if (cl != null)
+      {
+         WeakSet classes = classesByLoader.get(cl);
+         if (classes == null)
+         {
+            classes = new WeakSet();
+            classesByLoader.put(cl, classes);
+         }
+         classes.add(key.getClazz());
+      }
    }
 
    private InterfaceIntroduction getInterfaceIntroduction()
@@ -292,36 +319,36 @@
          instanceContainer = InstanceProxyContainer.createInstanceProxyContainer(classAdvisor, introduction, metaData);
       }
    }
-   
+
    public boolean hasMoreAdvicesOrIntroductionsForInstance()
    {
       if (classAdvisor == null)
       {
          throw new IllegalStateException("initialise() must be called first");
       }
-      
+
       if (instanceContainer == null)
       {
          return false;
       }
-      
+
       if (!classAdvisor.hasSameMethodAspectLength(instanceContainer))
       {
          return true;
       }
-      
+
       if (!classAdvisor.hasSameConstructorAspectLength(instanceContainer))
       {
          return true;
       }
-      
+
       if (instanceContainer.getInterfaceIntroductions().size() > classAdvisor.getInterfaceIntroductions().size())
       {
          return true;
       }
       return false;
    }
-   
+
 }
 
 


Property changes on: projects/aop/branches/Branch_2_2/aop/src/test/java/org
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: projects/aop/branches/Branch_2_2/asintegration-core/src/main/java/org
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: projects/aop/branches/Branch_2_2/asintegration-jmx/src/main/java/org
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: projects/aop/branches/Branch_2_2/asintegration-mc/src/main/java/org
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: projects/aop/branches/Branch_2_2/asintegration-mc/src/test/java/org
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: projects/aop/branches/Branch_2_2/asintegration-mc/src/test/resources/log4j.xml
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: projects/aop/branches/Branch_2_2/asintegration-mc/src/test/resources/org
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: projects/aop/branches/Branch_2_2/aspects/src/main/java/org
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: projects/aop/branches/Branch_2_2/aspects/src/test/java/org
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: projects/aop/branches/Branch_2_2/aspects/src/test/java/test
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: projects/aop/branches/Branch_2_2/aspects/src/test/resources/aop-deployer_1_1.xsd
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: projects/aop/branches/Branch_2_2/aspects/src/test/resources/org
___________________________________________________________________
Deleted: svn:mergeinfo
   - 


Property changes on: projects/aop/branches/Branch_2_2/aspects/src/test/resources/test
___________________________________________________________________
Deleted: svn:mergeinfo
   - 



More information about the jboss-cvs-commits mailing list