[jboss-cvs] JBossAS SVN: r104194 - in projects/jboss-classpool/trunk: jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Apr 23 07:53:42 EDT 2010


Author: flavia.rainone at jboss.com
Date: 2010-04-23 07:53:41 -0400 (Fri, 23 Apr 2010)
New Revision: 104194

Added:
   projects/jboss-classpool/trunk/classpool/src/main/java/org/jboss/classpool/spi/ClassLoaderRegistryHandler.java
   projects/jboss-classpool/trunk/classpool/src/main/java/org/jboss/classpool/spi/ClassLoaderRegistryHandlerFactory.java
   projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClRegistryHandler.java
Removed:
   projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolRepository.java
Modified:
   projects/jboss-classpool/trunk/classpool/src/main/java/org/jboss/classpool/spi/ClassPoolRepository.java
   projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolDomain.java
   projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java
   projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolFactory.java
   projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/RegisterModuleCallback.java
   projects/jboss-classpool/trunk/jbosscl/src/test/resources/org/jboss/test/classpool/jbosscl/Common.xml
Log:
[CLASSPOOL-2] Added the notion of ClassLoaderRegistryHandlers, classes that handle the registering of ClassLoader in the ClassPoolRepository.
Renamed JBossClDelegatingClassPoolRepository to JBossClRegistryHandler. Now, this class is no longer public and is used only internally by RegisterModuleCallback to handle modules being unregistered, and by JBossClDelegatingClassPoolFactory to provide a new ClassLoaderRegistryHandler to ClassPoolRepository.

Added: projects/jboss-classpool/trunk/classpool/src/main/java/org/jboss/classpool/spi/ClassLoaderRegistryHandler.java
===================================================================
--- projects/jboss-classpool/trunk/classpool/src/main/java/org/jboss/classpool/spi/ClassLoaderRegistryHandler.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/classpool/src/main/java/org/jboss/classpool/spi/ClassLoaderRegistryHandler.java	2010-04-23 11:53:41 UTC (rev 104194)
@@ -0,0 +1,40 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.classpool.spi;
+
+import javassist.ClassPool;
+
+/**
+ * Handles registration of ClassLoaders in the {@link ClassPoolRepository}
+ * 
+ * @author  <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @version $Revision 1.1 $
+ * @see ClassLoaderRegistryHandlerFactory
+ */
+public interface ClassLoaderRegistryHandler
+{
+   public ClassPool registerClassLoader(ClassLoader classLoader);
+   
+   public void unregisterClassLoader(ClassLoader classLoader);
+   
+   public void setSuccessor(ClassLoaderRegistryHandler handler); 
+}
\ No newline at end of file

Added: projects/jboss-classpool/trunk/classpool/src/main/java/org/jboss/classpool/spi/ClassLoaderRegistryHandlerFactory.java
===================================================================
--- projects/jboss-classpool/trunk/classpool/src/main/java/org/jboss/classpool/spi/ClassLoaderRegistryHandlerFactory.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/classpool/src/main/java/org/jboss/classpool/spi/ClassLoaderRegistryHandlerFactory.java	2010-04-23 11:53:41 UTC (rev 104194)
@@ -0,0 +1,38 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.classpool.spi;
+
+/**
+ * Creates a ClassLoaderRegistryHandler for ClassPoolRepository.
+ * 
+ * This interface can be implemented by a ScopedClassPoolFactory, when this factory requires extra
+ * steps to be performed during registration of ClassLoaders at the ClassPoolRepository.
+ * 
+ * @see ClassPoolRepository#setClassPoolFactory(org.jboss.classpool.scoped.ScopedClassPoolFactory)
+ * 
+ * @author  <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @version $Revision 1.1 $
+ */
+public interface ClassLoaderRegistryHandlerFactory
+{
+   public ClassLoaderRegistryHandler create(ClassLoaderRegistryHandler successor);
+}
\ No newline at end of file

