[jboss-cvs] JBossAS SVN: r97710 - in projects/jboss-classpool/trunk/src: main/java/org/jboss/classpool/domain and 10 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Dec 10 20:48:43 EST 2009


Author: flavia.rainone at jboss.com
Date: 2009-12-10 20:48:42 -0500 (Thu, 10 Dec 2009)
New Revision: 97710

Added:
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/AbstractJBossClassPoolFactory.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/DelegatingClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/NonDelegatingClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/SecurityActions.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/DomainRegistry.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBoss5ClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBoss5ClassPoolFactory.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolDomain.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolToClassPoolDomainAdaptorFactory.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolFactory.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolRepository.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClParentDelegationStrategy.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/RegisterModuleCallback.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/ScopedJBoss5ClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/SecurityActions.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/ToClassInvoker.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/ToClassInvokerPoolReference.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/VFSClassLoaderDomainRegistry.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/temp/
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/JBossClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/JBossClassPoolFactory.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/LoaderRepositoryUrlUtil.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ScopedJBossClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ScopedRepositoryClassLoaderHelper.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/SecurityActions.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ToClassInvoker.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ToClassInvokerPoolReference.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/UclDelegatingClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/UclDelegatingClassPoolFactory.java
Removed:
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/AbstractJBossClassPoolFactory.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/DelegatingClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/NonDelegatingClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/SecurityActions.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/temp/
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPoolFactory.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/LoaderRepositoryUrlUtil.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedJBossClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedRepositoryClassLoaderHelper.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/SecurityActions.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvoker.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvokerPoolReference.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/DomainRegistry.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPoolFactory.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ScopedJBoss5ClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/SecurityActions.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvoker.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvokerPoolReference.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/
Modified:
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/AbstractParentDelegationStrategy.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPoolDomain.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/ParentDelegationStrategy.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/AbstractClassPoolDomain.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolDomain.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdapter.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/temp/TempClassPoolFactory.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/temp/TempJBossClassPool.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/temp/TempJBossDelegatingClassPool.java
   projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/support/JBossCLFactory.java
   projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/support/LoaderRegistry.java
   projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ClassPoolTest.java
   projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/IsLocalResourcePluginFactoryTestCase.java
   projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTest.java
Log:
[JBREFLECT-75] Prepare for splitting of classpool project. Removed package names that referenced AS version numbers. It makes no sense to use an as5 classpool module for AS6.

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/AbstractParentDelegationStrategy.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/AbstractParentDelegationStrategy.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/AbstractParentDelegationStrategy.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -27,7 +27,7 @@
 import org.jboss.classpool.domain.AbstractClassPoolDomain;
 import org.jboss.classpool.domain.ClassPoolDomain;
 import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdaptorFactory;