Modified: projects/jboss-classpool/trunk/classpool/src/main/java/org/jboss/classpool/spi/ClassPoolRepository.java
===================================================================
--- projects/jboss-classpool/trunk/classpool/src/main/java/org/jboss/classpool/spi/ClassPoolRepository.java	2010-04-23 11:30:53 UTC (rev 104193)
+++ projects/jboss-classpool/trunk/classpool/src/main/java/org/jboss/classpool/spi/ClassPoolRepository.java	2010-04-23 11:53:41 UTC (rev 104194)
@@ -30,6 +30,7 @@
 import javassist.ClassPool;
 
 import org.jboss.classpool.scoped.ScopedClassPool;
+import org.jboss.classpool.scoped.ScopedClassPoolFactory;
 import org.jboss.classpool.scoped.ScopedClassPoolRepositoryImpl;
 
 
@@ -47,7 +48,7 @@
    
    private volatile List<ClassPoolRepositoryCallback> callbacks;
    
-   private final  ConcurrentMap<ClassLoader, Boolean> currentClassLoaders = new ConcurrentHashMap<ClassLoader, Boolean>();
+   private ClassLoaderRegistryHandler registryHandler;
    
    /**
     * Returns the singleton instance.
@@ -65,10 +66,29 @@
    protected ClassPoolRepository()
    {
       super(AbstractClassPoolFactory.getSystemClassPool());
-      setClassPoolFactory(new AbstractClassPoolFactory());
+      registryHandler = new DefaultClassLoaderRegistryHandler();
+      super.setClassPoolFactory(new AbstractClassPoolFactory());
    }
    
    /**
+    * Defines the ClassPoolFactory that will be used by this repository.
+    * @param factory the ClassPoolFactory that is responsible for creating ClassPools for this repository.
+    *                if this factory implements {@link ClassLoaderRegistryHandlerFactory} interface,
+    *                it will also be responsible for creating a ClassLoaderRegistryHandler for this
+    *                repository
+    */
+   @Override
+   public void setClassPoolFactory(ScopedClassPoolFactory factory)
+   {
+      if (factory instanceof ClassLoaderRegistryHandlerFactory)
+      {
+         ClassLoaderRegistryHandlerFactory registryHandlerFactory = (ClassLoaderRegistryHandlerFactory) factory;
+         registryHandler = registryHandlerFactory.create(new DefaultClassLoaderRegistryHandler());
+      }
+      super.setClassPoolFactory(factory);
+   }
+
+   /**
     * Adds a callback object for notifications on classloader registration.
     *  
     * @param callback the callback object
@@ -125,19 +145,7 @@
     */
    public ClassPool registerClassLoader(ClassLoader classLoader)
    {
-      if (classLoader == null)
-      {
-         classLoader = SecurityActions.getContextClassLoader();
-      }
-      
-      if (currentClassLoaders.putIfAbsent(classLoader, Boolean.TRUE) != null)
-      {
-         return null;
-      }
-
-      ScopedClassPool classPool = (ScopedClassPool) super.registerClassLoader(classLoader);
-      currentClassLoaders.remove(classLoader);
-      
+      ClassPool classPool = registryHandler.registerClassLoader(classLoader);
       // TODO review classPool != null check for AOP tests
       if (callbacks != null && callbacks.size() > 0)
       {
@@ -156,7 +164,7 @@
     */
    public void unregisterClassLoader(ClassLoader classLoader)
    {
-      super.unregisterClassLoader(classLoader);
+      registryHandler.unregisterClassLoader(classLoader);
       if (callbacks != null && callbacks.size() > 0)
       {
          for (ClassPoolRepositoryCallback callback : callbacks)
@@ -165,4 +173,38 @@
          }
       }
    }
+   
+   private class DefaultClassLoaderRegistryHandler implements ClassLoaderRegistryHandler
+   {
+      private final  ConcurrentMap<ClassLoader, Boolean> currentClassLoaders = new ConcurrentHashMap<ClassLoader, Boolean>();
+
+      public ClassPool registerClassLoader(ClassLoader classLoader)
+      {
+         if (classLoader == null)
+         {
+            classLoader = SecurityActions.getContextClassLoader();
+         }
+         
+         if (currentClassLoaders.putIfAbsent(classLoader, Boolean.TRUE) != null)
+         {
+            return null;
+         }
+
+         ScopedClassPool classPool = (ScopedClassPool) ClassPoolRepository.super.registerClassLoader(classLoader);
+         currentClassLoaders.remove(classLoader);
+         return classPool;
+      }
+
+ 
+
+      public void unregisterClassLoader(ClassLoader classLoader)
+      {
+         ClassPoolRepository.super.unregisterClassLoader(classLoader);
+      }
+      
+      public void setSuccessor(ClassLoaderRegistryHandler handler)
+      {
+         throw new IllegalStateException("Default ClassLoaderRegistryHandler cannot have a sucessor");
+      }
+   }
 }
\ No newline at end of file

Modified: projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolDomain.java
===================================================================
--- projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolDomain.java	2010-04-23 11:30:53 UTC (rev 104193)
+++ projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolDomain.java	2010-04-23 11:53:41 UTC (rev 104194)
@@ -275,7 +275,7 @@
          return null;
       }
       ClassLoader foundLoader = registry.getClassLoader(found);
-      ClassPool pool = JBossClDelegatingClassPoolRepository.getInstance().registerClassLoader(foundLoader);
+      ClassPool pool = JBossClRegistryHandler.getInstance().registerClassLoader(foundLoader);
       try
       {
          if (pool instanceof BaseClassPool)

Modified: projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java
===================================================================
--- projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java	2010-04-23 11:30:53 UTC (rev 104193)
+++ projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java	2010-04-23 11:53:41 UTC (rev 104194)
@@ -44,10 +44,9 @@
       super(classPool);
    }
    
-   // TODO JBREFLECT-65 FIXME  this methd shouldn't be returning always the app classloader
    @Override
    public ClassPool initialiseParentClassLoader()
    {
-      return JBossClDelegatingClassPoolRepository.getInstance().registerClassLoader(BaseClassLoaderDomain.class.getClassLoader());
+      return JBossClRegistryHandler.getInstance().registerClassLoader(BaseClassLoaderDomain.class.getClassLoader());
    }
 }

Modified: projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolFactory.java	2010-04-23 11:30:53 UTC (rev 104193)
+++ projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolFactory.java	2010-04-23 11:53:41 UTC (rev 104194)
@@ -27,8 +27,6 @@
 import java.util.HashSet;
 
 import javassist.ClassPool;
-import org.jboss.classpool.scoped.ScopedClassPoolFactory;
-import org.jboss.classpool.scoped.ScopedClassPoolRepository;
 
 import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.ClassLoaderSystem;
@@ -39,15 +37,19 @@
 import org.jboss.classpool.domain.ClassPoolDomainRegistry;
 import org.jboss.classpool.plugins.NonDelegatingClassPool;
 import org.jboss.classpool.plugins.temp.TempClassPoolFactory;
+import org.jboss.classpool.scoped.ScopedClassPoolFactory;
+import org.jboss.classpool.scoped.ScopedClassPoolRepository;
 import org.jboss.classpool.spi.AbstractClassPool;
 import org.jboss.classpool.spi.AbstractClassPoolFactory;
+import org.jboss.classpool.spi.ClassLoaderRegistryHandler;
+import org.jboss.classpool.spi.ClassLoaderRegistryHandlerFactory;
 
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision$
  */
-public class JBossClDelegatingClassPoolFactory extends TempClassPoolFactory implements ScopedClassPoolFactory
+public class JBossClDelegatingClassPoolFactory extends TempClassPoolFactory implements ClassLoaderRegistryHandlerFactory, ScopedClassPoolFactory
 {
    private final DomainRegistry registry;
    
@@ -61,6 +63,13 @@
       this.registerModuleCallback = registerModuleCallback;
    }
    