-import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.classpool.plugins.DelegatingClassPool;
 import org.jboss.logging.Logger;
 
 /**

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPoolDomain.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPoolDomain.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPoolDomain.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -27,7 +27,7 @@
 import org.jboss.classpool.domain.AbstractClassPoolDomain;
 import org.jboss.classpool.domain.ClassPoolDomain;
 import org.jboss.classpool.helpers.ClassLoaderUtils;
-import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.classpool.plugins.DelegatingClassPool;
 
 
 import javassist.CtClass;

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/ParentDelegationStrategy.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/ParentDelegationStrategy.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/ParentDelegationStrategy.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -25,7 +25,7 @@
 import javassist.CtClass;
 
 import org.jboss.classpool.domain.ClassPoolDomain;
-import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.classpool.plugins.DelegatingClassPool;
 
 /**
  * 

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/AbstractClassPoolDomain.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/AbstractClassPoolDomain.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/AbstractClassPoolDomain.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -22,7 +22,7 @@
 package org.jboss.classpool.domain;
 
 import org.jboss.classpool.base.BaseClassPool;
-import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.classpool.plugins.DelegatingClassPool;
 import org.jboss.logging.Logger;
 
 import javassist.ClassPool;

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolDomain.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolDomain.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolDomain.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -23,7 +23,7 @@
 
 import javassist.CtClass;
 
-import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.classpool.plugins.DelegatingClassPool;
 
 /**
  * 

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdapter.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdapter.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdapter.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -22,7 +22,7 @@
 package org.jboss.classpool.domain;
 
 
-import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.classpool.plugins.DelegatingClassPool;
 
 import javassist.ClassPool;
 import javassist.CtClass;

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/AbstractJBossClassPoolFactory.java (from rev 97702, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/AbstractJBossClassPoolFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/AbstractJBossClassPoolFactory.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/AbstractJBossClassPoolFactory.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,67 @@
+/*
+* 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.plugins;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.plugins.temp.TempJBossClassPool;
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.classpool.spi.AbstractClassPoolFactory;
+import org.jboss.logging.Logger;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public abstract class AbstractJBossClassPoolFactory extends AbstractClassPoolFactory
+{
+   protected final Logger log = Logger.getLogger(this.getClass().getName());
+   
+   protected ClassPool getCreateParentClassPools(final ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+   {
+      //Make sure that we get classpools for all the parent classloaders
+      // TODO remove this?
+      if (cl == null)
+      {
+         return defaultClassPool;
+      }
+      ClassLoader parent = SecurityActions.getParent(cl);
+
+      if (parent != null)
+      {
+         return repository.registerClassLoader(parent);
+      }
+      else
+      {
+         return defaultClassPool;
+      }
+   }
+   
+   public AbstractClassPool create(ClassPool src, ScopedClassPoolRepository repository)
+   {
+      return new TempJBossClassPool(src, repository);
+   }
+
+
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/DelegatingClassPool.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/DelegatingClassPool.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/DelegatingClassPool.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/DelegatingClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,135 @@
+/*
+* 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.plugins;
+
+
+import org.jboss.classpool.base.BaseClassPool;
+import org.jboss.classpool.domain.AbstractClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.helpers.ClassLoaderUtils;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.NotFoundException;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+/**
+ * Base class for classpools backed by a domain
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class DelegatingClassPool extends BaseClassPool
+{
+   private final ClassPoolDomain domain;
+   
+   private boolean closed;
+   
+   public DelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository)
+   {
+      super(cl, parent, repository);
+      if (domain == null)
+      {
+         throw new IllegalArgumentException("Domain was null");
+      }
+      if (domain instanceof AbstractClassPoolDomain == false)
+      {
+         throw new IllegalArgumentException("Domain must implement AbstractClassPoolDomain");
+      }
+      if (logger.isTraceEnabled()) logger.trace(this + " domain:" + this);
+      this.domain = domain;
+      this.domain.addClassPool(this);
+   }
+
+   public CtClass loadLocally(String classname, String resourceName, boolean create)
+   {
+      boolean trace = logger.isTraceEnabled();
+      if (trace) logger.trace(this + " attempt to load locally " + classname);
+         
+      CtClass clazz = null;
+      if (isLocalResource(resourceName, trace))
+      {
+         clazz = getCachedLocally(classname);
+         if (clazz == null && create)
+         {
+            clazz = createCtClass(classname, true);
+         }
+      }
+      if (trace) logger.trace(this + " loaded locally " + classname + " " + getClassPoolLogStringForClass(clazz));
+      return clazz;
+   }
+   
+   /**
+    * Overrides ClassPool.get0() so that we can look up classes without caching them in the initiating pool.
+    * The DelgatingClassPool + DomainClassPool handle the caching in the correct pool + handles the 
+    * parentFirst functionality
+    */
+   @Override
+   public synchronized CtClass get0(String classname, boolean useCache) throws NotFoundException
+   {
+      if (isGeneratedClass(classname))
+      {
+         return null;
+      }
+      CtClass clazz = domain.getCachedOrCreate(this, classname, true);
+      if (clazz == null)
+      {
+         //It is probably a generated proxy. The package name can be different (for example if it is
+         //a proxy for a java system class) than the package names exported by the loaders.
+         //TODO It should be possible to remove this once these have been done:
+         //https://jira.jboss.org/jira/browse/JBCL-25
+         //https://jira.jboss.org/jira/browse/JBCL-92
+         clazz = loadLocally(classname, ClassLoaderUtils.getResourceName(classname), true);
+      }
+      return clazz;
+   }
+   
+   @Override
+   public boolean isUnloadedClassLoader()
+   {
+      return closed;
+   }
+
+   @Override
+   public void close()
+   {
+      closed = true;
+      super.close();
+      domain.removeClassPool(this);
+   }
+
+   @Override
+   public CtClass getCached(String classname)
+   {
+      if (isGeneratedClass(classname))
+      {
+         return null;
+      }
+      return domain.getCachedOrCreate(this, classname, false);
+   }
+   
+   @Override
+   public String toString()
+   {
+      return "[" + super.toString() + " domain: " + domain + "]";
+   }
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/NonDelegatingClassPool.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/NonDelegatingClassPool.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/NonDelegatingClassPool.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/NonDelegatingClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,69 @@
+/*
+* 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.plugins;
+
+import org.jboss.classpool.base.BaseClassPool;
+import org.jboss.classpool.spi.AbstractClassPool;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+
+/**
+ * ClassPool for class loaders not backed by a repository/classloading domain
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class NonDelegatingClassPool extends BaseClassPool
+{
+   public NonDelegatingClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, boolean parentFirst)
+   {
+      super(cl, src, repository, AbstractClassPool.SEARCH_LOCAL_ONLY_STRATEGY);
+      super.childFirstLookup = !parentFirst;
+   }
+
+   @Override
+   public CtClass createCtClass(String classname, boolean useCache)
+   {
+      boolean trace = logger.isTraceEnabled();
+      CtClass clazz = null;
+      if (!childFirstLookup)
+      {
+         if (trace)logger.trace(this + " attempting to create " + classname + " in parent pool (parentFirst)");
+         clazz = createParentCtClass(classname, useCache, trace);
+      }
+      if (clazz == null && isLocalResource(getResourceName(classname), trace))
+      {
+         clazz = super.createCtClass(classname, useCache);
+      }
+      if (childFirstLookup && clazz == null)
+      {
+         if (trace)logger.trace(this + " attempting to create " + classname + " in parent pool (parentLast)");
+         clazz = createParentCtClass(classname, useCache, trace);
+      }
+      
+      if (trace)logger.trace(this + " created " + classname + " " + getClassPoolLogStringForClass(clazz));
+      return clazz;
+   }
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/SecurityActions.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/SecurityActions.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/SecurityActions.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/SecurityActions.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,80 @@
+/*
+* 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.plugins;
+
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+class SecurityActions
+{
+   interface GetParentAction
+   {
+      ClassLoader getParent(ClassLoader loader);
+      
+      GetParentAction NON_PRIVILEGED = new GetParentAction()
+      {
+         public ClassLoader getParent(ClassLoader loader)
+         {
+            return loader.getParent();
+         }
+      };
+      
+      GetParentAction PRIVILEGED = new GetParentAction()
+      {
+         public ClassLoader getParent(final ClassLoader loader)
+         {
+            try
+            {
+               return AccessController.doPrivileged(new PrivilegedExceptionAction<ClassLoader>()
+               {
+                  public ClassLoader run() throws Exception
+                  {
+                     return loader.getParent();
+                  }
+               });
+            }
+            catch (PrivilegedActionException e)
+            {
+               throw new RuntimeException(e.getException());
+            }
+         }
+      };
+   }
+
+   public static ClassLoader getParent(ClassLoader loader)
+   {
+      if (System.getSecurityManager() == null)
+      {
+         return GetParentAction.NON_PRIVILEGED.getParent(loader);
+      }
+      else
+      {
+         return GetParentAction.PRIVILEGED.getParent(loader);
+      }
+   }
+}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/AbstractJBossClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/AbstractJBossClassPoolFactory.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/AbstractJBossClassPoolFactory.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,67 +0,0 @@
-/*
-* 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.plugins.as;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classpool.plugins.as.temp.TempJBossClassPool;
-import org.jboss.classpool.spi.AbstractClassPool;
-import org.jboss.classpool.spi.AbstractClassPoolFactory;
-import org.jboss.logging.Logger;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-public abstract class AbstractJBossClassPoolFactory extends AbstractClassPoolFactory
-{
-   protected final Logger log = Logger.getLogger(this.getClass().getName());
-   
-   protected ClassPool getCreateParentClassPools(final ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
-   {
-      //Make sure that we get classpools for all the parent classloaders
-      // TODO remove this?
-      if (cl == null)
-      {
-         return defaultClassPool;
-      }
-      ClassLoader parent = SecurityActions.getParent(cl);
-
-      if (parent != null)
-      {
-         return repository.registerClassLoader(parent);
-      }
-      else
-      {
-         return defaultClassPool;
-      }
-   }
-   
-   public AbstractClassPool create(ClassPool src, ScopedClassPoolRepository repository)
-   {
-      return new TempJBossClassPool(src, repository);
-   }
-
-
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/DelegatingClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/DelegatingClassPool.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/DelegatingClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,135 +0,0 @@
-/*
-* 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.plugins.as;
-
-
-import org.jboss.classpool.base.BaseClassPool;
-import org.jboss.classpool.domain.AbstractClassPoolDomain;
-import org.jboss.classpool.domain.ClassPoolDomain;
-import org.jboss.classpool.helpers.ClassLoaderUtils;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.NotFoundException;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-/**
- * Base class for classpools backed by a domain
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-public class DelegatingClassPool extends BaseClassPool
-{
-   private final ClassPoolDomain domain;
-   
-   private boolean closed;
-   
-   public DelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository)
-   {
-      super(cl, parent, repository);
-      if (domain == null)
-      {
-         throw new IllegalArgumentException("Domain was null");
-      }
-      if (domain instanceof AbstractClassPoolDomain == false)
-      {
-         throw new IllegalArgumentException("Domain must implement AbstractClassPoolDomain");
-      }
-      if (logger.isTraceEnabled()) logger.trace(this + " domain:" + this);
-      this.domain = domain;
-      this.domain.addClassPool(this);
-   }
-
-   public CtClass loadLocally(String classname, String resourceName, boolean create)
-   {
-      boolean trace = logger.isTraceEnabled();
-      if (trace) logger.trace(this + " attempt to load locally " + classname);
-         
-      CtClass clazz = null;
-      if (isLocalResource(resourceName, trace))
-      {
-         clazz = getCachedLocally(classname);
-         if (clazz == null && create)
-         {
-            clazz = createCtClass(classname, true);
-         }
-      }
-      if (trace) logger.trace(this + " loaded locally " + classname + " " + getClassPoolLogStringForClass(clazz));
-      return clazz;
-   }
-   
-   /**
-    * Overrides ClassPool.get0() so that we can look up classes without caching them in the initiating pool.
-    * The DelgatingClassPool + DomainClassPool handle the caching in the correct pool + handles the 
-    * parentFirst functionality
-    */
-   @Override
-   public synchronized CtClass get0(String classname, boolean useCache) throws NotFoundException
-   {
-      if (isGeneratedClass(classname))
-      {
-         return null;
-      }
-      CtClass clazz = domain.getCachedOrCreate(this, classname, true);
-      if (clazz == null)
-      {
-         //It is probably a generated proxy. The package name can be different (for example if it is
-         //a proxy for a java system class) than the package names exported by the loaders.
-         //TODO It should be possible to remove this once these have been done:
-         //https://jira.jboss.org/jira/browse/JBCL-25
-         //https://jira.jboss.org/jira/browse/JBCL-92
-         clazz = loadLocally(classname, ClassLoaderUtils.getResourceName(classname), true);
-      }
-      return clazz;
-   }
-   
-   @Override
-   public boolean isUnloadedClassLoader()
-   {
-      return closed;
-   }
-
-   @Override
-   public void close()
-   {
-      closed = true;
-      super.close();
-      domain.removeClassPool(this);
-   }
-
-   @Override
-   public CtClass getCached(String classname)
-   {
-      if (isGeneratedClass(classname))
-      {
-         return null;
-      }
-      return domain.getCachedOrCreate(this, classname, false);
-   }
-   
-   @Override
-   public String toString()
-   {
-      return "[" + super.toString() + " domain: " + domain + "]";
-   }
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/NonDelegatingClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/NonDelegatingClassPool.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/NonDelegatingClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,69 +0,0 @@
-/*
-* 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.plugins.as;
-
-import org.jboss.classpool.base.BaseClassPool;
-import org.jboss.classpool.spi.AbstractClassPool;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-
-/**
- * ClassPool for class loaders not backed by a repository/classloading domain
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-public class NonDelegatingClassPool extends BaseClassPool
-{
-   public NonDelegatingClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, boolean parentFirst)
-   {
-      super(cl, src, repository, AbstractClassPool.SEARCH_LOCAL_ONLY_STRATEGY);
-      super.childFirstLookup = !parentFirst;
-   }
-
-   @Override
-   public CtClass createCtClass(String classname, boolean useCache)
-   {
-      boolean trace = logger.isTraceEnabled();
-      CtClass clazz = null;
-      if (!childFirstLookup)
-      {
-         if (trace)logger.trace(this + " attempting to create " + classname + " in parent pool (parentFirst)");
-         clazz = createParentCtClass(classname, useCache, trace);
-      }
-      if (clazz == null && isLocalResource(getResourceName(classname), trace))
-      {
-         clazz = super.createCtClass(classname, useCache);
-      }
-      if (childFirstLookup && clazz == null)
-      {
-         if (trace)logger.trace(this + " attempting to create " + classname + " in parent pool (parentLast)");
-         clazz = createParentCtClass(classname, useCache, trace);
-      }
-      
-      if (trace)logger.trace(this + " created " + classname + " " + getClassPoolLogStringForClass(clazz));
-      return clazz;
-   }
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/SecurityActions.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/SecurityActions.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,80 +0,0 @@
-/*
-* 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.plugins.as;
-
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-class SecurityActions
-{
-   interface GetParentAction
-   {
-      ClassLoader getParent(ClassLoader loader);
-      
-      GetParentAction NON_PRIVILEGED = new GetParentAction()
-      {
-         public ClassLoader getParent(ClassLoader loader)
-         {
-            return loader.getParent();
-         }
-      };
-      
-      GetParentAction PRIVILEGED = new GetParentAction()
-      {
-         public ClassLoader getParent(final ClassLoader loader)
-         {
-            try
-            {
-               return AccessController.doPrivileged(new PrivilegedExceptionAction<ClassLoader>()
-               {
-                  public ClassLoader run() throws Exception
-                  {
-                     return loader.getParent();
-                  }
-               });
-            }
-            catch (PrivilegedActionException e)
-            {
-               throw new RuntimeException(e.getException());
-            }
-         }
-      };
-   }
-
-   public static ClassLoader getParent(ClassLoader loader)
-   {
-      if (System.getSecurityManager() == null)
-      {
-         return GetParentAction.NON_PRIVILEGED.getParent(loader);
-      }
-      else
-      {
-         return GetParentAction.PRIVILEGED.getParent(loader);
-      }
-   }
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPool.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,84 +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.as4;
-
-import java.io.File;
-import java.net.URL;
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classpool.spi.AbstractClassPool;
-import org.jboss.mx.loading.RepositoryClassLoader;
-
-/**
- * Comment
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @author adrian at jboss.org
- * @version $Revision$
- */
-public class JBossClassPool extends AbstractClassPool implements ToClassInvokerPoolReference
-{
-   ToClassInvoker toClassInvoker = null;
-   
-   protected JBossClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, File tmp, URL tmpURL)
-   {
-      super(cl, src, repository);
-      toClassInvoker = new ToClassInvoker(tmp);
-   }
-
-   protected JBossClassPool(ClassPool src, ScopedClassPoolRepository repository)
-   {
-      super(src, repository);
-   }
-
-   public boolean isUnloadedClassLoader()
-   {
-      if (getClassLoader() instanceof RepositoryClassLoader)
-      {
-         RepositoryClassLoader rcl = (RepositoryClassLoader) getClassLoader();
-         return rcl.getLoaderRepository() == null;
-      }
-      return false;
-   }
-
-   public Class<?> toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
-   {
-      return toClassInvoker.toClass(this, cc, getResourceName(cc.getName()), loader, domain);
-   }
-
-   public Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
-   {
-      return super.toClass(cc, loader, domain);
-   }
-
-   @Override
-   public void lockInCache(CtClass clazz)
-   {
-      super.lockInCache(clazz);
-      localResources.put(getResourceName(clazz.getName()), Boolean.TRUE);
-   }
-}
\ No newline at end of file

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPoolFactory.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPoolFactory.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,129 +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.as4;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classpool.plugins.as.AbstractJBossClassPoolFactory;
-import org.jboss.classpool.spi.AbstractClassPool;
-import org.jboss.classpool.spi.AbstractClassPoolFactory;
-import org.jboss.mx.loading.RepositoryClassLoader;
-
-/**
- * Comment
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @author adrian at jboss.org
- * @version $Revision$
- **/
-public class JBossClassPoolFactory extends AbstractJBossClassPoolFactory
-{
-   protected File tmpClassesDir;
-
-   public JBossClassPoolFactory(File tmpClassesDir) throws IOException
-   {
-      this.tmpClassesDir = tmpClassesDir;
-
-   }
-   public AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
-   {
-      ClassPool parent = getCreateParentClassPools(cl, src, repository);
-      if (cl instanceof RepositoryClassLoader)
-      {
-         File tempdir = getTempDirectory(cl);
-         URL tmpCP;
-         try
-         {
-            tmpCP = createURLAndAddToLoader(cl, tempdir);
-         }
-         catch (IOException e)
-         {
-            throw new RuntimeException(e);
-         }
-         if (ScopedRepositoryClassLoaderHelper.isScopedClassLoader(cl))
-         {
-            //It is scoped
-            return new ScopedJBossClassPool(cl, parent, repository, tempdir, tmpCP);
-         }
-         return new JBossClassPool(cl, parent, repository, tempdir, tmpCP);
-      }
-      return new AbstractClassPool(cl, parent, repository);
-   }
-
-   protected File getTempDirectory(ClassLoader cl)
-   {
-      File tempdir = null;
-      int attempts = 0;
-      IOException ex = null;
-      while (tempdir == null && attempts < 5)
-      {
-         //Workaround for JBAOP-254, retry a few times
-         try
-         {
-            tempdir = createTempDir(cl);
-         }
-         catch (IOException e)
-         {
-            ex = e;
-         }
-      }
-      
-      if (tempdir == null)
-      {
-         throw new RuntimeException("", ex);
-      }
-      
-      return tempdir;
-   }
-
-   public File createTempDir(ClassLoader cl) throws IOException
-   {
-      File tempdir = File.createTempFile("ucl", "", tmpClassesDir);
-      tempdir.delete();
-      tempdir.mkdir();
-      tempdir.deleteOnExit();
-
-      return tempdir;
-   }
-   
-   private URL createURLAndAddToLoader(ClassLoader cl, File tempdir) throws IOException
-   {
-      URL tmpURL = tempdir.toURL();
-      URL tmpCP = new URL(tmpURL, "?dynamic=true");
-
-      RepositoryClassLoader ucl = (RepositoryClassLoader) cl;
-
-      // We may be undeploying.
-      if (ucl.getLoaderRepository() != null)
-      {
-         ucl.addURL(tmpCP);
-      }
-      
-      return tmpCP;
-   }
-
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/LoaderRepositoryUrlUtil.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/LoaderRepositoryUrlUtil.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/LoaderRepositoryUrlUtil.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,173 +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.as4;
-
-import java.net.URL;
-
-import javax.management.InstanceNotFoundException;
-import javax.management.MBeanServer;
-import javax.management.Notification;
-import javax.management.NotificationListener;
-import javax.management.ObjectName;
-
-import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
-import org.jboss.mx.loading.LoaderRepository;
-import org.jboss.mx.util.MBeanServerLocator;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-public class LoaderRepositoryUrlUtil implements NotificationListener
-{
-   final static MBeanServer SERVER;
-   final static ObjectName MAIN_LOADER_REPOSITORY_OBJECT_NAME;
-   final static LoaderRepository MAIN_LOADER_REPOSITORY;
-   static
-   {
-      SERVER = MBeanServerLocator.locateJBoss();
-      try
-      {
-         MAIN_LOADER_REPOSITORY_OBJECT_NAME = new ObjectName("JMImplementation:name=Default,service=LoaderRepository");
-         MAIN_LOADER_REPOSITORY = (LoaderRepository)SERVER.invoke(MAIN_LOADER_REPOSITORY_OBJECT_NAME, "getInstance", new Object[0], new String[0]);
-      }
-      catch (Exception e)
-      {
-         throw new RuntimeException(e);
-      }
-   }
-   
-   long currentSequenceNumber;
-   long lastSequenceNumber = -1;
-   URL[] urls;
-   
-   public LoaderRepositoryUrlUtil()
-   {
-      try
-      {
-         SERVER.addNotificationListener(MAIN_LOADER_REPOSITORY_OBJECT_NAME, this, null, null);
-      }
-      catch (InstanceNotFoundException e)
-      {
-         throw new RuntimeException(e);
-      }
-   }
-
-   public synchronized void handleNotification(Notification notification, Object handback)
-   {
-      if (notification.getType().equals(LoaderRepository.CLASSLOADER_ADDED))
-      {
-         currentSequenceNumber = notification.getSequenceNumber();
-      }
-      else if (notification.getType().equals(LoaderRepository.CLASSLOADER_REMOVED))
-      {
-         currentSequenceNumber = notification.getSequenceNumber();
-      }
-   }
-   
-   public synchronized UrlInfo getURLInfo(HeirarchicalLoaderRepository3 scopedLoader, UrlInfo urlInfo)
-   {
-      boolean changed = false;
-      if (lastSequenceNumber != currentSequenceNumber)
-      {
-         urls = MAIN_LOADER_REPOSITORY.getURLs();
-         lastSequenceNumber = currentSequenceNumber;
-         changed = true;
-      }
-      if (!changed)
-      {
-         changed = urlInfo != null && (urlInfo.getSequenceNumber() != lastSequenceNumber);
-      }
-      if (urlInfo == null || changed)
-      {
-         URL[] localUrls = getLocalUrls(scopedLoader, urls);
-         urlInfo = new UrlInfo(urls, localUrls, lastSequenceNumber);
-      }
-      return urlInfo;
-   }
-   
-   public long getCurrentSequenceNumber()
-   {
-      return currentSequenceNumber;
-   }
-   
-   private URL[] getLocalUrls(HeirarchicalLoaderRepository3 scopedRepository, URL[] globalUrls)
-   {
-      URL[] scopedRepositoryUrls = scopedRepository.getURLs();
-
-      //This is a bit of a hack, since this relies on the order of the urls returned by HeirarchicalLoaderRepository3
-      //My urls, followed by parent urls.
-      int scopedLength = 0;
-      for (int i = 0 ; i < scopedRepositoryUrls.length ; i++)
-      {
-         for (int j = 0 ; j < globalUrls.length ; j ++)
-         {
-            if (scopedRepositoryUrls[i].equals(globalUrls[j]))
-            {
-               scopedLength = i;
-               break;
-            }
-         }
-         if (scopedLength > 0)
-         {
-            break;
-         }
-      }
-      
-      URL[] localUrls = new URL[scopedLength];
-      System.arraycopy(scopedRepositoryUrls, 0, localUrls, 0, scopedLength);
-      return localUrls;
-   }
-   
-   public class UrlInfo
-   {
-      
-      URL[] globalUrls;
-      URL[] localUrls;
-      long sequenceNumber;
-
-      public UrlInfo(URL[] globalUrls, URL[] localUrls, long sequenceNumber)
-      {
-         super();
-         this.globalUrls = globalUrls;
-         this.localUrls = localUrls;
-         this.sequenceNumber = sequenceNumber;
-      }
-      
-      public URL[] getGlobalUrls()
-      {
-         return globalUrls;
-      }
-      
-      public URL[] getLocalUrls()
-      {
-         return localUrls;
-      }
-
-      public long getSequenceNumber()
-      {
-         return sequenceNumber;
-      }
-   }
-   
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedJBossClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedJBossClassPool.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedJBossClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,273 +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.as4;
-
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.NotFoundException;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classpool.plugins.as4.LoaderRepositoryUrlUtil.UrlInfo;
-import org.jboss.classpool.spi.AbstractClassPool;
-import org.jboss.classpool.spi.ClassPoolRepository;
-import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
-import org.jboss.mx.loading.LoaderRepository;
-import org.jboss.mx.loading.RepositoryClassLoader;
-
-/**
- * A classpool in JBoss backed by a scoped (HierarchicalLoaderRepository) loader repository
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-public class ScopedJBossClassPool extends JBossClassPool 
-{
-   final static LoaderRepositoryUrlUtil LOADER_REPOSITORY_UTIL = new LoaderRepositoryUrlUtil();
-   
-   private UrlInfo urlInfo;
-   private ThreadLocal<ClassPool> lastPool = new ThreadLocal<ClassPool>();
-
-   public ScopedJBossClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, File tmp, URL tmpURL)
-   {
-      super(cl, src, repository, tmp, tmpURL);
-      
-      boolean parentFirst = false;
-      LoaderRepository loaderRepository = null;
-      ClassLoader prnt = cl;
-      while (prnt != null)
-      {
-         if (prnt instanceof RepositoryClassLoader)
-         {
-            loaderRepository = ((RepositoryClassLoader)prnt).getLoaderRepository();
-            if (loaderRepository instanceof HeirarchicalLoaderRepository3)
-            {
-               parentFirst = ((HeirarchicalLoaderRepository3)loaderRepository).getUseParentFirst();
-            }
-            break;
-         }
-         prnt = SecurityActions.getParent(cl);
-      }
-      
-      super.childFirstLookup = !parentFirst;
-   }
-   
-
-   private HeirarchicalLoaderRepository3 getRepository()
-   {
-      ClassLoader cl = getClassLoader0();
-      if (cl != null)
-      {
-         return (HeirarchicalLoaderRepository3)((RepositoryClassLoader)cl).getLoaderRepository();
-      }
-      return null;
-   }
-
-   private URL getResourceUrlForClass(String resourcename)
-   {
-      HeirarchicalLoaderRepository3 repo = getRepository();
-      return repo.getResource(resourcename, super.getClassLoader());
-   }
-   
-   private boolean isMine(URL url)
-   {
-      HeirarchicalLoaderRepository3 repo = getRepository();
-      if (repo != null)
-      {
-         //The URL of the class loaded with my scoped classloader
-         if (url != null)
-         {
-            urlInfo = LOADER_REPOSITORY_UTIL.getURLInfo(getRepository(), urlInfo);
-            
-            URL[] myUrls = urlInfo.getLocalUrls();
-            String resource = url.toString();
-            for (int i = 0 ; i < myUrls.length ; i++)
-            {
-               if (resource.indexOf(myUrls[i].toString()) >= 0)
-               {
-                  return true;
-               }
-            }
-            return false;
-         }
-      }
-      return true;
-   }
-
-   public CtClass getCached(String classname)
-   {
-      if (classname == null)
-      {
-         return null;
-      }
-      if (isUnloadedClassLoader())
-      {
-         return null;
-      }
-
-      if (generatedClasses.get(classname) != null)
-      {
-         //It is a new class, and this callback is probably coming from the frozen check when creating a new nested class
-         return super.getCached(classname);
-      }
-      
-      //Is this from the scoped classloader itself of from the parent?
-      String resourcename = getResourceName(classname);
-      URL url = getResourceUrlForClass(resourcename);
-      boolean isMine = isMine(url);
-      
-      if (isMine)
-      {
-         if (super.childFirstLookup)
-         {
-            //Parent delegation is false, attempt to get this class out of ourselves
-            CtClass clazz = super.getCachedLocally(classname);
-            if (clazz == null)
-            {
-               clazz = createCtClass(classname, false);
-               if (clazz != null)
-               {
-                  lockInCache(clazz);
-               }
-            }
-            if (clazz != null)
-            {
-               return clazz;
-            }
-         }
-         return super.getCached(classname);
-      }
-      
-
-      try
-      {
-         ClassPool pool = getCorrectPoolForResource(classname, url);
-         if (pool != lastPool.get())
-         {
-            lastPool.set(pool);
-            return pool.get(classname);
-         }
-      }
-      catch (NotFoundException e)
-      {
-      }
-      catch(StackOverflowError e)
-      {
-         throw e;
-      }
-      finally
-      {
-         lastPool.set(null);
-      }
-
-      return null;
-   }
-
-   @Override
-   protected boolean includeInGlobalSearch()
-   {
-      return false;
-   }
-   
-   private ClassPool getCorrectPoolForResource(String classname, URL url)
-   {
-      ClassPoolRepository classPoolRepository = ClassPoolRepository.getInstance();
-      synchronized(classPoolRepository.getRegisteredCLs())
-      {
-         //JBoss 5 has an extra NoAnnotationURLCLassLoader that is not on the default path, make sure that that is checked at the end
-         //FIXME This needs revisiting/removing once the 
-         ArrayList<AbstractClassPool> noAnnotationURLClassLoaderPools = null;
-         String resource = url.toString();
-         for(ClassPool pool : classPoolRepository.getRegisteredCLs().values())
-         {
-            AbstractClassPool candidate = (AbstractClassPool)pool;
-            if (candidate.isUnloadedClassLoader())
-            {
-               classPoolRepository.unregisterClassLoader(candidate.getClassLoader());
-               continue;
-            }
-            
-            if (candidate.getClassLoader() instanceof RepositoryClassLoader)
-            {
-               //Sometimes the ClassLoader is a proxy for MBeanProxyExt?!
-               RepositoryClassLoader rcl = (RepositoryClassLoader)candidate.getClassLoader();
-               URL[] urls = rcl.getClasspath();
-               
-               for (int i = 0 ; i < urls.length ; i++)
-               {
-                  if (resource.indexOf(urls[i].getFile()) >= 0)
-                  {
-                     return candidate;
-                  }
-               }
-            }
-            //FIXME Remove once we have the JBoss 5 version of pool
-            else if (isInstanceOfNoAnnotationURLClassLoader(candidate.getClassLoader()))
-            {
-               if (noAnnotationURLClassLoaderPools == null)
-               {
-                  noAnnotationURLClassLoaderPools = new ArrayList<AbstractClassPool>(); 
-               }
-               noAnnotationURLClassLoaderPools.add(candidate);
-            }
-         }
-         
-         //FIXME Remove once we have the JBoss 5 version of pool
-         if (noAnnotationURLClassLoaderPools != null)
-         {
-            for (AbstractClassPool pool : noAnnotationURLClassLoaderPools)
-            {
-               try
-               {
-                  pool.get(classname);
-                  return pool;
-               }
-               catch(NotFoundException ignoreTryNext)
-               {
-               }
-            }
-         }
-      }
-      return ClassPoolRepository.getInstance().getClassPoolFactory().
-      create(ClassPool.getDefault(), ClassPoolRepository.getInstance());
-   }
-   
-   /**
-    * NoAnnotationURLCLassLoader lives in different packages in JBoss 4 and 5
-    */
-   private boolean isInstanceOfNoAnnotationURLClassLoader(ClassLoader loader)
-   {
-      Class<?> parent = loader.getClass();
-      while (parent != null)
-      {
-         if ("NoAnnotationURLClassLoader".equals(parent.getSimpleName()))
-         {
-            return true;
-         }
-         parent = parent.getSuperclass();
-      }
-      return false;
-   }
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedRepositoryClassLoaderHelper.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedRepositoryClassLoaderHelper.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedRepositoryClassLoaderHelper.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,51 +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.as4;
-
-import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
-import org.jboss.mx.loading.LoaderRepository;
-import org.jboss.mx.loading.RepositoryClassLoader;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @autor adrian at jboss.org
- * @version $Revision$
- */
-public class ScopedRepositoryClassLoaderHelper
-{
-   public static boolean isScopedClassLoader(ClassLoader loader)
-   {
-      boolean scoped = false;
-      if (loader instanceof RepositoryClassLoader)
-      {
-         LoaderRepository repository = ((RepositoryClassLoader)loader).getLoaderRepository();
-         if (repository instanceof HeirarchicalLoaderRepository3)
-         {
-            scoped = true;
-            //HeirarchicalLoaderRepository3 hlr = (HeirarchicalLoaderRepository3)repository;
-            //boolean parentFirst = hlr.getUseParentFirst();
-         }
-      }
-      return scoped;
-   }
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/SecurityActions.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/SecurityActions.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,84 +0,0 @@
-/*
-* 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.plugins.as4;
-
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-class SecurityActions
-{
-   interface GetParentAction
-   {
-      ClassLoader getParent(ClassLoader loader);
-      
-      GetParentAction NON_PRIVILEGED = new GetParentAction()
-      {
-         public ClassLoader getParent(ClassLoader loader)
-         {
-            return loader.getParent();
-         }
-      };
-      
-      GetParentAction PRIVILEGED = new GetParentAction()
-      {
-         public ClassLoader getParent(final ClassLoader loader)
-         {
-            try
-            {
-               return AccessController.doPrivileged(new PrivilegedExceptionAction<ClassLoader>()
-               {
-                  public ClassLoader run() throws Exception
-                  {
-                     return loader.getParent();
-                  }
-               });
-            }
-            catch (PrivilegedActionException e)
-            {
-               throw new RuntimeException(e.getException());
-            }
-         }
-      };
-   }
-   
-   public static ClassLoader getParent(ClassLoader loader)
-   {
-      if (loader == null)
-      {
-         return null;
-      }
-      if (System.getSecurityManager() == null)
-      {
-         return GetParentAction.NON_PRIVILEGED.getParent(loader);
-      }
-      else
-      {
-         return GetParentAction.PRIVILEGED.getParent(loader);
-      }
-   }
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvoker.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvoker.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvoker.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,103 +0,0 @@
-/*
-* 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.plugins.as4;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.CtClass;
-
-import org.jboss.logging.Logger;
-import org.jboss.mx.loading.RepositoryClassLoader;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-public class ToClassInvoker
-{
-   Logger logger = Logger.getLogger(this.getClass());
-
-   public File tmpDir;
-
-   public Object tmplock = new Object();
-
-   public ToClassInvoker(File tmpDir)
-   {
-      this.tmpDir = tmpDir;
-   }
-
-   public Class<?> toClass(ToClassInvokerPoolReference pool, CtClass cc, String classFileName, ClassLoader loader, ProtectionDomain domain)
-   throws CannotCompileException
-   {
-      boolean trace = logger.isTraceEnabled();
-      pool.lockInCache(cc);
-      final ClassLoader myloader = pool.getClassLoader();
-      if (myloader == null || tmpDir == null)
-      {
-         if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " tmpDir:" + tmpDir + " default to superPool.toClass for " + cc.getName());
-         Class<?> clazz = pool.superPoolToClass(cc, loader, domain);
-         if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
-         return clazz;
-      }
-      Class<?> dynClass = null;
-      try
-      {
-         File classFile = null;
-         // Write the clas file to the tmpdir
-         synchronized (tmplock)
-         {
-            classFile = new File(tmpDir, classFileName);
-            if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " writing bytes to " + classFile);
-            File pkgDirs = classFile.getParentFile();
-            pkgDirs.mkdirs();
-            FileOutputStream stream = new FileOutputStream(classFile);
-            stream.write(cc.toBytecode());
-            stream.flush();
-            stream.close();
-            classFile.deleteOnExit();
-         }
-         // We have to clear Blacklist caches or the class will never
-         // be found
-         //((UnifiedClassLoader)dcl).clearBlacklists();
-         // To be backward compatible
-         RepositoryClassLoader rcl = (RepositoryClassLoader)myloader;
-         rcl.clearClassBlackList();
-         rcl.clearResourceBlackList();
-
-         // Now load the class through the cl
-         dynClass = myloader.loadClass(cc.getName());
-         if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + dynClass);
-         return dynClass;
-      }
-      catch (Exception ex)
-      {
-         ClassFormatError cfe = new ClassFormatError("Failed to load dyn class: " + cc.getName());
-         cfe.initCause(ex);
-         throw cfe;
-      }
-   }
-
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvokerPoolReference.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvokerPoolReference.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvokerPoolReference.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,39 +0,0 @@
-/*
-* 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.plugins.as4;
-
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.CtClass;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-public interface ToClassInvokerPoolReference
-{
-   Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException;
-   ClassLoader getClassLoader();
-   void lockInCache(CtClass clazz);
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/DomainRegistry.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/DomainRegistry.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/DomainRegistry.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,51 +0,0 @@
-package org.jboss.classpool.plugins.as5;
-/*
-* 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.
-*/
-
-
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloading.spi.dependency.Module;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-public interface DomainRegistry
-{
-   ClassLoaderSystem getSystem();
-   
-   ClassLoaderDomain getDefaultDomain();
-   
-   boolean initMapsForModule(Module module);
-
-   void cleanupModule(Module module);
-   
-   ClassLoaderDomain getClassLoaderDomainForLoader(ClassLoader cl);
-
-   ClassLoader getParentUnitLoader(ClassLoader loader);
-
-   Module getModule(ClassLoader loader);
-
-   ClassLoader getClassLoader(Module module);
-}
\ No newline at end of file

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPool.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,76 +0,0 @@
-/*
-* 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.plugins.as5;
-
-import java.net.URL;
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classpool.spi.AbstractClassPool;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-class JBoss5ClassPool extends AbstractClassPool implements ToClassInvokerPoolReference
-{
-   protected ToClassInvoker toClassInvoker = null;
-
-   boolean closed;
-   
-   protected JBoss5ClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, URL tmpURL)
-   {
-      super(cl, src, repository);
-      toClassInvoker = new ToClassInvoker(tmpURL);
-   }
-
-   protected JBoss5ClassPool(ClassPool src, ScopedClassPoolRepository repository)
-   {
-      super(src, repository);
-   }
-
-   public boolean isUnloadedClassLoader()
-   {
-      return closed;
-   }
-
-   public void close()
-   {
-      closed = true;
-      super.close();
-   }
-
-   public Class<?> toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
-   {
-      return toClassInvoker.toClass(this, cc, getResourceName(cc.getName()), loader, domain);
-   }
-
-   public Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
-   {
-      return super.toClass(cc, loader, domain);
-   }
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPoolFactory.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPoolFactory.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,102 +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.as5;
-
-import java.net.URL;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPoolFactory;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloading.spi.RealClassLoader;
-import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.classpool.plugins.as.AbstractJBossClassPoolFactory;
-import org.jboss.classpool.spi.AbstractClassPool;
-import org.jboss.classpool.spi.ClassPoolRepository;
-
-/**
- * Comment
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @author adrian at jboss.org
- * @version $Revision$
- **/
- at Deprecated
-public class JBoss5ClassPoolFactory extends AbstractJBossClassPoolFactory implements ScopedClassPoolFactory
-{
-   private DomainRegistry registry;
-   
-   public JBoss5ClassPoolFactory(DomainRegistry registry)
-   {
-      this.registry = registry;
-   }
-   
-   public AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
-   {      
-      ClassPool parent = getCreateParentClassPools(cl, src, repository);
-
-      AbstractClassPool pool = null;
-      
-      if (cl instanceof RealClassLoader)
-      {
-         Module module = registry.getModule(cl);
-         if (module != null && module.getDeterminedParentDomainName() != null)
-         {
-            //It is scoped
-            ClassLoaderSystem sys = registry.getSystem();
-            ClassLoaderDomain domain = sys.getDomain(module.getDeterminedDomainName());
-            boolean parentFirst = module.isJ2seClassLoadingCompliance();
-            ClassPool parentDomainPool = getParentUnitClassPool(cl); 
-            pool = new ScopedJBoss5ClassPool(cl, parent, parentDomainPool, repository, getTempURL(module), parentFirst, domain);
-         }
-         else
-         {
-            pool =  new JBoss5ClassPool(cl, parent, repository, getTempURL(module));
-         }
-      }
-      
-      if (pool == null)
-      {
-         pool = new AbstractClassPool(cl, parent, repository);
-      }
-      log.debug("Created pool " + pool + " for loader " + cl);
-      
-      return pool;
-   }
-
-   private ClassPool getParentUnitClassPool(ClassLoader cl)
-   {
-      ClassLoader parent = registry.getParentUnitLoader(cl);
-      return ClassPoolRepository.getInstance().registerClassLoader(parent);
-   }
-   
-
-   private URL getTempURL(Module module)
-   {
-      if (module == null)
-         return null;
-      
-      return module.getDynamicClassRoot();
-   }
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,95 +0,0 @@
-/*
-* 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.plugins.as5;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.classloading.spi.dependency.ModuleRegistry;
-import org.jboss.classpool.plugins.as5.jbosscl.JBossClDelegatingClassPoolRepository;
-import org.jboss.logging.Logger;
-
-/**
- * Use with org.jboss.classpool.jbosscl.JBossClDelegatingClassPoolFactory
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @author <a href="ales.justin at jboss.com">Ales Justin</a>
- * @author <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
- * @version $Revision$
- */
-public class RegisterModuleCallback implements ModuleRegistry
-{
-   Logger logger = Logger.getLogger(this.getClass());
-   
-   private Set<Module> registeredModules = new HashSet<Module>();
-   private Set<Module> unregisteredModules = new HashSet<Module>();
-   private DomainRegistry domainRegistry;
-   
-   public RegisterModuleCallback(DomainRegistry domainRegistry)
-   {
-      this.domainRegistry = domainRegistry;
-   }
-   
-   public synchronized void addModule(Module module)
-   {
-      if (logger.isTraceEnabled())
-      {
-         logger.trace("Adding module " + module);
-      }
-      unregisteredModules.add(module);
-   }
-
-   public synchronized void removeModule(Module module)
-   {
-      
-      ClassLoader classLoader = domainRegistry.getClassLoader(module);
-      if (logger.isTraceEnabled())
-      {
-         logger.trace("Removing module " + module + " and class loader " + classLoader);
-      }
-      JBossClDelegatingClassPoolRepository.getInstance().unregisterClassLoader(classLoader, module);
-      domainRegistry.cleanupModule(module);
-      registeredModules.remove(module);
-      unregisteredModules.remove(module);
-   }
-   
-   public synchronized void registerModule(Module module)
-   {
-      if (logger.isTraceEnabled())
-      {
-         logger.trace("Registering module " + module);
-      }
-      
-      registeredModules.add(module);
-      unregisteredModules.remove(module);
-      
-      domainRegistry.initMapsForModule(module);
-   }
-   
-   public synchronized Collection<Module> getUnregisteredModules()
-   {
-      return new ArrayList<Module>(unregisteredModules);
-   }
-}
\ No newline at end of file

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ScopedJBoss5ClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ScopedJBoss5ClassPool.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ScopedJBoss5ClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,400 +0,0 @@
-/*
-* 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.plugins.as5;
-
-import java.lang.ref.WeakReference;
-import java.net.URL;
-import java.util.ArrayList;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.NotFoundException;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.Loader;
-import org.jboss.classloading.spi.RealClassLoader;
-import org.jboss.classpool.spi.AbstractClassPool;
-import org.jboss.classpool.spi.ClassPoolRepository;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-public class ScopedJBoss5ClassPool extends JBoss5ClassPool
-{
-   ThreadLocal<ClassPool> lastPool = new ThreadLocal<ClassPool>();
-   WeakReference<ClassLoaderDomain> domainRef;
-   /** The classpool representing the parent domain of this one */
-   ClassPool parentDomainPool;
-
-   public ScopedJBoss5ClassPool(ClassLoader cl, ClassPool src, ClassPool parentDomainPool, ScopedClassPoolRepository repository, 
-         URL tmpURL, boolean parentFirst, ClassLoaderDomain domain)
-   {
-      super(cl, src, repository, tmpURL);
-      super.childFirstLookup = !parentFirst;
-      this.parentDomainPool = parentDomainPool;
-      this.domainRef = new WeakReference<ClassLoaderDomain>(domain);
-      
-      logger.debug("Created new ScopedJBoss5ClasPool for " + cl + ", with parent: " + src + ", parentDomain: " + parentDomainPool + ", parentFirst: " + parentFirst);
-   }
-
-   private URL getResourceUrlForClass(String resourcename)
-   {
-      ClassLoaderDomain domain = domainRef.get();
-      return domain.getResource(resourcename);
-   }
-
-   private boolean isMine(URL myURL, String resourceName)
-   {
-      if (myURL == null)
-      {
-         return false;
-      }
-      
-      ClassLoaderDomain domain = domainRef.get();
-      Loader parent = domain.getParent();
-      URL parentURL = parent.getResource(resourceName);
-      
-      if (parentURL == null)
-      {
-         return true;
-      }
-      
-      if (!myURL.equals(parentURL))
-      {
-         return true;
-      }
-      
-      return false;
-   }
-   
-
-   @Override
-   protected synchronized CtClass get0(String classname, boolean useCache) throws NotFoundException
-   {
-      CtClass clazz = null;
-      if (useCache)
-      {
-         clazz = getCached(classname);
-         if (clazz != null)
-            return clazz;
-      }
-
-      if (!childFirstLookup)
-      {
-         if (parentDomainPool != null)
-         {
-            clazz = performGet(parentDomainPool, classname);
-            if (clazz != null)
-            {
-               return clazz;
-            }
-         }
-         if (parent != null)
-         {
-            clazz = performGet(parent, classname);
-            if (clazz != null)
-            {
-               return clazz;
-            }
-         }
-      }
-
-      clazz = createCtClass(classname, useCache);
-      if (clazz != null)
-      {
-         // clazz.getName() != classname if classname is "[L<name>;".
-         if (useCache)
-            cacheCtClass(clazz.getName(), clazz, false);
-
-         return clazz;
-      }
-
-      if (childFirstLookup)
-      {
-         if (parent != null)
-         {
-            clazz = performGet(parent, classname);
-            if (clazz != null)
-            {
-               return clazz;
-            }
-         }
-         if (parentDomainPool != null)
-         {
-            clazz = performGet(parentDomainPool, classname);
-            if (clazz != null)
-            {
-               return clazz;
-            }
-         }
-      }
-
-      return clazz;
-   }
-
-   private CtClass performGet(ClassPool pool, String classname)
-   {
-      try
-      {
-         // TODO check whether we should enable this optimization
-         //Want to avoid calling get() if possible since that creates NotFoundExceptions
-         //on misses which is expensive
-         /*if (pool instanceof AbstractClassPool)
-         {
-            return ((AbstractClassPool)pool).internalGet0(classname, true);
-         }
-         else
-         {*/
-            return pool.getCtClass(classname);
-      }
-      catch (NotFoundException e)
-      {
-         return null;
-      }
-   }
-   
-   
-   public CtClass getCached(String classname)
-   {
-      boolean trace = logger.isTraceEnabled();
-      
-      if (trace)
-      {
-         logger.trace("getCached() " + classname);
-      }
-      
-      if (classname == null)
-      {
-         if (trace)
-         {
-            logger.trace("getCached() returning null (classname == null)");
-         }
-         return null;
-      }
-      if (isUnloadedClassLoader())
-      {
-         if (trace)
-         {
-            logger.trace("getCached() returning null (unloaded)");
-         }
-         return null;
-      }
-
-      if (generatedClasses.get(classname) != null)
-      {
-         //It is a new class, and this callback is probably coming from the frozen check when creating a new nested class
-         if (trace)
-         {
-            logger.trace("getCached() In generated classes - check super");
-         }
-         return super.getCached(classname);
-      }
-      
-      //Is this from the scoped classloader itself of from the parent?
-      String resourcename = getResourceName(classname);
-      URL url = getResourceUrlForClass(resourcename);
-      
-      if (isMine(url, resourcename))
-      {
-         if (super.childFirstLookup)
-         {
-            //Parent delegation is false, attempt to get this class out of ourselves
-            CtClass clazz = super.getCachedLocally(classname);
-            if (clazz == null)
-            {
-               if (trace)
-               {
-                  logger.trace("getCached() Creating my class " + classname);
-               }
-               clazz = createCtClass(classname, false);
-               if (clazz != null)
-               {
-                  lockInCache(clazz);
-               }
-            }
-            if (clazz != null)
-            {
-               if (trace)
-               {
-                  logger.trace("getCached() Returning my class " + classname);
-               }
-               return clazz;
-            }
-         }
-         if (trace)
-         {
-            logger.trace("getCached() Checking super for my class " + classname);
-         }
-         return super.getCached(classname);
-      }
-      else if (url == null)
-      {
-         if (trace)
-         {
-            logger.trace("getCached() Checking super for my class " + classname + " (no url)");
-         }
-         return super.getCached(classname);
-      }
-      
-
-      try
-      {
-         ClassPool pool = getCorrectPoolForResource(classname, resourcename, url, trace);
-         if (trace)
-         {
-            logger.trace("getCached() Found pool for class " + classname + " " + pool);
-         }
-         if (pool != lastPool.get())
-         {
-            lastPool.set(pool);
-            CtClass found = pool.get(classname);
-            if (trace)
-            {
-               logger.trace("getCached() Found clazz " + classname + " in " + pool + " : " + found);
-            }
-            return found;
-         }
-      }
-      catch (NotFoundException e)
-      {
-      }
-      catch(StackOverflowError e)
-      {
-         throw e;
-      }
-      finally
-      {
-         lastPool.set(null);
-      }
-
-      return null;
-   }
-   
-   @Override
-   protected boolean includeInGlobalSearch()
-   {
-      return false;
-   } 
-   
-   private ClassPool getCorrectPoolForResource(String classname, String resourceName, URL url, boolean trace)
-   {
-      synchronized(ClassPoolRepository.getInstance().getRegisteredCLs())
-      {
-         //JBoss 5 has an extra NoAnnotationURLCLassLoader that is not on the default path, make sure that that is checked at the end
-         //FIXME This needs revisiting/removing once the 
-         ArrayList<ClassPool> noAnnotationURLClassLoaderPools = null;
-                 
-         ClassPoolRepository classPoolRepository = ClassPoolRepository.getInstance();
-         for(ClassPool classPool: classPoolRepository.getRegisteredCLs().values())
-         {
-            AbstractClassPool candidate = (AbstractClassPool)classPool;
-            if (candidate.isUnloadedClassLoader())
-            {
-               classPoolRepository.unregisterClassLoader(candidate.getClassLoader());
-               continue;
-            }
-            
-            if (candidate.getClassLoader() instanceof RealClassLoader)
-            {
-               //Sometimes the ClassLoader is a proxy for MBeanProxyExt?!
-               RealClassLoader bcl = (RealClassLoader)candidate.getClassLoader();
-               URL foundUrl = bcl.getResourceLocally(resourceName);
-               if (foundUrl != null)
-               {
-                  if (url.equals(foundUrl))
-                  {
-                     if (trace)
-                     {
-                        logger.trace("getCorrectPoolForResource() Candidate classloader " + bcl + " has local resource " + foundUrl);
-                     }
-                     return candidate;
-                  }
-               }
-            }
-            //FIXME Remove once we have the JBoss 5 version of pool
-            else if (isInstanceOfNoAnnotationURLClassLoader(candidate.getClassLoader()))
-            {
-               if (noAnnotationURLClassLoaderPools == null)
-               {
-                  noAnnotationURLClassLoaderPools = new ArrayList<ClassPool>(); 
-               }
-               noAnnotationURLClassLoaderPools.add(candidate);
-            }
-         }
-         
-         //FIXME Remove once we have the JBoss 5 version of pool
-         if (noAnnotationURLClassLoaderPools != null)
-         {
-            for (ClassPool pool : noAnnotationURLClassLoaderPools)
-            {
-               try
-               {
-                  pool.get(classname);
-                  if (trace)
-                  {
-                     logger.trace("getCorrectPoolForResource(() Found  " + classname + " (no url)");
-                  }
-                  return pool;
-               }
-               catch(NotFoundException ignoreTryNext)
-               {
-               }
-            }
-         }
-      }
-      return createTempPool();
-   }
-   
-   private ClassPool createTempPool()
-   {
-      //Rememeber that the stuff in jboss5/lib goes in a child classloader of the default classloader. We need
-      //to make this the parent of the temp classloader
-      ClassLoader loader = this.getClass().getClassLoader();// AspectManager.class.getClassLoader(); TODO validate this
-      ClassPool pool = ClassPoolRepository.getInstance().registerClassLoader(loader);
-      return ClassPoolRepository.getInstance().getClassPoolFactory().create(pool, ClassPoolRepository.getInstance());
-   }
-   
-   /**
-    * NoAnnotationURLCLassLoader lives in different packages in JBoss 4 and 5
-    */
-   private boolean isInstanceOfNoAnnotationURLClassLoader(ClassLoader loader)
-   {
-      if (loader == null)
-      {
-         return false;
-      }
-      Class<?> parent = loader.getClass();
-      while (parent != null)
-      {
-         if ("NoAnnotationURLClassLoader".equals(parent.getSimpleName()))
-         {
-            return true;
-         }
-         parent = parent.getSuperclass();
-      }
-      return false;
-   }
-   
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/SecurityActions.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/SecurityActions.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,118 +0,0 @@
-/*
-* 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.plugins.as5;
-
-import java.lang.reflect.Method;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import org.jboss.classloader.spi.base.BaseClassLoaderSource;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-class SecurityActions
-{
-   interface GetParentAction
-   {
-      ClassLoader getParent(ClassLoader loader);
-      
-      GetParentAction NON_PRIVILEGED = new GetParentAction()
-      {
-         public ClassLoader getParent(ClassLoader loader)
-         {
-            return loader.getParent();
-         }
-      };
-      
-      GetParentAction PRIVILEGED = new GetParentAction()
-      {
-         public ClassLoader getParent(final ClassLoader loader)
-         {
-            try
-            {
-               return AccessController.doPrivileged(new PrivilegedExceptionAction<ClassLoader>()
-               {
-                  public ClassLoader run() throws Exception
-                  {
-                     return loader.getParent();
-                  }
-               });
-            }
-            catch (PrivilegedActionException e)
-            {
-               throw new RuntimeException(e.getException());
-            }
-         }
-      };
-   }
-
-   public static ClassLoader getParent(ClassLoader loader)
-   {
-      if (System.getSecurityManager() == null)
-      {
-         return GetParentAction.NON_PRIVILEGED.getParent(loader);
-      }
-      else
-      {
-         return GetParentAction.PRIVILEGED.getParent(loader);
-      }
-   }
-   
-   private static final Method getClassLoader;
-
-   static
-   {
-      getClassLoader = AccessController.doPrivileged(new PrivilegedAction<Method>()
-      {
-         public Method run()
-         {
-            try
-            {
-               Method method = BaseClassLoaderSource.class.getDeclaredMethod("getClassLoader");
-               method.setAccessible(true);
-               return method;
-            }
-            catch (NoSuchMethodException e)
-            {
-               throw new RuntimeException("Cannot get classloader from " + BaseClassLoaderSource.class.getName(), e);
-            }
-         }
-      });
-   }
-
-   static ClassLoader getClassLoader(BaseClassLoaderSource clSource)
-   {
-      try
-      {
-         return (ClassLoader)getClassLoader.invoke(clSource);
-      }
-      catch (Exception e)
-      {
-         throw new RuntimeException(e);
-      }
-   }
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvoker.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvoker.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvoker.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,102 +0,0 @@
-/*
-* 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.plugins.as5;
-
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.net.URL;
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.CtClass;
-
-import org.jboss.classloading.spi.RealClassLoader;
-import org.jboss.logging.Logger;
-import org.jboss.virtual.plugins.context.memory.MemoryContextFactory;
-
-/**
- * 
- * 
- * @author  <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version  $Revision$
- */
-public class ToClassInvoker
-{
-   Logger logger = Logger.getLogger(this.getClass());
-   
-   public URL tempURL;
-
-   public Object tmplock = new Object();
-
-   public ToClassInvoker(URL tempURL)
-   {
-      this.tempURL = tempURL;
-   }
-
-   public Class<?> toClass(ToClassInvokerPoolReference pool, CtClass cc, String classFileName, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
-   {
-      boolean trace = logger.isTraceEnabled();
-      pool.lockInCache(cc);
-      final ClassLoader myloader = pool.getClassLoader();
-      if (myloader == null || tempURL == null)
-      {
-         if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " tempURL:" + tempURL + " default to superPool.toClass for " + cc.getName());
-         Class<?> clazz = pool.superPoolToClass(cc, loader, domain);
-         if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
-         return clazz;
-      }
-      
-      try
-      {
-         URL outputURL = new URL(tempURL.toString() + "/" + classFileName);
-         //Write the classfile to the temporary url
-         synchronized (tmplock)
-         {
-            if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " writing bytes to " + tempURL);
-            ByteArrayOutputStream byteout = new ByteArrayOutputStream();
-            BufferedOutputStream out = new BufferedOutputStream(byteout);
-            out.write(cc.toBytecode());
-            out.flush();
-            out.close();
-            
-            byte[] classBytes = byteout.toByteArray();
-            MemoryContextFactory factory = MemoryContextFactory.getInstance();
-            factory.putFile(outputURL, classBytes);
-
-            if (myloader instanceof RealClassLoader)
-            {
-               ((RealClassLoader)myloader).clearBlackList(classFileName);
-            }
-            
-            Class<?> clazz = myloader.loadClass(cc.getName());
-            if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
-            return clazz;
-         }
-      }
-      catch(Exception e)
-      {
-         ClassFormatError cfe = new ClassFormatError("Failed to load dyn class: " + cc.getName() + " on " + this + " loader:" + myloader);
-         cfe.initCause(e);
-         throw cfe;
-      }
-   }
-}
\ No newline at end of file

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvokerPoolReference.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvokerPoolReference.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvokerPoolReference.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,40 +0,0 @@
-/*
-* 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.plugins.as5;
-
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.CtClass;
-
-/**
- * Exposes methods on ClassPool needed by JBoss5ClassPool
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-public interface ToClassInvokerPoolReference
-{
-   Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException;
-   ClassLoader getClassLoader();
-   void lockInCache(CtClass clazz);
-}

Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -1,250 +0,0 @@
-package org.jboss.classpool.plugins.as5;
-/*
-* 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.
-*/ 
-
-
-import java.lang.ref.WeakReference;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import org.jboss.classloader.plugins.loader.ClassLoaderToLoaderAdapter;
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloading.spi.dependency.ClassLoading;
-import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.deployers.plugins.classloading.AbstractDeploymentClassLoaderPolicyModule;
-import org.jboss.deployers.structure.spi.DeploymentUnit;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision$
- */
-public class VFSClassLoaderDomainRegistry implements DomainRegistry
-{
-   protected final static ClassLoaderDomain domain = new ClassLoaderDomain("NOT_USED_PLACEHOLDER");
-   
-   private static final VFSClassLoaderDomainRegistry instance = new VFSClassLoaderDomainRegistry();
-   
-   public static final VFSClassLoaderDomainRegistry getInstance()
-   {
-      return instance;
-   }
-   
-   private ClassLoaderSystem system;
-   
-   private ClassLoaderDomain defaultDomain;
-   
-   /** classloader domains by their classloaders */
-   protected Map<ClassLoader, WeakReference<ClassLoaderDomain>> classLoaderDomainsByLoader = new WeakHashMap<ClassLoader, WeakReference<ClassLoaderDomain>>();
-
-   /** parent deployment unit classloaders indexed by children */
-   private Map<ClassLoader, WeakReference<ClassLoader>> classLoaderUnitParents = new WeakHashMap<ClassLoader, WeakReference<ClassLoader>>(); 
-   
-   /** Modules by classloader */
-   private Map<ClassLoader, WeakReference<Module>> classLoaderModules = new WeakHashMap<ClassLoader, WeakReference<Module>>();
-   
-   /** classloaders by module */
-   private Map<Module, WeakReference<ClassLoader>> moduleClassLoaders = new WeakHashMap<Module, WeakReference<ClassLoader>>();
-
-   protected Map<ClassLoaderDomain, Integer> classLoaderDomainReferenceCounts = new WeakHashMap<ClassLoaderDomain, Integer>();
-   
-   protected VFSClassLoaderDomainRegistry() {}
-   
-   /**
-    * Needed for the tests, not expected to be needed in production
-    */
-   public void setSystem(ClassLoaderSystem system)
-   {
-      this.system = system;
-   }
-   
-   /**
-    * Needed for the tests, not expected to be needed in production
-    */
-   public void setDefaultDomain(ClassLoaderDomain domain)
-   {
-      this.defaultDomain = domain;
-   }
-   
-   public synchronized ClassLoaderSystem getSystem()
-   {
-      if (system == null)
-      {
-         system = ClassLoaderSystem.getInstance();
-      }
-      return system;
-   }
-   
-   public synchronized ClassLoaderDomain getDefaultDomain()
-   {
-      if (defaultDomain == null)
-      {
-         defaultDomain = getSystem().getDefaultDomain();
-      }
-      return defaultDomain;
-   }
-
-   public synchronized boolean initMapsForModule(Module module)
-   {
-      ClassLoader loader = ClassLoading.getClassLoaderForModule(module);
-      ClassLoader parentUnitLoader = findParentUnitLoader(module);
-      if (loader == parentUnitLoader)
-      {
-         throw new IllegalArgumentException("initMapsForLoader() should only be called if parentUnitLoader is different from loader");
-      }
-      ClassLoaderSystem system = getSystem();
-      
-      String domainName = module.getDeterminedDomainName();
-      ClassLoaderDomain clDomain = system.getDomain(domainName);
-      this.validateInitMaps(loader, clDomain, module, parentUnitLoader);
-      
-      boolean ret = false;
-      if (!classLoaderDomainsByLoader.containsKey(loader))
-      {
-         Integer count = classLoaderDomainReferenceCounts.get(clDomain);
-         int cnt = count == null ? 0 : count.intValue();
-         classLoaderDomainReferenceCounts.put(clDomain, cnt);
-         
-         classLoaderDomainsByLoader.put(loader, new WeakReference<ClassLoaderDomain>(clDomain));
-         classLoaderUnitParents.put(loader, new WeakReference<ClassLoader>(parentUnitLoader));
-         classLoaderModules.put(loader, new WeakReference<Module>(module));
-         moduleClassLoaders.put(module, new WeakReference<ClassLoader>(loader));
-         ret = true;
-         this.initMapsDone(loader, clDomain, module, parentUnitLoader);
-      }
-      
-      
-      return ret;
-   }
-   
-   protected void validateInitMaps(ClassLoader loader, ClassLoaderDomain loaderDomain, Module module, ClassLoader parentUnitLoader)
-   {
-      
-   }
-   
-   protected void initMapsDone(ClassLoader loader, ClassLoaderDomain loaderDomain, Module module, ClassLoader parentUnitLoader)
-   {
-      
-   }
-   
-   public synchronized void cleanupModule(Module module)
-   {
-      ClassLoader loader = this.getClassLoader(module);
-      validateCleanupLoader(loader);
-      WeakReference<ClassLoaderDomain> clDomainRef = classLoaderDomainsByLoader.remove(loader);
-      ClassLoaderDomain clDomain = clDomainRef == null ? null : clDomainRef.get();
-      int cnt = 0;
-      if (clDomain != null)
-      {
-         Integer count =  classLoaderDomainReferenceCounts.get(clDomain);
-         cnt = count == null ? 0 : count.intValue();
-         if (cnt > 0)
-         {
-            cnt--;
-         }
-         if (cnt == 0)
-         {
-            classLoaderDomainReferenceCounts.remove(clDomain);
-         }
-         else
-         {
-            classLoaderDomainReferenceCounts.put(clDomain, ++cnt);
-         }
-         classLoaderUnitParents.remove(loader);
-         classLoaderModules.remove(loader);
-         moduleClassLoaders.remove(module);
-      }
-      cleanupLoaderDone(loader, clDomain, cnt);
-   }
-
-   protected void validateCleanupLoader(ClassLoader loader) {}
-   
-   protected void cleanupLoaderDone(ClassLoader loader, ClassLoaderDomain loaderDomain, int domainReferences) {}
-   
-   public synchronized ClassLoaderDomain getClassLoaderDomainForLoader(ClassLoader cl)
-   {
-      WeakReference<ClassLoaderDomain> clDomainRef = classLoaderDomainsByLoader.get(cl);
-      if (clDomainRef != null)
-      {
-         return clDomainRef.get();
-      }
-      
-      ClassLoader parent = SecurityActions.getParent(cl);
-      if (parent != null)
-      {
-         ClassLoaderDomain domain = getClassLoaderDomainForLoader(parent);
-         if (domain != null)
-         {
-            classLoaderDomainsByLoader.put(parent, new WeakReference<ClassLoaderDomain>(domain));
-            return domain;
-         }
-      }
-      return null;
-   }
-   
-   public synchronized ClassLoader getParentUnitLoader(ClassLoader loader)
-   {
-      WeakReference<ClassLoader> parentRef = classLoaderUnitParents.get(loader);
-      if (parentRef != null)
-      {
-         return parentRef.get();
-      }
-      return null;
-   }
-   
-   public synchronized Module getModule(ClassLoader loader)
-   {
-      WeakReference<Module> moduleRef = classLoaderModules.get(loader);
-      if (moduleRef != null)
-      {
-         return moduleRef.get();
-      }
-      return null;
-   }
-   
-   public synchronized ClassLoader getClassLoader(Module module)
-   {
-      WeakReference<ClassLoader> loaderRef = moduleClassLoaders.get(module);
-      if (loaderRef != null)
-      {
-         return loaderRef.get();
-      }
-      return null;
-   }
-   
-   private ClassLoader findParentUnitLoader(Module module)
-   {
-      if (module instanceof AbstractDeploymentClassLoaderPolicyModule)
-      {
-         DeploymentUnit unit = AbstractDeploymentClassLoaderPolicyModule.class.cast(module).getDeploymentUnit();
-         return unit.isTopLevel() ? null : unit.getParent().getClassLoader();
-      }
-      ClassLoaderDomain domain = ClassLoaderSystem.getInstance().getDomain(module.getDeterminedDomainName());
-      if (domain.getParent() instanceof ClassLoaderToLoaderAdapter)
-      {
-         ClassLoaderToLoaderAdapter cp2la = (ClassLoaderToLoaderAdapter)domain.getParent();
-         return SecurityActions.getClassLoader(cp2la);
-      }
-      return null;
-   }
-}
\ No newline at end of file

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/DomainRegistry.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/DomainRegistry.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/DomainRegistry.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/DomainRegistry.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,51 @@
+package org.jboss.classpool.plugins.jbosscl;
+/*
+* 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.
+*/
+
+
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloading.spi.dependency.Module;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public interface DomainRegistry
+{
+   ClassLoaderSystem getSystem();
+   
+   ClassLoaderDomain getDefaultDomain();
+   
+   boolean initMapsForModule(Module module);
+
+   void cleanupModule(Module module);
+   
+   ClassLoaderDomain getClassLoaderDomainForLoader(ClassLoader cl);
+
+   ClassLoader getParentUnitLoader(ClassLoader loader);
+
+   Module getModule(ClassLoader loader);
+
+   ClassLoader getClassLoader(Module module);
+}
\ No newline at end of file

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBoss5ClassPool.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPool.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBoss5ClassPool.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBoss5ClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,76 @@
+/*
+* 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.plugins.jbosscl;
+
+import java.net.URL;
+import java.security.ProtectionDomain;
+
+import javassist.CannotCompileException;
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.spi.AbstractClassPool;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+class JBoss5ClassPool extends AbstractClassPool implements ToClassInvokerPoolReference
+{
+   protected ToClassInvoker toClassInvoker = null;
+
+   boolean closed;
+   
+   protected JBoss5ClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, URL tmpURL)
+   {
+      super(cl, src, repository);
+      toClassInvoker = new ToClassInvoker(tmpURL);
+   }
+
+   protected JBoss5ClassPool(ClassPool src, ScopedClassPoolRepository repository)
+   {
+      super(src, repository);
+   }
+
+   public boolean isUnloadedClassLoader()
+   {
+      return closed;
+   }
+
+   public void close()
+   {
+      closed = true;
+      super.close();
+   }
+
+   public Class<?> toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
+   {
+      return toClassInvoker.toClass(this, cc, getResourceName(cc.getName()), loader, domain);
+   }
+
+   public Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
+   {
+      return super.toClass(cc, loader, domain);
+   }
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBoss5ClassPoolFactory.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPoolFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBoss5ClassPoolFactory.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBoss5ClassPoolFactory.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,102 @@
+/*
+* 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.net.URL;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolFactory;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloading.spi.RealClassLoader;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classpool.plugins.AbstractJBossClassPoolFactory;
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.classpool.spi.ClassPoolRepository;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @author adrian at jboss.org
+ * @version $Revision$
+ **/
+ at Deprecated
+public class JBoss5ClassPoolFactory extends AbstractJBossClassPoolFactory implements ScopedClassPoolFactory
+{
+   private DomainRegistry registry;
+   
+   public JBoss5ClassPoolFactory(DomainRegistry registry)
+   {
+      this.registry = registry;
+   }
+   
+   public AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+   {      
+      ClassPool parent = getCreateParentClassPools(cl, src, repository);
+
+      AbstractClassPool pool = null;
+      
+      if (cl instanceof RealClassLoader)
+      {
+         Module module = registry.getModule(cl);
+         if (module != null && module.getDeterminedParentDomainName() != null)
+         {
+            //It is scoped
+            ClassLoaderSystem sys = registry.getSystem();
+            ClassLoaderDomain domain = sys.getDomain(module.getDeterminedDomainName());
+            boolean parentFirst = module.isJ2seClassLoadingCompliance();
+            ClassPool parentDomainPool = getParentUnitClassPool(cl); 
+            pool = new ScopedJBoss5ClassPool(cl, parent, parentDomainPool, repository, getTempURL(module), parentFirst, domain);
+         }
+         else
+         {
+            pool =  new JBoss5ClassPool(cl, parent, repository, getTempURL(module));
+         }
+      }
+      
+      if (pool == null)
+      {
+         pool = new AbstractClassPool(cl, parent, repository);
+      }
+      log.debug("Created pool " + pool + " for loader " + cl);
+      
+      return pool;
+   }
+
+   private ClassPool getParentUnitClassPool(ClassLoader cl)
+   {
+      ClassLoader parent = registry.getParentUnitLoader(cl);
+      return ClassPoolRepository.getInstance().registerClassLoader(parent);
+   }
+   
+
+   private URL getTempURL(Module module)
+   {
+      if (module == null)
+         return null;
+      
+      return module.getDynamicClassRoot();
+   }
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolDomain.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolDomain.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolDomain.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolDomain.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,266 @@
+/*
+* 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.plugins.jbosscl;
+
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.NotFoundException;
+
+import org.jboss.classloader.spi.ParentPolicy;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classpool.base.BaseClassPool;
+import org.jboss.classpool.base.BaseClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.helpers.ClassLoaderUtils;
+import org.jboss.classpool.plugins.DelegatingClassPool;
+import org.jboss.classpool.spi.ClassPoolRepository;
+
+/**
+ * JBoss Cl class pool domain.
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @version $Revision$
+ */
+class JBossClClassPoolDomain extends BaseClassPoolDomain
+{
+   private Map<String, Set<DelegatingClassPool>> poolsByPackage = new HashMap<String, Set<DelegatingClassPool>>();
+   private DomainRegistry registry;
+   
+   public JBossClClassPoolDomain(String domainName, ParentPolicy parentPolicy, DomainRegistry registry)
+   {
+      super(domainName, 
+            new JBossClParentDelegationStrategy(parentPolicy, 
+                  JBossClClassPoolToClassPoolDomainAdaptorFactory.getInstance())
+      );
+      this.registry = registry;
+   }
+   
+   public JBossClClassPoolDomain(String domainName, ClassPoolDomain parent, ParentPolicy parentPolicy, DomainRegistry registry)
+   {
+      super(domainName, 
+            new JBossClParentDelegationStrategy(
+                  parent, 
+                  parentPolicy, 
+                  JBossClClassPoolToClassPoolDomainAdaptorFactory.getInstance())
+      );
+      this.registry = registry;
+   }
+   
+   public JBossClClassPoolDomain(String domainName, ClassPool parent, ParentPolicy parentPolicy, DomainRegistry registry)
+   {
+      super(domainName, 
+            new JBossClParentDelegationStrategy(
+                  parent, 
+                  parentPolicy, 
+                  JBossClClassPoolToClassPoolDomainAdaptorFactory.getInstance())
+      );
+      this.registry = registry;
+   }
+
+   synchronized void setupPoolsByPackage(DelegatingClassPool pool)
+   {
+      if (pool instanceof JBossClDelegatingClassPool == false)
+      {
+         throw new IllegalStateException("Not an instance of JBossClDelegatingClassPool: " + pool.getClass().getName());
+      }
+      
+      Module module = getModuleForPool(pool);
+      boolean trace = logger.isTraceEnabled();
+      
+      for (String pkg : module.getPackageNames())
+      {
+         Set<DelegatingClassPool> pools = poolsByPackage.get(pkg);
+         if (pools == null)
+         {
+            pools = new LinkedHashSet<DelegatingClassPool>();
+            poolsByPackage.put(pkg, pools);
+         }
+         pools.add(pool);
+         if (trace) logger.trace(this + " adding package " + pkg + " for pool " + pool);
+      }
+   }
+   
+   @Override
+   public synchronized void removeClassPool(DelegatingClassPool pool)
+   {
+      super.removeClassPool(pool);
+   
+      Module module = getModuleForPool(pool);
+      boolean trace = logger.isTraceEnabled();
+
+      for (String pkg : module.getPackageNames())
+      {
+         Set<DelegatingClassPool> pools = poolsByPackage.get(pkg);
+         if (pools != null)
+         {
+            pools.remove(pool);
+            if (pools.size() == 0)
+            {
+               poolsByPackage.remove(pkg);
+               if (trace) logger.trace(this + " removing package " + pkg + " for pool " + pool);
+            }
+         }
+      }
+   }
+ 
+   @Override
+   public CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
+   {
+      if (trace) logger.trace(this + " looking for " + classname);
+      
+      CtClass clazz = getCheckPrimitive(classname);
+      if (clazz != null)
+      {
+         if (trace) logger.trace(this + " isPrimitive " + classname);
+      }
+      else
+      {
+         Module module = getModuleForPool(initiatingPool);
+         if (module != null && module.isImportAll())
+         {
+            //Use the old "big ball of mud" model
+            if (trace) logger.trace(this + " isImportAll");
+            return super.getCachedOrCreate(initiatingPool, classname, resourceName, create, trace);
+         }
+         
+         //Attempt OSGi style loading
+         if (isParentBefore(classname))
+         {
+            if (trace) logger.trace(this + " checking parent first for " + classname);
+            clazz = getCachedOrCreateFromParent(null, classname, resourceName, create, trace);
+         }
+         
+         //Check imports first
+         if (clazz == null && module != null)
+         {
+            if (trace) logger.trace(this + " checking imports for " + classname);
+            clazz = getCtClassFromModule(module, classname, trace);
+         }
+         
+         //Try to check the initiating pool itself
+         if (clazz == null && initiatingPool != null)
+         {
+            if (trace) logger.trace(this + " checking pool " + initiatingPool + " locally for " + classname);
+            clazz = initiatingPool.loadLocally(classname, resourceName, create);
+         }
+         
+         if (clazz == null && isParentAfter(classname))
+         {
+            if (trace) logger.trace(this + " checking parent last for " + classname);
+            clazz = getCachedOrCreateFromParent(null, classname, resourceName, create, trace);
+         }
+      }
+      if (trace) logger.trace(this + " found " + classname + " in " + (clazz == null ? "null" : clazz.getClassPool()));
+      return clazz;
+   }
+   
+   private CtClass getCheckPrimitive(String classname)
+   {
+      if (ClassLoaderUtils.isPrimitiveType(classname))
+      {
+         try
+         {
+            return ClassPool.getDefault().get(classname);
+         }
+         catch(NotFoundException e)
+         {
+            throw new RuntimeException(classname + " should have been a primitive", e);
+         }
+      }
+      return null;
+   }
+   
+   private Module getModuleForPool(DelegatingClassPool pool)
+   {
+      if (pool == null)
+      {
+         return null;
+      }
+      Module module = ((JBossClDelegatingClassPool)pool).getModule();
+      if (logger.isTraceEnabled()) logger.trace(this + " got module " + module + " for " + pool);
+      return module;
+   }
+   
+   @Override
+   protected List<DelegatingClassPool> getPoolsForClassName(String classname)
+   {
+      String packageName = ClassLoaderUtils.getPackageName(classname);
+      Set<DelegatingClassPool> poolSet = poolsByPackage.get(packageName);
+      return (poolSet == null) ? Collections.<DelegatingClassPool>emptyList() : new ArrayList<DelegatingClassPool>(poolSet);
+   }
+
+   private CtClass getCtClassFromModule(final Module module, final String classname, boolean trace)
+   {
+      Module found = null;
+      try
+      {
+         found = AccessController.doPrivileged(new PrivilegedExceptionAction<Module>()
+         {
+         
+            public Module run() throws Exception
+            {
+               return module.getModuleForClass(ClassLoaderUtils.stripArrayFromClassName(classname));
+            }
+         });
+      }
+      catch (PrivilegedActionException e)
+      {
+         if (e.getCause() instanceof ClassNotFoundException == false)
+         {
+            throw new RuntimeException(e);
+         }
+      }
+
+      if (trace) logger.trace(this + " module for " + classname + " " + found);
+
+      if (found == null || found == module)
+      {
+         return null;
+      }
+      ClassLoader foundLoader = registry.getClassLoader(found);
+      ClassPool pool = ClassPoolRepository.getInstance().registerClassLoader(foundLoader);
+      try
+      {
+         if (pool instanceof BaseClassPool)
+         {
+            return getCachedOrCreateFromPool((BaseClassPool)pool, classname, true, trace);
+         }
+         return pool.get(classname);
+      }
+      catch(NotFoundException ignore)
+      {
+      }
+      return null;
+   }
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,54 @@
+/*
+* 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.plugins.jbosscl;
+
+import javassist.ClassPool;
+
+import org.jboss.classloader.spi.base.BaseClassLoaderDomain;
+import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdapter;
+import org.jboss.classpool.spi.ClassPoolRepository;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @version $Revision$
+ */
+class JBossClClassPoolToClassPoolDomainAdapter extends ClassPoolToClassPoolDomainAdapter
+{
+   public JBossClClassPoolToClassPoolDomainAdapter()
+   {
+      super();
+   }
+   
+   public JBossClClassPoolToClassPoolDomainAdapter(ClassPool classPool)
+   {
+      super(classPool);
+   }
+   
+   // TODO JBREFLECT-65 FIXME  this methd shouldn't be returning always the app classloader
+   @Override
+   public ClassPool initialiseParentClassLoader()
+   {
+      return ClassPoolRepository.getInstance().registerClassLoader(BaseClassLoaderDomain.class.getClassLoader());
+   }
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolToClassPoolDomainAdaptorFactory.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolToClassPoolDomainAdaptorFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolToClassPoolDomainAdaptorFactory.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClClassPoolToClassPoolDomainAdaptorFactory.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,59 @@
+/*
+* 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.plugins.jbosscl;
+
+import javassist.ClassPool;
+
+import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdapter;
+import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdaptorFactory;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @version $Revision$
+ */
+class JBossClClassPoolToClassPoolDomainAdaptorFactory implements ClassPoolToClassPoolDomainAdaptorFactory
+{
+   private static final JBossClClassPoolToClassPoolDomainAdaptorFactory INSTANCE = new JBossClClassPoolToClassPoolDomainAdaptorFactory();
+   
+   private JBossClClassPoolToClassPoolDomainAdaptorFactory()
+   {
+      
+   }
+   
+   public static ClassPoolToClassPoolDomainAdaptorFactory getInstance()
+   {
+      return INSTANCE;
+   }
+   
+   public ClassPoolToClassPoolDomainAdapter createAdaptor()
+   {
+      return new JBossClClassPoolToClassPoolDomainAdapter();
+   }
+   
+   public ClassPoolToClassPoolDomainAdapter createAdaptor(ClassPool classPool)
+   {
+      return new JBossClClassPoolToClassPoolDomainAdapter(classPool);
+   }
+
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPool.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPool.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPool.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,95 @@
+/*
+* 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.plugins.jbosscl;
+
+import java.lang.ref.WeakReference;
+import java.security.ProtectionDomain;
+
+import javassist.CannotCompileException;
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.plugins.DelegatingClassPool;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+class JBossClDelegatingClassPool extends DelegatingClassPool implements ToClassInvokerPoolReference
+{
+   private WeakReference<Module> module;
+   private RegisterModuleCallback callback;
+
+   ToClassInvoker toClassInvoker;
+   
+   protected JBossClDelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent,
+         ScopedClassPoolRepository repository, Module module, RegisterModuleCallback callback)
+   {
+      super(domain, cl, parent, repository);
+      if (logger.isTraceEnabled())
+      {
+         logger.trace("ClassPool being created: " + cl + " - " + this);
+      }
+      if (module == null)
+      {
+         throw new IllegalStateException("Null Module for loader " + cl);
+      }
+      if (domain instanceof JBossClClassPoolDomain == false)
+      {
+         throw new IllegalArgumentException("Domain was not instance of JBossClClassPoolDomain: " + domain.getClass().getName());
+      }
+      this.module = new WeakReference<Module>(module);
+      this.callback = callback;
+      toClassInvoker = new ToClassInvoker(module == null ? null : module.getDynamicClassRoot());
+      if (logger.isTraceEnabled()) logger.trace(this + " module");
+      ((JBossClClassPoolDomain)domain).setupPoolsByPackage(this);
+   }
+
+   Module getModule()
+   {
+      if (module != null)
+      {
+         return module.get();
+      }
+      return null;
+   }
+   
+   public Class<?> toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
+   {
+      return toClassInvoker.toClass(this, cc, getResourceName(cc.getName()), loader, domain);
+   }
+
+   public Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
+   {
+      return super.toClass(cc, loader, domain);
+   }
+
+   @Override
+   public void close()
+   {
+      super.close();
+   }
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolFactory.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPoolFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolFactory.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolFactory.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,220 @@
+/*
+* 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.plugins.jbosscl;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Collection;
+import java.util.HashSet;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolFactory;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloading.spi.RealClassLoader;
+import org.jboss.classloading.spi.dependency.ClassLoading;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomainRegistry;
+import org.jboss.classpool.plugins.NonDelegatingClassPool;
+import org.jboss.classpool.plugins.temp.TempClassPoolFactory;
+import org.jboss.classpool.spi.AbstractClassPool;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class JBossClDelegatingClassPoolFactory extends TempClassPoolFactory implements ScopedClassPoolFactory
+{
+   private final DomainRegistry registry;
+   
+   private final RegisterModuleCallback registerModuleCallback;
+   
+   private Collection<ClassLoader> currentClassLoaders = new HashSet<ClassLoader>();
+   
+   public JBossClDelegatingClassPoolFactory(DomainRegistry registry, RegisterModuleCallback registerModuleCallback)
+   {
+      this.registry = registry;
+      this.registerModuleCallback = registerModuleCallback;
+   }
+   
+   public synchronized AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+   {
+      if (this.currentClassLoaders.contains(cl))
+      {
+         return null;
+      }
+      currentClassLoaders.add(cl);
+      try
+      {
+      ClassPool parent = getCreateParentClassPools(cl, src, repository);
+      
+      if (cl instanceof RealClassLoader)
+      {
+         Module module = registry.getModule(cl);
+         if (module == null)
+         {
+            module = getModuleForClassLoader(cl);
+         }
+         registerModuleCallback.registerModule(module);
+         registerBootstrapLoaders(module, repository);
+         ClassPoolDomain domain = getDomain(module, cl, repository);
+         // this indicates that the domain corresponds to a cp that is being created
+         // to avoid duplicate class pools
+         if (domain == null)
+         {
+            return null;
+         }
+         return new JBossClDelegatingClassPool(domain, cl, parent, repository, module, registerModuleCallback);
+      }
+      if (parent == null)
+      {
+         parent = ClassPool.getDefault();
+      }
+      return new NonDelegatingClassPool(cl, parent, repository, true);
+      }
+      finally
+      {
+         this.currentClassLoaders.remove(cl);
+      }
+   }
+
+   private synchronized ClassPoolDomain getDomain(Module module, ClassLoader cl, ScopedClassPoolRepository repository)
+   {
+      ClassLoaderDomain domain = null;
+      ClassLoaderSystem sys = registry.getSystem();
+      if (module != null && module.getDeterminedParentDomainName() != null)
+      {
+         //It is scoped
+         domain = sys.getDomain(module.getDeterminedDomainName());
+      }
+      
+      if (domain == null)
+      {
+         domain = registry.getDefaultDomain();
+      }
+      
+      return getDomain(cl, domain, sys, repository);
+   }
+
+   private ClassPoolDomain getDomain(ClassLoader cl, ClassLoaderDomain domain,
+         ClassLoaderSystem sys, ScopedClassPoolRepository repository)
+   {
+      ClassPoolDomain poolDomain = ClassPoolDomainRegistry.getInstance().getDomain(domain);
+      if (poolDomain == null)
+      {
+         String parentDomainName = domain.getParentDomainName();
+         if (parentDomainName != null)
+         {
+            ClassLoaderDomain parentDomain = sys.getDomain(parentDomainName);
+            if (parentDomain == null)
+            {
+               throw new RuntimeException("No domain found, domain name: " + parentDomainName);
+            }
+            ClassPoolDomain parentPoolDomain = this.getDomain(null, parentDomain, sys, repository);
+            poolDomain = new JBossClClassPoolDomain(domain.getName(), parentPoolDomain, domain.getParentPolicy(), registry);
+         }
+         else
+         {
+            ClassLoader parentUnitLoader = registry.getParentUnitLoader(cl);
+            if (this.currentClassLoaders.contains(parentUnitLoader))
+            {
+               return null;
+            }
+            ClassPool parentUnitPool = parentUnitLoader == null? null: repository.registerClassLoader(parentUnitLoader);
+            if (parentUnitPool == null)
+            {
+               poolDomain = new JBossClClassPoolDomain(domain.getName(), domain.getParentPolicy(), registry);
+            }
+            else
+            {
+               poolDomain = new JBossClClassPoolDomain(domain.getName(), parentUnitPool, domain.getParentPolicy(), registry);
+            }
+         }
+         ClassPoolDomainRegistry.getInstance().addClassPoolDomain(domain, poolDomain);
+      }
+      return poolDomain;
+   }
+   
+   @Override
+   protected ClassPool getCreateParentClassPools(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+   {
+      ClassPool parent = super.getCreateParentClassPools(cl, src, repository);
+      if (parent == ClassPool.getDefault())
+      {
+         //In AS BaseClassLoader seems to normally have a null parent
+         return null;
+      }
+      return parent;
+   }
+   
+   private void registerBootstrapLoaders(Module skip, ScopedClassPoolRepository repository)
+   {
+      Collection<Module> unregistered = registerModuleCallback.getUnregisteredModules();
+      if (unregistered.size() > 0)
+      {
+         for (Module module : unregistered)
+         {
+            if (module == skip)
+            {
+               continue;
+            }
+            ClassLoader loader = getClassLoaderForModule(module);
+            if (this.currentClassLoaders.contains(loader))
+            {
+               continue;
+            }
+            ClassPool classPool = repository.registerClassLoader(loader);
+            if (classPool == null)
+            {
+               repository.unregisterClassLoader(loader);
+            }
+         }
+      }
+   }
+   
+   private ClassLoader getClassLoaderForModule(final Module module)
+   {
+      return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
+      {
+      
+         public ClassLoader run()
+         {
+            return ClassLoading.getClassLoaderForModule(module);
+         }
+      });
+   }
+   
+   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/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolRepository.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPoolRepository.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolRepository.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClDelegatingClassPoolRepository.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,110 @@
+/*
+ * 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 javassist.scopedpool.ScopedClassPool;
+
+import org.jboss.classloading.spi.dependency.ClassLoading;
+import org.jboss.classloading.spi.dependency.Module;
+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
+{
+   Logger logger = Logger.getLogger(this.getClass());
+   
+   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 synchronized ClassPool registerClassLoader(ClassLoader classLoader)
+   {
+      ScopedClassPool classPool = (ScopedClassPool) super.registerClassLoader(classLoader);
+      if (classPool == null)
+      {
+         delegate.unregisterClassLoader(classLoader);
+      }
+      else
+      {
+         Module module = getModuleForClassLoader(classLoader);
+         this.registeredModules.put(module, classPool);
+      }
+      return classPool;
+   }
+   
+
+   public synchronized 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");
+         }
+         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/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClParentDelegationStrategy.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClParentDelegationStrategy.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClParentDelegationStrategy.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/JBossClParentDelegationStrategy.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,88 @@
+/*
+* 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.plugins.jbosscl;
+
+import javassist.ClassPool;
+
+import org.jboss.classloader.spi.ParentPolicy;
+import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classpool.base.AbstractParentDelegationStrategy;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdaptorFactory;
+import org.jboss.classpool.helpers.ClassLoaderUtils;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @version $Revision$
+ */
+class JBossClParentDelegationStrategy extends AbstractParentDelegationStrategy
+{
+   ParentPolicy parentPolicy;
+   
+   JBossClParentDelegationStrategy(ParentPolicy parentPolicy, ClassPoolToClassPoolDomainAdaptorFactory adaptorFactory)
+   {
+      super((ClassPoolDomain) null, adaptorFactory);
+      if (parentPolicy == null)
+      {
+         throw new IllegalStateException("Null parent policy");
+      }
+      this.parentPolicy = parentPolicy;
+   }
+   
+   JBossClParentDelegationStrategy(ClassPoolDomain parent, ParentPolicy parentPolicy, ClassPoolToClassPoolDomainAdaptorFactory adaptorFactory)
+   {
+      super(parent, adaptorFactory);
+      if (parentPolicy == null)
+      {
+         throw new IllegalStateException("Null parent policy");
+      }
+      this.parentPolicy = parentPolicy;
+   }
+   
+   JBossClParentDelegationStrategy(ClassPool parent, ParentPolicy parentPolicy, ClassPoolToClassPoolDomainAdaptorFactory adaptorFactory)
+   {
+      super(parent, adaptorFactory);
+      if (parentPolicy == null)
+      {
+         throw new IllegalStateException("Null parent policy");
+      }
+      this.parentPolicy = parentPolicy;
+   }
+
+   public boolean isParentAfter(String classname)
+   {
+      ClassFilter filter = parentPolicy.getAfterFilter();
+      boolean isParentAfter = filter.matchesClassName(ClassLoaderUtils.stripArrayFromClassName(classname));
+      if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentAfter " + isParentAfter);      
+      return isParentAfter;
+   }
+
+   public boolean isParentBefore(String classname)
+   {
+      ClassFilter filter = parentPolicy.getBeforeFilter();
+      boolean isParentBefore = filter.matchesClassName(ClassLoaderUtils.stripArrayFromClassName(classname));
+      if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentBefore " + isParentBefore);
+      return isParentBefore;
+   }
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/RegisterModuleCallback.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/RegisterModuleCallback.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/RegisterModuleCallback.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,94 @@
+/*
+* 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.plugins.jbosscl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classloading.spi.dependency.ModuleRegistry;
+import org.jboss.logging.Logger;
+
+/**
+ * Use with org.jboss.classpool.jbosscl.JBossClDelegatingClassPoolFactory
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ * @author <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @version $Revision$
+ */
+public class RegisterModuleCallback implements ModuleRegistry
+{
+   Logger logger = Logger.getLogger(this.getClass());
+   
+   private Set<Module> registeredModules = new HashSet<Module>();
+   private Set<Module> unregisteredModules = new HashSet<Module>();
+   private DomainRegistry domainRegistry;
+   
+   public RegisterModuleCallback(DomainRegistry domainRegistry)
+   {
+      this.domainRegistry = domainRegistry;
+   }
+   
+   public synchronized void addModule(Module module)
+   {
+      if (logger.isTraceEnabled())
+      {
+         logger.trace("Adding module " + module);
+      }
+      unregisteredModules.add(module);
+   }
+
+   public synchronized void removeModule(Module module)
+   {
+      
+      ClassLoader classLoader = domainRegistry.getClassLoader(module);
+      if (logger.isTraceEnabled())
+      {
+         logger.trace("Removing module " + module + " and class loader " + classLoader);
+      }
+      JBossClDelegatingClassPoolRepository.getInstance().unregisterClassLoader(classLoader, module);
+      domainRegistry.cleanupModule(module);
+      registeredModules.remove(module);
+      unregisteredModules.remove(module);
+   }
+   
+   public synchronized void registerModule(Module module)
+   {
+      if (logger.isTraceEnabled())
+      {
+         logger.trace("Registering module " + module);
+      }
+      
+      registeredModules.add(module);
+      unregisteredModules.remove(module);
+      
+      domainRegistry.initMapsForModule(module);
+   }
+   
+   public synchronized Collection<Module> getUnregisteredModules()
+   {
+      return new ArrayList<Module>(unregisteredModules);
+   }
+}
\ No newline at end of file

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/ScopedJBoss5ClassPool.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ScopedJBoss5ClassPool.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/ScopedJBoss5ClassPool.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/ScopedJBoss5ClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,400 @@
+/*
+* 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.plugins.jbosscl;
+
+import java.lang.ref.WeakReference;
+import java.net.URL;
+import java.util.ArrayList;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.NotFoundException;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.Loader;
+import org.jboss.classloading.spi.RealClassLoader;
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.classpool.spi.ClassPoolRepository;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class ScopedJBoss5ClassPool extends JBoss5ClassPool
+{
+   ThreadLocal<ClassPool> lastPool = new ThreadLocal<ClassPool>();
+   WeakReference<ClassLoaderDomain> domainRef;
+   /** The classpool representing the parent domain of this one */
+   ClassPool parentDomainPool;
+
+   public ScopedJBoss5ClassPool(ClassLoader cl, ClassPool src, ClassPool parentDomainPool, ScopedClassPoolRepository repository, 
+         URL tmpURL, boolean parentFirst, ClassLoaderDomain domain)
+   {
+      super(cl, src, repository, tmpURL);
+      super.childFirstLookup = !parentFirst;
+      this.parentDomainPool = parentDomainPool;
+      this.domainRef = new WeakReference<ClassLoaderDomain>(domain);
+      
+      logger.debug("Created new ScopedJBoss5ClasPool for " + cl + ", with parent: " + src + ", parentDomain: " + parentDomainPool + ", parentFirst: " + parentFirst);
+   }
+
+   private URL getResourceUrlForClass(String resourcename)
+   {
+      ClassLoaderDomain domain = domainRef.get();
+      return domain.getResource(resourcename);
+   }
+
+   private boolean isMine(URL myURL, String resourceName)
+   {
+      if (myURL == null)
+      {
+         return false;
+      }
+      
+      ClassLoaderDomain domain = domainRef.get();
+      Loader parent = domain.getParent();
+      URL parentURL = parent.getResource(resourceName);
+      
+      if (parentURL == null)
+      {
+         return true;
+      }
+      
+      if (!myURL.equals(parentURL))
+      {
+         return true;
+      }
+      
+      return false;
+   }
+   
+
+   @Override
+   protected synchronized CtClass get0(String classname, boolean useCache) throws NotFoundException
+   {
+      CtClass clazz = null;
+      if (useCache)
+      {
+         clazz = getCached(classname);
+         if (clazz != null)
+            return clazz;
+      }
+
+      if (!childFirstLookup)
+      {
+         if (parentDomainPool != null)
+         {
+            clazz = performGet(parentDomainPool, classname);
+            if (clazz != null)
+            {
+               return clazz;
+            }
+         }
+         if (parent != null)
+         {
+            clazz = performGet(parent, classname);
+            if (clazz != null)
+            {
+               return clazz;
+            }
+         }
+      }
+
+      clazz = createCtClass(classname, useCache);
+      if (clazz != null)
+      {
+         // clazz.getName() != classname if classname is "[L<name>;".
+         if (useCache)
+            cacheCtClass(clazz.getName(), clazz, false);
+
+         return clazz;
+      }
+
+      if (childFirstLookup)
+      {
+         if (parent != null)
+         {
+            clazz = performGet(parent, classname);
+            if (clazz != null)
+            {
+               return clazz;
+            }
+         }
+         if (parentDomainPool != null)
+         {
+            clazz = performGet(parentDomainPool, classname);
+            if (clazz != null)
+            {
+               return clazz;
+            }
+         }
+      }
+
+      return clazz;
+   }
+
+   private CtClass performGet(ClassPool pool, String classname)
+   {
+      try
+      {
+         // TODO check whether we should enable this optimization
+         //Want to avoid calling get() if possible since that creates NotFoundExceptions
+         //on misses which is expensive
+         /*if (pool instanceof AbstractClassPool)
+         {
+            return ((AbstractClassPool)pool).internalGet0(classname, true);
+         }
+         else
+         {*/
+            return pool.getCtClass(classname);
+      }
+      catch (NotFoundException e)
+      {
+         return null;
+      }
+   }
+   
+   
+   public CtClass getCached(String classname)
+   {
+      boolean trace = logger.isTraceEnabled();
+      
+      if (trace)
+      {
+         logger.trace("getCached() " + classname);
+      }
+      
+      if (classname == null)
+      {
+         if (trace)
+         {
+            logger.trace("getCached() returning null (classname == null)");
+         }
+         return null;
+      }
+      if (isUnloadedClassLoader())
+      {
+         if (trace)
+         {
+            logger.trace("getCached() returning null (unloaded)");
+         }
+         return null;
+      }
+
+      if (generatedClasses.get(classname) != null)
+      {
+         //It is a new class, and this callback is probably coming from the frozen check when creating a new nested class
+         if (trace)
+         {
+            logger.trace("getCached() In generated classes - check super");
+         }
+         return super.getCached(classname);
+      }
+      
+      //Is this from the scoped classloader itself of from the parent?
+      String resourcename = getResourceName(classname);
+      URL url = getResourceUrlForClass(resourcename);
+      
+      if (isMine(url, resourcename))
+      {
+         if (super.childFirstLookup)
+         {
+            //Parent delegation is false, attempt to get this class out of ourselves
+            CtClass clazz = super.getCachedLocally(classname);
+            if (clazz == null)
+            {
+               if (trace)
+               {
+                  logger.trace("getCached() Creating my class " + classname);
+               }
+               clazz = createCtClass(classname, false);
+               if (clazz != null)
+               {
+                  lockInCache(clazz);
+               }
+            }
+            if (clazz != null)
+            {
+               if (trace)
+               {
+                  logger.trace("getCached() Returning my class " + classname);
+               }
+               return clazz;
+            }
+         }
+         if (trace)
+         {
+            logger.trace("getCached() Checking super for my class " + classname);
+         }
+         return super.getCached(classname);
+      }
+      else if (url == null)
+      {
+         if (trace)
+         {
+            logger.trace("getCached() Checking super for my class " + classname + " (no url)");
+         }
+         return super.getCached(classname);
+      }
+      
+
+      try
+      {
+         ClassPool pool = getCorrectPoolForResource(classname, resourcename, url, trace);
+         if (trace)
+         {
+            logger.trace("getCached() Found pool for class " + classname + " " + pool);
+         }
+         if (pool != lastPool.get())
+         {
+            lastPool.set(pool);
+            CtClass found = pool.get(classname);
+            if (trace)
+            {
+               logger.trace("getCached() Found clazz " + classname + " in " + pool + " : " + found);
+            }
+            return found;
+         }
+      }
+      catch (NotFoundException e)
+      {
+      }
+      catch(StackOverflowError e)
+      {
+         throw e;
+      }
+      finally
+      {
+         lastPool.set(null);
+      }
+
+      return null;
+   }
+   
+   @Override
+   protected boolean includeInGlobalSearch()
+   {
+      return false;
+   } 
+   
+   private ClassPool getCorrectPoolForResource(String classname, String resourceName, URL url, boolean trace)
+   {
+      synchronized(ClassPoolRepository.getInstance().getRegisteredCLs())
+      {
+         //JBoss 5 has an extra NoAnnotationURLCLassLoader that is not on the default path, make sure that that is checked at the end
+         //FIXME This needs revisiting/removing once the 
+         ArrayList<ClassPool> noAnnotationURLClassLoaderPools = null;
+                 
+         ClassPoolRepository classPoolRepository = ClassPoolRepository.getInstance();
+         for(ClassPool classPool: classPoolRepository.getRegisteredCLs().values())
+         {
+            AbstractClassPool candidate = (AbstractClassPool)classPool;
+            if (candidate.isUnloadedClassLoader())
+            {
+               classPoolRepository.unregisterClassLoader(candidate.getClassLoader());
+               continue;
+            }
+            
+            if (candidate.getClassLoader() instanceof RealClassLoader)
+            {
+               //Sometimes the ClassLoader is a proxy for MBeanProxyExt?!
+               RealClassLoader bcl = (RealClassLoader)candidate.getClassLoader();
+               URL foundUrl = bcl.getResourceLocally(resourceName);
+               if (foundUrl != null)
+               {
+                  if (url.equals(foundUrl))
+                  {
+                     if (trace)
+                     {
+                        logger.trace("getCorrectPoolForResource() Candidate classloader " + bcl + " has local resource " + foundUrl);
+                     }
+                     return candidate;
+                  }
+               }
+            }
+            //FIXME Remove once we have the JBoss 5 version of pool
+            else if (isInstanceOfNoAnnotationURLClassLoader(candidate.getClassLoader()))
+            {
+               if (noAnnotationURLClassLoaderPools == null)
+               {
+                  noAnnotationURLClassLoaderPools = new ArrayList<ClassPool>(); 
+               }
+               noAnnotationURLClassLoaderPools.add(candidate);
+            }
+         }
+         
+         //FIXME Remove once we have the JBoss 5 version of pool
+         if (noAnnotationURLClassLoaderPools != null)
+         {
+            for (ClassPool pool : noAnnotationURLClassLoaderPools)
+            {
+               try
+               {
+                  pool.get(classname);
+                  if (trace)
+                  {
+                     logger.trace("getCorrectPoolForResource(() Found  " + classname + " (no url)");
+                  }
+                  return pool;
+               }
+               catch(NotFoundException ignoreTryNext)
+               {
+               }
+            }
+         }
+      }
+      return createTempPool();
+   }
+   
+   private ClassPool createTempPool()
+   {
+      //Rememeber that the stuff in jboss5/lib goes in a child classloader of the default classloader. We need
+      //to make this the parent of the temp classloader
+      ClassLoader loader = this.getClass().getClassLoader();// AspectManager.class.getClassLoader(); TODO validate this
+      ClassPool pool = ClassPoolRepository.getInstance().registerClassLoader(loader);
+      return ClassPoolRepository.getInstance().getClassPoolFactory().create(pool, ClassPoolRepository.getInstance());
+   }
+   
+   /**
+    * NoAnnotationURLCLassLoader lives in different packages in JBoss 4 and 5
+    */
+   private boolean isInstanceOfNoAnnotationURLClassLoader(ClassLoader loader)
+   {
+      if (loader == null)
+      {
+         return false;
+      }
+      Class<?> parent = loader.getClass();
+      while (parent != null)
+      {
+         if ("NoAnnotationURLClassLoader".equals(parent.getSimpleName()))
+         {
+            return true;
+         }
+         parent = parent.getSuperclass();
+      }
+      return false;
+   }
+   
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/SecurityActions.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/SecurityActions.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/SecurityActions.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/SecurityActions.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,118 @@
+/*
+* 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.plugins.jbosscl;
+
+import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+
+import org.jboss.classloader.spi.base.BaseClassLoaderSource;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+class SecurityActions
+{
+   interface GetParentAction
+   {
+      ClassLoader getParent(ClassLoader loader);
+      
+      GetParentAction NON_PRIVILEGED = new GetParentAction()
+      {
+         public ClassLoader getParent(ClassLoader loader)
+         {
+            return loader.getParent();
+         }
+      };
+      
+      GetParentAction PRIVILEGED = new GetParentAction()
+      {
+         public ClassLoader getParent(final ClassLoader loader)
+         {
+            try
+            {
+               return AccessController.doPrivileged(new PrivilegedExceptionAction<ClassLoader>()
+               {
+                  public ClassLoader run() throws Exception
+                  {
+                     return loader.getParent();
+                  }
+               });
+            }
+            catch (PrivilegedActionException e)
+            {
+               throw new RuntimeException(e.getException());
+            }
+         }
+      };
+   }
+
+   public static ClassLoader getParent(ClassLoader loader)
+   {
+      if (System.getSecurityManager() == null)
+      {
+         return GetParentAction.NON_PRIVILEGED.getParent(loader);
+      }
+      else
+      {
+         return GetParentAction.PRIVILEGED.getParent(loader);
+      }
+   }
+   
+   private static final Method getClassLoader;
+
+   static
+   {
+      getClassLoader = AccessController.doPrivileged(new PrivilegedAction<Method>()
+      {
+         public Method run()
+         {
+            try
+            {
+               Method method = BaseClassLoaderSource.class.getDeclaredMethod("getClassLoader");
+               method.setAccessible(true);
+               return method;
+            }
+            catch (NoSuchMethodException e)
+            {
+               throw new RuntimeException("Cannot get classloader from " + BaseClassLoaderSource.class.getName(), e);
+            }
+         }
+      });
+   }
+
+   static ClassLoader getClassLoader(BaseClassLoaderSource clSource)
+   {
+      try
+      {
+         return (ClassLoader)getClassLoader.invoke(clSource);
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/ToClassInvoker.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvoker.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/ToClassInvoker.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/ToClassInvoker.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,102 @@
+/*
+* 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.plugins.jbosscl;
+
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
+import java.net.URL;
+import java.security.ProtectionDomain;
+
+import javassist.CannotCompileException;
+import javassist.CtClass;
+
+import org.jboss.classloading.spi.RealClassLoader;
+import org.jboss.logging.Logger;
+import org.jboss.virtual.plugins.context.memory.MemoryContextFactory;
+
+/**
+ * 
+ * 
+ * @author  <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version  $Revision$
+ */
+public class ToClassInvoker
+{
+   Logger logger = Logger.getLogger(this.getClass());
+   
+   public URL tempURL;
+
+   public Object tmplock = new Object();
+
+   public ToClassInvoker(URL tempURL)
+   {
+      this.tempURL = tempURL;
+   }
+
+   public Class<?> toClass(ToClassInvokerPoolReference pool, CtClass cc, String classFileName, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
+   {
+      boolean trace = logger.isTraceEnabled();
+      pool.lockInCache(cc);
+      final ClassLoader myloader = pool.getClassLoader();
+      if (myloader == null || tempURL == null)
+      {
+         if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " tempURL:" + tempURL + " default to superPool.toClass for " + cc.getName());
+         Class<?> clazz = pool.superPoolToClass(cc, loader, domain);
+         if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
+         return clazz;
+      }
+      
+      try
+      {
+         URL outputURL = new URL(tempURL.toString() + "/" + classFileName);
+         //Write the classfile to the temporary url
+         synchronized (tmplock)
+         {
+            if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " writing bytes to " + tempURL);
+            ByteArrayOutputStream byteout = new ByteArrayOutputStream();
+            BufferedOutputStream out = new BufferedOutputStream(byteout);
+            out.write(cc.toBytecode());
+            out.flush();
+            out.close();
+            
+            byte[] classBytes = byteout.toByteArray();
+            MemoryContextFactory factory = MemoryContextFactory.getInstance();
+            factory.putFile(outputURL, classBytes);
+
+            if (myloader instanceof RealClassLoader)
+            {
+               ((RealClassLoader)myloader).clearBlackList(classFileName);
+            }
+            
+            Class<?> clazz = myloader.loadClass(cc.getName());
+            if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
+            return clazz;
+         }
+      }
+      catch(Exception e)
+      {
+         ClassFormatError cfe = new ClassFormatError("Failed to load dyn class: " + cc.getName() + " on " + this + " loader:" + myloader);
+         cfe.initCause(e);
+         throw cfe;
+      }
+   }
+}
\ No newline at end of file

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/ToClassInvokerPoolReference.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvokerPoolReference.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/ToClassInvokerPoolReference.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/ToClassInvokerPoolReference.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -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.plugins.jbosscl;
+
+import java.security.ProtectionDomain;
+
+import javassist.CannotCompileException;
+import javassist.CtClass;
+
+/**
+ * Exposes methods on ClassPool needed by JBoss5ClassPool
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public interface ToClassInvokerPoolReference
+{
+   Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException;
+   ClassLoader getClassLoader();
+   void lockInCache(CtClass clazz);
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/VFSClassLoaderDomainRegistry.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/VFSClassLoaderDomainRegistry.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/jbosscl/VFSClassLoaderDomainRegistry.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,250 @@
+package org.jboss.classpool.plugins.jbosscl;
+/*
+* 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.
+*/ 
+
+
+import java.lang.ref.WeakReference;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import org.jboss.classloader.plugins.loader.ClassLoaderToLoaderAdapter;
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloading.spi.dependency.ClassLoading;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.deployers.plugins.classloading.AbstractDeploymentClassLoaderPolicyModule;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class VFSClassLoaderDomainRegistry implements DomainRegistry
+{
+   protected final static ClassLoaderDomain domain = new ClassLoaderDomain("NOT_USED_PLACEHOLDER");
+   
+   private static final VFSClassLoaderDomainRegistry instance = new VFSClassLoaderDomainRegistry();
+   
+   public static final VFSClassLoaderDomainRegistry getInstance()
+   {
+      return instance;
+   }
+   
+   private ClassLoaderSystem system;
+   
+   private ClassLoaderDomain defaultDomain;
+   
+   /** classloader domains by their classloaders */
+   protected Map<ClassLoader, WeakReference<ClassLoaderDomain>> classLoaderDomainsByLoader = new WeakHashMap<ClassLoader, WeakReference<ClassLoaderDomain>>();
+
+   /** parent deployment unit classloaders indexed by children */
+   private Map<ClassLoader, WeakReference<ClassLoader>> classLoaderUnitParents = new WeakHashMap<ClassLoader, WeakReference<ClassLoader>>(); 
+   
+   /** Modules by classloader */
+   private Map<ClassLoader, WeakReference<Module>> classLoaderModules = new WeakHashMap<ClassLoader, WeakReference<Module>>();
+   
+   /** classloaders by module */
+   private Map<Module, WeakReference<ClassLoader>> moduleClassLoaders = new WeakHashMap<Module, WeakReference<ClassLoader>>();
+
+   protected Map<ClassLoaderDomain, Integer> classLoaderDomainReferenceCounts = new WeakHashMap<ClassLoaderDomain, Integer>();
+   
+   protected VFSClassLoaderDomainRegistry() {}
+   
+   /**
+    * Needed for the tests, not expected to be needed in production
+    */
+   public void setSystem(ClassLoaderSystem system)
+   {
+      this.system = system;
+   }
+   
+   /**
+    * Needed for the tests, not expected to be needed in production
+    */
+   public void setDefaultDomain(ClassLoaderDomain domain)
+   {
+      this.defaultDomain = domain;
+   }
+   
+   public synchronized ClassLoaderSystem getSystem()
+   {
+      if (system == null)
+      {
+         system = ClassLoaderSystem.getInstance();
+      }
+      return system;
+   }
+   
+   public synchronized ClassLoaderDomain getDefaultDomain()
+   {
+      if (defaultDomain == null)
+      {
+         defaultDomain = getSystem().getDefaultDomain();
+      }
+      return defaultDomain;
+   }
+
+   public synchronized boolean initMapsForModule(Module module)
+   {
+      ClassLoader loader = ClassLoading.getClassLoaderForModule(module);
+      ClassLoader parentUnitLoader = findParentUnitLoader(module);
+      if (loader == parentUnitLoader)
+      {
+         throw new IllegalArgumentException("initMapsForLoader() should only be called if parentUnitLoader is different from loader");
+      }
+      ClassLoaderSystem system = getSystem();
+      
+      String domainName = module.getDeterminedDomainName();
+      ClassLoaderDomain clDomain = system.getDomain(domainName);
+      this.validateInitMaps(loader, clDomain, module, parentUnitLoader);
+      
+      boolean ret = false;
+      if (!classLoaderDomainsByLoader.containsKey(loader))
+      {
+         Integer count = classLoaderDomainReferenceCounts.get(clDomain);
+         int cnt = count == null ? 0 : count.intValue();
+         classLoaderDomainReferenceCounts.put(clDomain, cnt);
+         
+         classLoaderDomainsByLoader.put(loader, new WeakReference<ClassLoaderDomain>(clDomain));
+         classLoaderUnitParents.put(loader, new WeakReference<ClassLoader>(parentUnitLoader));
+         classLoaderModules.put(loader, new WeakReference<Module>(module));
+         moduleClassLoaders.put(module, new WeakReference<ClassLoader>(loader));
+         ret = true;
+         this.initMapsDone(loader, clDomain, module, parentUnitLoader);
+      }
+      
+      
+      return ret;
+   }
+   
+   protected void validateInitMaps(ClassLoader loader, ClassLoaderDomain loaderDomain, Module module, ClassLoader parentUnitLoader)
+   {
+      
+   }
+   
+   protected void initMapsDone(ClassLoader loader, ClassLoaderDomain loaderDomain, Module module, ClassLoader parentUnitLoader)
+   {
+      
+   }
+   
+   public synchronized void cleanupModule(Module module)
+   {
+      ClassLoader loader = this.getClassLoader(module);
+      validateCleanupLoader(loader);
+      WeakReference<ClassLoaderDomain> clDomainRef = classLoaderDomainsByLoader.remove(loader);
+      ClassLoaderDomain clDomain = clDomainRef == null ? null : clDomainRef.get();
+      int cnt = 0;
+      if (clDomain != null)
+      {
+         Integer count =  classLoaderDomainReferenceCounts.get(clDomain);
+         cnt = count == null ? 0 : count.intValue();
+         if (cnt > 0)
+         {
+            cnt--;
+         }
+         if (cnt == 0)
+         {
+            classLoaderDomainReferenceCounts.remove(clDomain);
+         }
+         else
+         {
+            classLoaderDomainReferenceCounts.put(clDomain, ++cnt);
+         }
+         classLoaderUnitParents.remove(loader);
+         classLoaderModules.remove(loader);
+         moduleClassLoaders.remove(module);
+      }
+      cleanupLoaderDone(loader, clDomain, cnt);
+   }
+
+   protected void validateCleanupLoader(ClassLoader loader) {}
+   
+   protected void cleanupLoaderDone(ClassLoader loader, ClassLoaderDomain loaderDomain, int domainReferences) {}
+   
+   public synchronized ClassLoaderDomain getClassLoaderDomainForLoader(ClassLoader cl)
+   {
+      WeakReference<ClassLoaderDomain> clDomainRef = classLoaderDomainsByLoader.get(cl);
+      if (clDomainRef != null)
+      {
+         return clDomainRef.get();
+      }
+      
+      ClassLoader parent = SecurityActions.getParent(cl);
+      if (parent != null)
+      {
+         ClassLoaderDomain domain = getClassLoaderDomainForLoader(parent);
+         if (domain != null)
+         {
+            classLoaderDomainsByLoader.put(parent, new WeakReference<ClassLoaderDomain>(domain));
+            return domain;
+         }
+      }
+      return null;
+   }
+   
+   public synchronized ClassLoader getParentUnitLoader(ClassLoader loader)
+   {
+      WeakReference<ClassLoader> parentRef = classLoaderUnitParents.get(loader);
+      if (parentRef != null)
+      {
+         return parentRef.get();
+      }
+      return null;
+   }
+   
+   public synchronized Module getModule(ClassLoader loader)
+   {
+      WeakReference<Module> moduleRef = classLoaderModules.get(loader);
+      if (moduleRef != null)
+      {
+         return moduleRef.get();
+      }
+      return null;
+   }
+   
+   public synchronized ClassLoader getClassLoader(Module module)
+   {
+      WeakReference<ClassLoader> loaderRef = moduleClassLoaders.get(module);
+      if (loaderRef != null)
+      {
+         return loaderRef.get();
+      }
+      return null;
+   }
+   
+   private ClassLoader findParentUnitLoader(Module module)
+   {
+      if (module instanceof AbstractDeploymentClassLoaderPolicyModule)
+      {
+         DeploymentUnit unit = AbstractDeploymentClassLoaderPolicyModule.class.cast(module).getDeploymentUnit();
+         return unit.isTopLevel() ? null : unit.getParent().getClassLoader();
+      }
+      ClassLoaderDomain domain = ClassLoaderSystem.getInstance().getDomain(module.getDeterminedDomainName());
+      if (domain.getParent() instanceof ClassLoaderToLoaderAdapter)
+      {
+         ClassLoaderToLoaderAdapter cp2la = (ClassLoaderToLoaderAdapter)domain.getParent();
+         return SecurityActions.getClassLoader(cp2la);
+      }
+      return null;
+   }
+}
\ No newline at end of file

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/temp (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/temp)

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/temp/TempClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/temp/TempClassPoolFactory.java	2009-12-09 01:06:36 UTC (rev 97574)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/temp/TempClassPoolFactory.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -19,9 +19,9 @@
 * 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.as.temp;
+package org.jboss.classpool.plugins.temp;
 
-import org.jboss.classpool.plugins.as.AbstractJBossClassPoolFactory;
+import org.jboss.classpool.plugins.AbstractJBossClassPoolFactory;
 import org.jboss.classpool.spi.AbstractClassPool;
 
 import javassist.ClassPool;

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/temp/TempJBossClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/temp/TempJBossClassPool.java	2009-12-09 01:06:36 UTC (rev 97574)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/temp/TempJBossClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -19,7 +19,7 @@
 * 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.as.temp;
+package org.jboss.classpool.plugins.temp;
 
 import org.jboss.classpool.spi.AbstractClassPool;
 

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/temp/TempJBossDelegatingClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/temp/TempJBossDelegatingClassPool.java	2009-12-09 01:06:36 UTC (rev 97574)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/temp/TempJBossDelegatingClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -19,7 +19,7 @@
 * 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.as.temp;
+package org.jboss.classpool.plugins.temp;
 
 import org.jboss.classpool.base.BaseClassPool;
 import org.jboss.classpool.spi.AbstractClassPool;

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/JBossClassPool.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPool.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/JBossClassPool.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/JBossClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,84 @@
+/*
+* 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.ucl;
+
+import java.io.File;
+import java.net.URL;
+import java.security.ProtectionDomain;
+
+import javassist.CannotCompileException;
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.mx.loading.RepositoryClassLoader;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @author adrian at jboss.org
+ * @version $Revision$
+ */
+public class JBossClassPool extends AbstractClassPool implements ToClassInvokerPoolReference
+{
+   ToClassInvoker toClassInvoker = null;
+   
+   protected JBossClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, File tmp, URL tmpURL)
+   {
+      super(cl, src, repository);
+      toClassInvoker = new ToClassInvoker(tmp);
+   }
+
+   protected JBossClassPool(ClassPool src, ScopedClassPoolRepository repository)
+   {
+      super(src, repository);
+   }
+
+   public boolean isUnloadedClassLoader()
+   {
+      if (getClassLoader() instanceof RepositoryClassLoader)
+      {
+         RepositoryClassLoader rcl = (RepositoryClassLoader) getClassLoader();
+         return rcl.getLoaderRepository() == null;
+      }
+      return false;
+   }
+
+   public Class<?> toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
+   {
+      return toClassInvoker.toClass(this, cc, getResourceName(cc.getName()), loader, domain);
+   }
+
+   public Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
+   {
+      return super.toClass(cc, loader, domain);
+   }
+
+   @Override
+   public void lockInCache(CtClass clazz)
+   {
+      super.lockInCache(clazz);
+      localResources.put(getResourceName(clazz.getName()), Boolean.TRUE);
+   }
+}
\ No newline at end of file

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/JBossClassPoolFactory.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPoolFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/JBossClassPoolFactory.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/JBossClassPoolFactory.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -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.ucl;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.plugins.AbstractJBossClassPoolFactory;
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.mx.loading.RepositoryClassLoader;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @author adrian at jboss.org
+ * @version $Revision$
+ **/
+public class JBossClassPoolFactory extends AbstractJBossClassPoolFactory
+{
+   protected File tmpClassesDir;
+
+   public JBossClassPoolFactory(File tmpClassesDir) throws IOException
+   {
+      this.tmpClassesDir = tmpClassesDir;
+
+   }
+   public AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+   {
+      ClassPool parent = getCreateParentClassPools(cl, src, repository);
+      if (cl instanceof RepositoryClassLoader)
+      {
+         File tempdir = getTempDirectory(cl);
+         URL tmpCP;
+         try
+         {
+            tmpCP = createURLAndAddToLoader(cl, tempdir);
+         }
+         catch (IOException e)
+         {
+            throw new RuntimeException(e);
+         }
+         if (ScopedRepositoryClassLoaderHelper.isScopedClassLoader(cl))
+         {
+            //It is scoped
+            return new ScopedJBossClassPool(cl, parent, repository, tempdir, tmpCP);
+         }
+         return new JBossClassPool(cl, parent, repository, tempdir, tmpCP);
+      }
+      return new AbstractClassPool(cl, parent, repository);
+   }
+
+   protected File getTempDirectory(ClassLoader cl)
+   {
+      File tempdir = null;
+      int attempts = 0;
+      IOException ex = null;
+      while (tempdir == null && attempts < 5)
+      {
+         //Workaround for JBAOP-254, retry a few times
+         try
+         {
+            tempdir = createTempDir(cl);
+         }
+         catch (IOException e)
+         {
+            ex = e;
+         }
+      }
+      
+      if (tempdir == null)
+      {
+         throw new RuntimeException("", ex);
+      }
+      
+      return tempdir;
+   }
+
+   public File createTempDir(ClassLoader cl) throws IOException
+   {
+      File tempdir = File.createTempFile("ucl", "", tmpClassesDir);
+      tempdir.delete();
+      tempdir.mkdir();
+      tempdir.deleteOnExit();
+
+      return tempdir;
+   }
+   
+   private URL createURLAndAddToLoader(ClassLoader cl, File tempdir) throws IOException
+   {
+      URL tmpURL = tempdir.toURL();
+      URL tmpCP = new URL(tmpURL, "?dynamic=true");
+
+      RepositoryClassLoader ucl = (RepositoryClassLoader) cl;
+
+      // We may be undeploying.
+      if (ucl.getLoaderRepository() != null)
+      {
+         ucl.addURL(tmpCP);
+      }
+      
+      return tmpCP;
+   }
+
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/LoaderRepositoryUrlUtil.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/LoaderRepositoryUrlUtil.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/LoaderRepositoryUrlUtil.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/LoaderRepositoryUrlUtil.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,173 @@
+/*
+* 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.ucl;
+
+import java.net.URL;
+
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanServer;
+import javax.management.Notification;
+import javax.management.NotificationListener;
+import javax.management.ObjectName;
+
+import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.mx.util.MBeanServerLocator;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class LoaderRepositoryUrlUtil implements NotificationListener
+{
+   final static MBeanServer SERVER;
+   final static ObjectName MAIN_LOADER_REPOSITORY_OBJECT_NAME;
+   final static LoaderRepository MAIN_LOADER_REPOSITORY;
+   static
+   {
+      SERVER = MBeanServerLocator.locateJBoss();
+      try
+      {
+         MAIN_LOADER_REPOSITORY_OBJECT_NAME = new ObjectName("JMImplementation:name=Default,service=LoaderRepository");
+         MAIN_LOADER_REPOSITORY = (LoaderRepository)SERVER.invoke(MAIN_LOADER_REPOSITORY_OBJECT_NAME, "getInstance", new Object[0], new String[0]);
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+   
+   long currentSequenceNumber;
+   long lastSequenceNumber = -1;
+   URL[] urls;
+   
+   public LoaderRepositoryUrlUtil()
+   {
+      try
+      {
+         SERVER.addNotificationListener(MAIN_LOADER_REPOSITORY_OBJECT_NAME, this, null, null);
+      }
+      catch (InstanceNotFoundException e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+
+   public synchronized void handleNotification(Notification notification, Object handback)
+   {
+      if (notification.getType().equals(LoaderRepository.CLASSLOADER_ADDED))
+      {
+         currentSequenceNumber = notification.getSequenceNumber();
+      }
+      else if (notification.getType().equals(LoaderRepository.CLASSLOADER_REMOVED))
+      {
+         currentSequenceNumber = notification.getSequenceNumber();
+      }
+   }
+   
+   public synchronized UrlInfo getURLInfo(HeirarchicalLoaderRepository3 scopedLoader, UrlInfo urlInfo)
+   {
+      boolean changed = false;
+      if (lastSequenceNumber != currentSequenceNumber)
+      {
+         urls = MAIN_LOADER_REPOSITORY.getURLs();
+         lastSequenceNumber = currentSequenceNumber;
+         changed = true;
+      }
+      if (!changed)
+      {
+         changed = urlInfo != null && (urlInfo.getSequenceNumber() != lastSequenceNumber);
+      }
+      if (urlInfo == null || changed)
+      {
+         URL[] localUrls = getLocalUrls(scopedLoader, urls);
+         urlInfo = new UrlInfo(urls, localUrls, lastSequenceNumber);
+      }
+      return urlInfo;
+   }
+   
+   public long getCurrentSequenceNumber()
+   {
+      return currentSequenceNumber;
+   }
+   
+   private URL[] getLocalUrls(HeirarchicalLoaderRepository3 scopedRepository, URL[] globalUrls)
+   {
+      URL[] scopedRepositoryUrls = scopedRepository.getURLs();
+
+      //This is a bit of a hack, since this relies on the order of the urls returned by HeirarchicalLoaderRepository3
+      //My urls, followed by parent urls.
+      int scopedLength = 0;
+      for (int i = 0 ; i < scopedRepositoryUrls.length ; i++)
+      {
+         for (int j = 0 ; j < globalUrls.length ; j ++)
+         {
+            if (scopedRepositoryUrls[i].equals(globalUrls[j]))
+            {
+               scopedLength = i;
+               break;
+            }
+         }
+         if (scopedLength > 0)
+         {
+            break;
+         }
+      }
+      
+      URL[] localUrls = new URL[scopedLength];
+      System.arraycopy(scopedRepositoryUrls, 0, localUrls, 0, scopedLength);
+      return localUrls;
+   }
+   
+   public class UrlInfo
+   {
+      
+      URL[] globalUrls;
+      URL[] localUrls;
+      long sequenceNumber;
+
+      public UrlInfo(URL[] globalUrls, URL[] localUrls, long sequenceNumber)
+      {
+         super();
+         this.globalUrls = globalUrls;
+         this.localUrls = localUrls;
+         this.sequenceNumber = sequenceNumber;
+      }
+      
+      public URL[] getGlobalUrls()
+      {
+         return globalUrls;
+      }
+      
+      public URL[] getLocalUrls()
+      {
+         return localUrls;
+      }
+
+      public long getSequenceNumber()
+      {
+         return sequenceNumber;
+      }
+   }
+   
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ScopedJBossClassPool.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedJBossClassPool.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ScopedJBossClassPool.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ScopedJBossClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,273 @@
+/*
+* 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.ucl;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.NotFoundException;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.plugins.ucl.LoaderRepositoryUrlUtil.UrlInfo;
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.classpool.spi.ClassPoolRepository;
+import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.mx.loading.RepositoryClassLoader;
+
+/**
+ * A classpool in JBoss backed by a scoped (HierarchicalLoaderRepository) loader repository
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class ScopedJBossClassPool extends JBossClassPool 
+{
+   final static LoaderRepositoryUrlUtil LOADER_REPOSITORY_UTIL = new LoaderRepositoryUrlUtil();
+   
+   private UrlInfo urlInfo;
+   private ThreadLocal<ClassPool> lastPool = new ThreadLocal<ClassPool>();
+
+   public ScopedJBossClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, File tmp, URL tmpURL)
+   {
+      super(cl, src, repository, tmp, tmpURL);
+      
+      boolean parentFirst = false;
+      LoaderRepository loaderRepository = null;
+      ClassLoader prnt = cl;
+      while (prnt != null)
+      {
+         if (prnt instanceof RepositoryClassLoader)
+         {
+            loaderRepository = ((RepositoryClassLoader)prnt).getLoaderRepository();
+            if (loaderRepository instanceof HeirarchicalLoaderRepository3)
+            {
+               parentFirst = ((HeirarchicalLoaderRepository3)loaderRepository).getUseParentFirst();
+            }
+            break;
+         }
+         prnt = SecurityActions.getParent(cl);
+      }
+      
+      super.childFirstLookup = !parentFirst;
+   }
+   
+
+   private HeirarchicalLoaderRepository3 getRepository()
+   {
+      ClassLoader cl = getClassLoader0();
+      if (cl != null)
+      {
+         return (HeirarchicalLoaderRepository3)((RepositoryClassLoader)cl).getLoaderRepository();
+      }
+      return null;
+   }
+
+   private URL getResourceUrlForClass(String resourcename)
+   {
+      HeirarchicalLoaderRepository3 repo = getRepository();
+      return repo.getResource(resourcename, super.getClassLoader());
+   }
+   
+   private boolean isMine(URL url)
+   {
+      HeirarchicalLoaderRepository3 repo = getRepository();
+      if (repo != null)
+      {
+         //The URL of the class loaded with my scoped classloader
+         if (url != null)
+         {
+            urlInfo = LOADER_REPOSITORY_UTIL.getURLInfo(getRepository(), urlInfo);
+            
+            URL[] myUrls = urlInfo.getLocalUrls();
+            String resource = url.toString();
+            for (int i = 0 ; i < myUrls.length ; i++)
+            {
+               if (resource.indexOf(myUrls[i].toString()) >= 0)
+               {
+                  return true;
+               }
+            }
+            return false;
+         }
+      }
+      return true;
+   }
+
+   public CtClass getCached(String classname)
+   {
+      if (classname == null)
+      {
+         return null;
+      }
+      if (isUnloadedClassLoader())
+      {
+         return null;
+      }
+
+      if (generatedClasses.get(classname) != null)
+      {
+         //It is a new class, and this callback is probably coming from the frozen check when creating a new nested class
+         return super.getCached(classname);
+      }
+      
+      //Is this from the scoped classloader itself of from the parent?
+      String resourcename = getResourceName(classname);
+      URL url = getResourceUrlForClass(resourcename);
+      boolean isMine = isMine(url);
+      
+      if (isMine)
+      {
+         if (super.childFirstLookup)
+         {
+            //Parent delegation is false, attempt to get this class out of ourselves
+            CtClass clazz = super.getCachedLocally(classname);
+            if (clazz == null)
+            {
+               clazz = createCtClass(classname, false);
+               if (clazz != null)
+               {
+                  lockInCache(clazz);
+               }
+            }
+            if (clazz != null)
+            {
+               return clazz;
+            }
+         }
+         return super.getCached(classname);
+      }
+      
+
+      try
+      {
+         ClassPool pool = getCorrectPoolForResource(classname, url);
+         if (pool != lastPool.get())
+         {
+            lastPool.set(pool);
+            return pool.get(classname);
+         }
+      }
+      catch (NotFoundException e)
+      {
+      }
+      catch(StackOverflowError e)
+      {
+         throw e;
+      }
+      finally
+      {
+         lastPool.set(null);
+      }
+
+      return null;
+   }
+
+   @Override
+   protected boolean includeInGlobalSearch()
+   {
+      return false;
+   }
+   
+   private ClassPool getCorrectPoolForResource(String classname, URL url)
+   {
+      ClassPoolRepository classPoolRepository = ClassPoolRepository.getInstance();
+      synchronized(classPoolRepository.getRegisteredCLs())
+      {
+         //JBoss 5 has an extra NoAnnotationURLCLassLoader that is not on the default path, make sure that that is checked at the end
+         //FIXME This needs revisiting/removing once the 
+         ArrayList<AbstractClassPool> noAnnotationURLClassLoaderPools = null;
+         String resource = url.toString();
+         for(ClassPool pool : classPoolRepository.getRegisteredCLs().values())
+         {
+            AbstractClassPool candidate = (AbstractClassPool)pool;
+            if (candidate.isUnloadedClassLoader())
+            {
+               classPoolRepository.unregisterClassLoader(candidate.getClassLoader());
+               continue;
+            }
+            
+            if (candidate.getClassLoader() instanceof RepositoryClassLoader)
+            {
+               //Sometimes the ClassLoader is a proxy for MBeanProxyExt?!
+               RepositoryClassLoader rcl = (RepositoryClassLoader)candidate.getClassLoader();
+               URL[] urls = rcl.getClasspath();
+               
+               for (int i = 0 ; i < urls.length ; i++)
+               {
+                  if (resource.indexOf(urls[i].getFile()) >= 0)
+                  {
+                     return candidate;
+                  }
+               }
+            }
+            //FIXME Remove once we have the JBoss 5 version of pool
+            else if (isInstanceOfNoAnnotationURLClassLoader(candidate.getClassLoader()))
+            {
+               if (noAnnotationURLClassLoaderPools == null)
+               {
+                  noAnnotationURLClassLoaderPools = new ArrayList<AbstractClassPool>(); 
+               }
+               noAnnotationURLClassLoaderPools.add(candidate);
+            }
+         }
+         
+         //FIXME Remove once we have the JBoss 5 version of pool
+         if (noAnnotationURLClassLoaderPools != null)
+         {
+            for (AbstractClassPool pool : noAnnotationURLClassLoaderPools)
+            {
+               try
+               {
+                  pool.get(classname);
+                  return pool;
+               }
+               catch(NotFoundException ignoreTryNext)
+               {
+               }
+            }
+         }
+      }
+      return ClassPoolRepository.getInstance().getClassPoolFactory().
+      create(ClassPool.getDefault(), ClassPoolRepository.getInstance());
+   }
+   
+   /**
+    * NoAnnotationURLCLassLoader lives in different packages in JBoss 4 and 5
+    */
+   private boolean isInstanceOfNoAnnotationURLClassLoader(ClassLoader loader)
+   {
+      Class<?> parent = loader.getClass();
+      while (parent != null)
+      {
+         if ("NoAnnotationURLClassLoader".equals(parent.getSimpleName()))
+         {
+            return true;
+         }
+         parent = parent.getSuperclass();
+      }
+      return false;
+   }
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ScopedRepositoryClassLoaderHelper.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedRepositoryClassLoaderHelper.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ScopedRepositoryClassLoaderHelper.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ScopedRepositoryClassLoaderHelper.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,51 @@
+/*
+* 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.ucl;
+
+import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.mx.loading.RepositoryClassLoader;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @autor adrian at jboss.org
+ * @version $Revision$
+ */
+public class ScopedRepositoryClassLoaderHelper
+{
+   public static boolean isScopedClassLoader(ClassLoader loader)
+   {
+      boolean scoped = false;
+      if (loader instanceof RepositoryClassLoader)
+      {
+         LoaderRepository repository = ((RepositoryClassLoader)loader).getLoaderRepository();
+         if (repository instanceof HeirarchicalLoaderRepository3)
+         {
+            scoped = true;
+            //HeirarchicalLoaderRepository3 hlr = (HeirarchicalLoaderRepository3)repository;
+            //boolean parentFirst = hlr.getUseParentFirst();
+         }
+      }
+      return scoped;
+   }
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/SecurityActions.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/SecurityActions.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/SecurityActions.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/SecurityActions.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,84 @@
+/*
+* 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.plugins.ucl;
+
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+class SecurityActions
+{
+   interface GetParentAction
+   {
+      ClassLoader getParent(ClassLoader loader);
+      
+      GetParentAction NON_PRIVILEGED = new GetParentAction()
+      {
+         public ClassLoader getParent(ClassLoader loader)
+         {
+            return loader.getParent();
+         }
+      };
+      
+      GetParentAction PRIVILEGED = new GetParentAction()
+      {
+         public ClassLoader getParent(final ClassLoader loader)
+         {
+            try
+            {
+               return AccessController.doPrivileged(new PrivilegedExceptionAction<ClassLoader>()
+               {
+                  public ClassLoader run() throws Exception
+                  {
+                     return loader.getParent();
+                  }
+               });
+            }
+            catch (PrivilegedActionException e)
+            {
+               throw new RuntimeException(e.getException());
+            }
+         }
+      };
+   }
+   
+   public static ClassLoader getParent(ClassLoader loader)
+   {
+      if (loader == null)
+      {
+         return null;
+      }
+      if (System.getSecurityManager() == null)
+      {
+         return GetParentAction.NON_PRIVILEGED.getParent(loader);
+      }
+      else
+      {
+         return GetParentAction.PRIVILEGED.getParent(loader);
+      }
+   }
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ToClassInvoker.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvoker.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ToClassInvoker.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ToClassInvoker.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,103 @@
+/*
+* 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.plugins.ucl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.security.ProtectionDomain;
+
+import javassist.CannotCompileException;
+import javassist.CtClass;
+
+import org.jboss.logging.Logger;
+import org.jboss.mx.loading.RepositoryClassLoader;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class ToClassInvoker
+{
+   Logger logger = Logger.getLogger(this.getClass());
+
+   public File tmpDir;
+
+   public Object tmplock = new Object();
+
+   public ToClassInvoker(File tmpDir)
+   {
+      this.tmpDir = tmpDir;
+   }
+
+   public Class<?> toClass(ToClassInvokerPoolReference pool, CtClass cc, String classFileName, ClassLoader loader, ProtectionDomain domain)
+   throws CannotCompileException
+   {
+      boolean trace = logger.isTraceEnabled();
+      pool.lockInCache(cc);
+      final ClassLoader myloader = pool.getClassLoader();
+      if (myloader == null || tmpDir == null)
+      {
+         if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " tmpDir:" + tmpDir + " default to superPool.toClass for " + cc.getName());
+         Class<?> clazz = pool.superPoolToClass(cc, loader, domain);
+         if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
+         return clazz;
+      }
+      Class<?> dynClass = null;
+      try
+      {
+         File classFile = null;
+         // Write the clas file to the tmpdir
+         synchronized (tmplock)
+         {
+            classFile = new File(tmpDir, classFileName);
+            if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " writing bytes to " + classFile);
+            File pkgDirs = classFile.getParentFile();
+            pkgDirs.mkdirs();
+            FileOutputStream stream = new FileOutputStream(classFile);
+            stream.write(cc.toBytecode());
+            stream.flush();
+            stream.close();
+            classFile.deleteOnExit();
+         }
+         // We have to clear Blacklist caches or the class will never
+         // be found
+         //((UnifiedClassLoader)dcl).clearBlacklists();
+         // To be backward compatible
+         RepositoryClassLoader rcl = (RepositoryClassLoader)myloader;
+         rcl.clearClassBlackList();
+         rcl.clearResourceBlackList();
+
+         // Now load the class through the cl
+         dynClass = myloader.loadClass(cc.getName());
+         if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + dynClass);
+         return dynClass;
+      }
+      catch (Exception ex)
+      {
+         ClassFormatError cfe = new ClassFormatError("Failed to load dyn class: " + cc.getName());
+         cfe.initCause(ex);
+         throw cfe;
+      }
+   }
+
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ToClassInvokerPoolReference.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvokerPoolReference.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ToClassInvokerPoolReference.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/ToClassInvokerPoolReference.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,39 @@
+/*
+* 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.plugins.ucl;
+
+import java.security.ProtectionDomain;
+
+import javassist.CannotCompileException;
+import javassist.CtClass;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public interface ToClassInvokerPoolReference
+{
+   Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException;
+   ClassLoader getClassLoader();
+   void lockInCache(CtClass clazz);
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/UclDelegatingClassPool.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/JBossUclDelegatingClassPool.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/UclDelegatingClassPool.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/UclDelegatingClassPool.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,68 @@
+/*
+* 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.plugins.ucl;
+
+import java.io.File;
+import java.net.URL;
+import java.security.ProtectionDomain;
+
+import javassist.CannotCompileException;
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.plugins.DelegatingClassPool;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class UclDelegatingClassPool extends DelegatingClassPool implements ToClassInvokerPoolReference
+{
+   ToClassInvoker toClassInvoker = null;
+
+   public UclDelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent, 
+         ScopedClassPoolRepository repository, File tmpDir, URL tmpURL)
+   {
+      super(domain, cl, parent, repository);
+      toClassInvoker = new ToClassInvoker(tmpDir);
+   }
+
+   public Class<?> toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
+   {
+      return toClassInvoker.toClass(this, cc, getResourceName(cc.getName()), loader, domain);
+   }
+
+   public Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
+   {
+      return super.toClass(cc, loader, domain);
+   }
+
+   @Override
+   public void lockInCache(CtClass clazz)
+   {
+      super.lockInCache(clazz);
+      localResources.put(getResourceName(clazz.getName()), Boolean.TRUE);
+   }
+}

Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/UclDelegatingClassPoolFactory.java (from rev 97574, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/JBossUclDelegatingClassPoolFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/UclDelegatingClassPoolFactory.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/ucl/UclDelegatingClassPoolFactory.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -0,0 +1,169 @@
+/*
+* 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.plugins.ucl;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.base.BaseClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomainRegistry;
+import org.jboss.classpool.plugins.NonDelegatingClassPool;
+import org.jboss.classpool.plugins.temp.TempClassPoolFactory;
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.mx.loading.RepositoryClassLoader;
+import org.jboss.mx.server.ServerConstants;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision$
+ */
+public class UclDelegatingClassPoolFactory extends TempClassPoolFactory
+{
+   private ClassPoolDomain mainDomain;
+   protected File tmpClassesDir;
+
+   public UclDelegatingClassPoolFactory(File tmpClassesDir) throws IOException
+   {
+      System.out.println("TMP CLASSES DIR: " + tmpClassesDir);
+      this.tmpClassesDir = tmpClassesDir;
+   }
+   
+   public synchronized AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+   {
+      ClassPool parent = getCreateParentClassPools(cl, src, repository);
+
+      if (cl instanceof RepositoryClassLoader)
+      {
+         ClassPoolDomain domain = getDomain((RepositoryClassLoader)cl);  
+         
+         File tempdir = getTempDirectory(cl);
+         URL tmpCP = createURLAndAddToLoader(cl, tempdir);
+         
+         return new UclDelegatingClassPool(domain, cl, parent, repository, tempdir, tmpCP);
+      }
+      
+      if (parent == null)
+      {
+         parent = ClassPool.getDefault();
+      }
+      return new NonDelegatingClassPool(cl, parent, repository, true);
+   }
+
+   private ClassPoolDomain getDomain(RepositoryClassLoader cl)
+   {
+      LoaderRepository loaderRepository = cl.getLoaderRepository();
+      ClassPoolDomainRegistry registry = ClassPoolDomainRegistry.getInstance();
+      ClassPoolDomain domain = registry.getDomain(loaderRepository);
+      if (domain == null)
+      {
+         if (loaderRepository instanceof HeirarchicalLoaderRepository3)
+         {
+            
+            boolean parentFirst = ((HeirarchicalLoaderRepository3)loaderRepository).getUseParentFirst();
+            domain = new BaseClassPoolDomain("Scoped" + System.identityHashCode(loaderRepository), mainDomain, parentFirst);
+         }
+         else
+         {
+            if (mainDomain == null)
+            {
+               domain = new BaseClassPoolDomain(ServerConstants.DEFAULT_LOADER_NAME, null, false);
+               mainDomain = domain;
+            }
+            else
+            {
+               domain = mainDomain;
+            }
+            registry.addClassPoolDomain(loaderRepository, domain);
+         }
+      }
+      return domain;
+   }
+   
+   protected File getTempDirectory(ClassLoader cl)
+   {
+      File tempdir = null;
+      int attempts = 0;
+      IOException ex = null;
+      while (tempdir == null && attempts < 5)
+      {
+         //Workaround for JBAOP-254, retry a few times
+         try
+         {
+            tempdir = createTempDir(cl);
+         }
+         catch (IOException e)
+         {
+            ex = e;
+         }
+      }
+      
+      if (tempdir == null)
+      {
+         throw new RuntimeException("", ex);
+      }
+      
+      return tempdir;
+   }
+
+   public File createTempDir(ClassLoader cl) throws IOException
+   {
+      File tempdir = File.createTempFile("ucl", "", tmpClassesDir);
+      tempdir.delete();
+      tempdir.mkdir();
+      tempdir.deleteOnExit();
+
+      return tempdir;
+   }
+   
+   private URL createURLAndAddToLoader(ClassLoader cl, File tempdir)
+   {
+      try
+      {
+         URL tmpURL = tempdir.toURL();
+         URL tmpCP = new URL(tmpURL, "?dynamic=true");
+
+         RepositoryClassLoader ucl = (RepositoryClassLoader) cl;
+
+         // We may be undeploying.
+         if (ucl.getLoaderRepository() != null)
+         {
+            ucl.addURL(tmpCP);
+         }
+         
+         return tmpCP;
+      }
+      catch(Exception e)
+      {
+         // AutoGenerated
+         throw new RuntimeException(e);
+      }
+   }
+
+}

Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/support/JBossCLFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/support/JBossCLFactory.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/support/JBossCLFactory.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -30,7 +30,7 @@
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloader.spi.base.BaseClassLoader;
 import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
-import org.jboss.classpool.plugins.as5.VFSClassLoaderDomainRegistry;
+import org.jboss.classpool.plugins.jbosscl.VFSClassLoaderDomainRegistry;
 import org.jboss.kernel.spi.deployment.KernelDeployment;
 import org.jboss.logging.Logger;
 import org.jboss.test.AbstractTestCase;

Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/support/LoaderRegistry.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/support/LoaderRegistry.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/support/LoaderRegistry.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -34,7 +34,7 @@
 import org.jboss.classloader.spi.base.BaseClassLoader;
 import org.jboss.classloading.spi.dependency.Module;
 import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
-import org.jboss.classpool.plugins.as5.VFSClassLoaderDomainRegistry;
+import org.jboss.classpool.plugins.jbosscl.VFSClassLoaderDomainRegistry;
 import org.jboss.kernel.spi.deployment.KernelDeployment;
 import org.jboss.logging.Logger;
 import org.jboss.test.AbstractTestCase;

Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ClassPoolTest.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ClassPoolTest.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ClassPoolTest.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -34,7 +34,7 @@
 import org.jboss.classpool.base.BaseClassPoolDomain;
 import org.jboss.classpool.domain.AbstractClassPoolDomain;
 import org.jboss.classpool.domain.ClassPoolDomain;
-import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.classpool.plugins.DelegatingClassPool;
 import org.jboss.classpool.spi.ClassPoolRepository;
 import org.jboss.test.AbstractTestCaseWithSetup;
 import org.jboss.test.AbstractTestDelegate;

Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/IsLocalResourcePluginFactoryTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/IsLocalResourcePluginFactoryTestCase.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/IsLocalResourcePluginFactoryTestCase.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -41,7 +41,7 @@
 import org.jboss.classpool.base.URLClassLoaderIsLocalResourcePlugin;
 import org.jboss.classpool.base.URLClassLoaderIsLocalResourcePluginFactory;
 import org.jboss.classpool.domain.ClassPoolDomain;
-import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.classpool.plugins.DelegatingClassPool;
 import org.jboss.classpool.spi.ClassPoolRepository;
 import org.jboss.util.loading.Translatable;
 

Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTest.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTest.java	2009-12-11 01:17:05 UTC (rev 97709)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTest.java	2009-12-11 01:48:42 UTC (rev 97710)
@@ -26,7 +26,7 @@
 import javax.management.MBeanServer;
 import javax.management.MBeanServerFactory;
 
-import org.jboss.classpool.plugins.as4.ucl.JBossUclDelegatingClassPoolFactory;
+import org.jboss.classpool.plugins.ucl.UclDelegatingClassPoolFactory;
 import org.jboss.classpool.spi.ClassPoolRepository;
 import org.jboss.mx.util.MBeanServerLocator;
 import org.jboss.test.AbstractTestCaseWithSetup;
@@ -49,7 +49,7 @@
       try
       {
          ClassPoolRepository.getInstance().setClassPoolFactory(
-               new JBossUclDelegatingClassPoolFactory(new File(".")));
+               new UclDelegatingClassPoolFactory(new File(".")));
       }
       catch (Exception e)
       {




More information about the jboss-cvs-commits mailing list