+   public ClassLoaderRegistryHandler create(ClassLoaderRegistryHandler successor)
+   {
+      ClassLoaderRegistryHandler handler = JBossClRegistryHandler.getInstance();
+      handler.setSuccessor(successor);
+      return handler;
+   }
+   
    @Override
    public synchronized AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
    {

Deleted: projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolRepository.java
===================================================================
--- projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolRepository.java	2010-04-23 11:30:53 UTC (rev 104193)
+++ projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolRepository.java	2010-04-23 11:53:41 UTC (rev 104194)
@@ -1,115 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, 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.classpool.plugins.jbosscl;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Collections;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import javassist.ClassPool;
-
-import org.jboss.classloading.spi.dependency.ClassLoading;
-import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.classpool.scoped.ScopedClassPool;
-import org.jboss.classpool.spi.ClassPoolRepository;
-import org.jboss.logging.Logger;
-
-/**
- * Repository for JBossclDelegatingClassPools.
- * 
- * @author <a href="mailto:flavia.rainone at jboss.org">Flavia Rainone</a>
- *
- * @version $Revision$
- */
-
-public class JBossClDelegatingClassPoolRepository extends ClassPoolRepository
-{
-   private final Logger log = Logger.getLogger(JBossClDelegatingClassPoolRepository.class);
-   
-   private final static JBossClDelegatingClassPoolRepository instance = new JBossClDelegatingClassPoolRepository();
-   
-   /**
-    * Returns the singleton instance.
-    * 
-    * @return the singleton repository instance
-    */
-   public static JBossClDelegatingClassPoolRepository getInstance()
-   {
-      return instance;
-   }
-   
-   /** The registered modules */
-   protected Map<Module, ScopedClassPool> registeredModules =
-      Collections.synchronizedMap(new WeakHashMap<Module, ScopedClassPool>());
-   
-   @Override
-   public ClassPool registerClassLoader(ClassLoader classLoader)
-   {
-      ScopedClassPool classPool = (ScopedClassPool) super.registerClassLoader(classLoader);
-      if (classPool == null)
-      {
-         // TODO check this works; was delegate before
-         super.unregisterClassLoader(classLoader);
-      }
-      else
-      {
-         Module module = getModuleForClassLoader(classLoader);
-         this.registeredModules.put(module, classPool);
-      }
-      return classPool;
-   }
-   
-
-   public void unregisterClassLoader(ClassLoader classLoader, Module module)
-   {
-      ScopedClassPool classPool = registeredModules.remove(module);
-      if (classLoader == null)
-      {
-         if (classPool == null)
-         {
-            //throw new IllegalStateException("Module " + module + " is not registered");
-            //TODO JBREFLECT-116
-           if (log.isDebugEnabled())
-              log.warn("Module " + module + " is not registered");
-           return;
-         }
-         classPool.close();
-      }
-      else
-      {
-         unregisterClassLoader(classLoader);
-      }
-   }
-   
-   private Module getModuleForClassLoader(final ClassLoader classLoader)
-   {
-      return AccessController.doPrivileged(new PrivilegedAction<Module>()
-      {
-         public Module run()
-         {
-            return ClassLoading.getModuleForClassLoader(classLoader);
-         }
-      });
-   }
-}
\ No newline at end of file

Copied: projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClRegistryHandler.java (from rev 104079, projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolRepository.java)
===================================================================
--- projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClRegistryHandler.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClRegistryHandler.java	2010-04-23 11:53:41 UTC (rev 104194)
@@ -0,0 +1,128 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, 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.classpool.plugins.jbosscl;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Collections;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import javassist.ClassPool;
+
+import org.jboss.classloading.spi.dependency.ClassLoading;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classpool.scoped.ScopedClassPool;
+import org.jboss.classpool.spi.ClassLoaderRegistryHandler;
+import org.jboss.logging.Logger;
+
+/**
+ * Handler for registering JBoss ClassLoaders.
+ * 
+ * @author <a href="mailto:flavia.rainone at jboss.org">Flavia Rainone</a>
+ *
+ * @version $Revision$
+ */
+
+class JBossClRegistryHandler implements ClassLoaderRegistryHandler
+{
+   private final Logger log = Logger.getLogger(JBossClRegistryHandler.class);
+   private ClassLoaderRegistryHandler successor;
+   
+   private final static JBossClRegistryHandler instance = new JBossClRegistryHandler();
+   
+   /**
+    * Returns the singleton instance.
+    * 
+    * @return the singleton repository instance
+    */
+   public static JBossClRegistryHandler getInstance()
+   {
+      return instance;
+   }
+   
+   /** The registered modules */
+   protected Map<Module, ScopedClassPool> registeredModules =
+      Collections.synchronizedMap(new WeakHashMap<Module, ScopedClassPool>());
+   
+   
+   
+   public ClassPool registerClassLoader(ClassLoader classLoader)
+   {
+      ScopedClassPool classPool = (ScopedClassPool) successor.registerClassLoader(classLoader);
+      if (classPool == null)
+      {
+         // TODO check this works; was delegate before
+         successor.unregisterClassLoader(classLoader);
+      }
+      else
+      {
+         Module module = getModuleForClassLoader(classLoader);
+         this.registeredModules.put(module, classPool);
+      }
+      return classPool;
+   }
+   
+
+   public void unregisterClassLoader(ClassLoader classLoader, Module module)
+   {
+      ScopedClassPool classPool = registeredModules.remove(module);
+      if (classLoader == null)
+      {
+         if (classPool == null)
+         {
+            //throw new IllegalStateException("Module " + module + " is not registered");
+            //TODO JBREFLECT-116
+           if (log.isDebugEnabled())
+              log.warn("Module " + module + " is not registered");
+           return;
+         }
+         classPool.close();
+      }
+      else
+      {
+         unregisterClassLoader(classLoader);
+      }
+   }
+   
+   private Module getModuleForClassLoader(final ClassLoader classLoader)
+   {
+      return AccessController.doPrivileged(new PrivilegedAction<Module>()
+      {
+         public Module run()
+         {
+            return ClassLoading.getModuleForClassLoader(classLoader);
+         }
+      });
+   }
+
+
+   public void setSuccessor(ClassLoaderRegistryHandler handler)
+   {
+      this.successor = handler;
+   }
+
+   public void unregisterClassLoader(ClassLoader classLoader)
+   {
+      successor.unregisterClassLoader(classLoader);
+   }
+}
\ No newline at end of file

Modified: projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/RegisterModuleCallback.java
===================================================================
--- projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/RegisterModuleCallback.java	2010-04-23 11:30:53 UTC (rev 104193)
+++ projects/jboss-classpool/trunk/jbosscl/src/main/java/org/jboss/classpool/plugins/jbosscl/RegisterModuleCallback.java	2010-04-23 11:53:41 UTC (rev 104194)
@@ -68,7 +68,7 @@
       {
          logger.trace("Removing module " + module + " and class loader " + classLoader);
       }
-      JBossClDelegatingClassPoolRepository.getInstance().unregisterClassLoader(classLoader, module);
+      JBossClRegistryHandler.getInstance().unregisterClassLoader(classLoader, module);
       domainRegistry.cleanupModule(module);
       registeredModules.remove(module);
       unregisteredModules.remove(module);

Modified: projects/jboss-classpool/trunk/jbosscl/src/test/resources/org/jboss/test/classpool/jbosscl/Common.xml
===================================================================
--- projects/jboss-classpool/trunk/jbosscl/src/test/resources/org/jboss/test/classpool/jbosscl/Common.xml	2010-04-23 11:30:53 UTC (rev 104193)
+++ projects/jboss-classpool/trunk/jbosscl/src/test/resources/org/jboss/test/classpool/jbosscl/Common.xml	2010-04-23 11:53:41 UTC (rev 104194)
@@ -33,7 +33,7 @@
          <parameter><inject bean="RegisterModuleCallback"/></parameter>
       </constructor>
    </bean>
-   <bean name="ClassPoolRepository" class="org.jboss.classpool.plugins.jbosscl.JBossClDelegatingClassPoolRepository">
+   <bean name="ClassPoolRepository" class="org.jboss.classpool.spi.ClassPoolRepository">
       <constructor factoryMethod="getInstance"/>
       <property name="classPoolFactory"><inject bean="ClassPoolFactory"/></property>
    </bean>




More information about the jboss-cvs-commits mailing list