[jboss-cvs] JBossAS SVN: r82157 - in projects/aop/trunk: aop/src/main/org/jboss/aop/instrument and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Dec 9 15:32:32 EST 2008


Author: kabir.khan at jboss.com
Date: 2008-12-09 15:32:31 -0500 (Tue, 09 Dec 2008)
New Revision: 82157

Added:
   projects/aop/trunk/aop/src/main/org/jboss/aop/util/ClassLoaderUtils.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolToClassPoolDomainAdapter.java
   projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java
Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/TransformerCommon.java
   projects/aop/trunk/asintegration-core/.classpath
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/BaseClassPool.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolDomain.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DelegatingClassPool.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/NonDelegatingClassPool.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePlugin.java
   projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java
   projects/aop/trunk/asintegration-mc/src/tests/org/jboss/test/aop/classpool/jbosscl/test/ClassPoolWithRepositoryTestCase.java
   projects/aop/trunk/asintegration-mc/src/tests/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java
   projects/aop/trunk/asintegration-mc/src/tests/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTestDelegate.java
Log:
[JBAOP-666]
Rework classpools to always delegate to the domain and to use the class resource name to determine if the class can be loaded.

Better handling of parentLast domains.

Remove AOPClassPool.registerGeneratedClass() and the calls to that from TransformerCommon.toClass(). Register these when caching the class from ClassPool.make() if dynamic, and also put them into the pools local resources so the domains can find them.

Exclude the test classes from the -core .classpath

Modify AOPClasPool.isLocalResource() to take a resource path instead of the raw classname and modify the callers.

Modify ClassPoolDomain to use a ClassPoolToClassPoolDomainAdaptor as its parent if the domain's parent is null.



Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java	2008-12-09 20:29:02 UTC (rev 82156)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -26,6 +26,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.jboss.aop.AspectManager;
+import org.jboss.aop.util.ClassLoaderUtils;
 
 import javassist.ClassPool;
 import javassist.CtClass;
@@ -115,10 +116,12 @@
       classLoader = new WeakReference<ClassLoader>(cl);
    }
 
-   public void registerGeneratedClass(String className)
-   {
-      generatedClasses.put(className, className);
-   }
+//   public void registerGeneratedClass(String classname)
+//   {
+//      generatedClasses.put(classname, classname);
+//      String resourcename = getResourceName(classname);
+//      localResources.put(resourcename, Boolean.TRUE);
+//   }
 
    public void close()
    {
@@ -140,6 +143,19 @@
       return super.createCtClass(classname, useCache);
    }
 
+   @Override
+   public void cacheCtClass(String classname, CtClass c, boolean dynamic)
+   {
+      super.cacheCtClass(classname, c, dynamic);
+      if (dynamic)
+      {
+//         registerGeneratedClass(classname);
+         generatedClasses.put(classname, classname);
+         String resourcename = getResourceName(classname);
+         localResources.put(resourcename, Boolean.TRUE);
+      }
+   }
+
    protected boolean includeInGlobalSearch()
    {
       return true;
@@ -147,20 +163,12 @@
 
    protected String getResourceName(String classname)
    {
-      final int lastIndex = classname.lastIndexOf('$');
-      if (lastIndex < 0)
-      {
-         return classname.replaceAll("[\\.]", "/") + ".class";
-      }
-      else
-      {
-         return classname.substring(0, lastIndex).replaceAll("[\\.]", "/") + classname.substring(lastIndex) + ".class";
-      }
+      return ClassLoaderUtils.getResourceName(classname);
    }
 
    protected boolean isLocalResource(String resourceName)
    {
-      String classResourceName = getResourceName(resourceName);
+      String classResourceName = resourceName;
       Boolean isLocal = localResources.get(classResourceName);
       if (isLocal != null)
       {
@@ -171,7 +179,7 @@
       return localResource;
    }
 
-   public boolean isLocalClassLoaderResource(String classResourceName)
+   protected boolean isLocalClassLoaderResource(String classResourceName)
    {
       return getClassLoader().getResource(classResourceName) != null;
    }
@@ -246,7 +254,7 @@
 
             if (cl != null)
             {
-               isLocal = isLocalResource(classname);
+               isLocal = isLocalResource(getResourceName(classname));
             }
 
             if (!isLocal)

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/TransformerCommon.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/TransformerCommon.java	2008-12-09 20:29:02 UTC (rev 82156)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/TransformerCommon.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -33,16 +33,15 @@
 import java.security.PrivilegedExceptionAction;
 import java.security.ProtectionDomain;
 
-import org.jboss.aop.AspectManager;
-import org.jboss.aop.classpool.AOPClassPool;
-import org.jboss.aop.standalone.Compiler;
-
 import javassist.CannotCompileException;
 import javassist.ClassPool;
 import javassist.CtClass;
 import javassist.CtField;
 import javassist.NotFoundException;
 
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.standalone.Compiler;
+
 /**
  *  A few handy methods and common things used by the other Transformers
  * @author <a href="mailto:kabirkhan at bigfoot.com">Kabir Khan</a>
@@ -75,7 +74,6 @@
    {
       try
       {
-         registerGeneratedClass(newClass);
          // If compile time
          if (compile)
          {
@@ -122,8 +120,6 @@
 
    public static Class<?> toClass(CtClass newClass, ProtectionDomain pd) throws CannotCompileException
    {
-      registerGeneratedClass(newClass);
-
       if (System.getSecurityManager() == null)
       {
          return ToClassAction.NON_PRIVILEGED.toClass(newClass, null, pd);
@@ -137,8 +133,6 @@
    public static Class<?> toClass(CtClass newClass, ClassLoader loader, ProtectionDomain pd)
       throws CannotCompileException
    {
-      registerGeneratedClass(newClass);
-
       if (System.getSecurityManager() == null)
       {
          return ToClassAction.NON_PRIVILEGED.toClass(newClass, loader, pd);
@@ -174,16 +168,6 @@
       }
    }
 
-   private static void registerGeneratedClass(CtClass newClass)
-   {
-      //TODO Maybe we should force a ScopedClassPool created by JBoss Retro to be an AOP classpool once AOP kicks in?
-      ClassPool pool = newClass.getClassPool();
-      if (pool instanceof AOPClassPool)
-      {
-         ((AOPClassPool)pool).registerGeneratedClass(newClass.getName());
-      }
-   }
-
    private static void addWeakReferenceInfoField(Instrumentor instrumentor, String infoClassName, String infoName,
          int modifiers, CtClass addTo, CtField.Initializer init, boolean synthetic) throws NotFoundException, CannotCompileException
    {
@@ -231,7 +215,6 @@
     */
    public static CtClass makeNestedClass(CtClass outer, String name, boolean isStatic) throws CannotCompileException
    {
-      registerGeneratedClass(outer.getClassPool(), outer.getName() + "$" + name);
       CtClass inner = outer.makeNestedClass(name, true);
       return inner;
    }
@@ -241,7 +224,6 @@
     */
    public static CtClass makeClass(ClassPool pool, String name)
    {
-      registerGeneratedClass(pool, name);
       return pool.makeClass(name);
    }
 
@@ -250,22 +232,9 @@
     */
    public static CtClass makeClass(ClassPool pool, String name, CtClass superClass)
    {
-      registerGeneratedClass(pool, name);
       return pool.makeClass(name, superClass);
    }
 
-   private static void registerGeneratedClass(ClassPool pool, String name)
-   {
-      try
-      {
-         ((AOPClassPool)pool).registerGeneratedClass(name);
-      }
-      catch(ClassCastException e)
-      {
-
-      }
-   }
-
    private interface ToClassAction
    {
       Class<?> toClass(CtClass clazz, ClassLoader loader, ProtectionDomain pd)

Added: projects/aop/trunk/aop/src/main/org/jboss/aop/util/ClassLoaderUtils.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/util/ClassLoaderUtils.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/util/ClassLoaderUtils.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -0,0 +1,44 @@
+/*
+* 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.aop.util;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassLoaderUtils
+{
+   public static String getResourceName(String classname)
+   {
+      final int lastIndex = classname.lastIndexOf('$');
+      if (lastIndex < 0)
+      {
+         return classname.replaceAll("[\\.]", "/") + ".class";
+      }
+      else
+      {
+         return classname.substring(0, lastIndex).replaceAll("[\\.]", "/") + classname.substring(lastIndex) + ".class";
+      }
+   }
+
+}

Modified: projects/aop/trunk/asintegration-core/.classpath
===================================================================
--- projects/aop/trunk/asintegration-core/.classpath	2008-12-09 20:29:02 UTC (rev 82156)
+++ projects/aop/trunk/asintegration-core/.classpath	2008-12-09 20:32:31 UTC (rev 82157)
@@ -1,66 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-  <classpathentry kind="src" path="src/etc" including="jbossorg-eula.txt" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/main"/>
-  <classpathentry kind="src" path="src/tests" output="target/test-classes"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.0.2/activation-1.0.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant/1.7.0/ant-1.7.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-junit/1.7.0/ant-junit-1.7.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-launcher/1.7.0/ant-launcher-1.7.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/bcel/bcel/5.1/bcel-5.1.jar" sourcepath="M2_REPO/bcel/bcel/5.1/bcel-5.1-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/apache-httpclient/commons-httpclient/2.0.2/commons-httpclient-2.0.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/oswego-concurrent/concurrent/1.3.4-jboss-update1/concurrent-1.3.4-jboss-update1.jar" sourcepath="M2_REPO/oswego-concurrent/concurrent/1.3.4-jboss-update1/concurrent-1.3.4-jboss-update1-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar" sourcepath="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/wutka-dtdparser/dtdparser121/1.2.1/dtdparser121-1.2.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/urbanophile/java-getopt/1.0.9/java-getopt-1.0.9.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA.jar" sourcepath="M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/sun-jaxb/jaxb-api/2.1.4/jaxb-api-2.1.4.jar" sourcepath="M2_REPO/sun-jaxb/jaxb-api/2.1.4/jaxb-api-2.1.4-sources.jar"/>
-  <classpathentry kind="src" path="/jboss-aop"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-aop-mc-int/2.0.0.CR1/jboss-aop-mc-int-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-aop-mc-int/2.0.0.CR1/jboss-aop-mc-int-2.0.0.CR1-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-bootstrap/5.0.0.CR2/jboss-as-bootstrap-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-bootstrap/5.0.0.CR2/jboss-as-bootstrap-5.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2-tests.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-jmx/5.0.0.CR2/jboss-as-jmx-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-jmx/5.0.0.CR2/jboss-as-jmx-5.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-main/5.0.0.CR2/jboss-as-main-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-main/5.0.0.CR2/jboss-as-main-5.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloader/2.0.1.GA/jboss-classloader-2.0.1.GA.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloader/2.0.1.GA/jboss-classloader-2.0.1.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading/2.0.1.GA/jboss-classloading-2.0.1.GA.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading/2.0.1.GA/jboss-classloading-2.0.1.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.3.GA/jboss-classloading-spi-5.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.3.GA/jboss-classloading-spi-5.0.3.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.1.GA/jboss-classloading-vfs-2.0.1.GA.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.1.GA/jboss-classloading-vfs-2.0.1.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.10.GA/jboss-common-core-2.2.10.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.10.GA/jboss-common-core-2.2.10.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.3.GA/jboss-deployers-client-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.3.GA/jboss-deployers-client-2.0.3.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.3.GA/jboss-deployers-client-spi-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.3.GA/jboss-deployers-client-spi-2.0.3.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.3.GA/jboss-deployers-core-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.3.GA/jboss-deployers-core-2.0.3.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.3.GA/jboss-deployers-core-spi-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.3.GA/jboss-deployers-core-spi-2.0.3.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.3.GA/jboss-deployers-impl-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.3.GA/jboss-deployers-impl-2.0.3.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.3.GA/jboss-deployers-spi-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.3.GA/jboss-deployers-spi-2.0.3.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.3.GA/jboss-deployers-structure-spi-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.3.GA/jboss-deployers-structure-spi-2.0.3.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.3.GA/jboss-deployers-vfs-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.3.GA/jboss-deployers-vfs-2.0.3.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.3.GA/jboss-deployers-vfs-spi-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.3.GA/jboss-deployers-vfs-spi-2.0.3.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-kernel/2.0.0.CR1/jboss-kernel-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-kernel/2.0.0.CR1/jboss-kernel-2.0.0.CR1-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-managed/2.0.0.GA/jboss-managed-2.0.0.GA.jar" sourcepath="M2_REPO/org/jboss/man/jboss-managed/2.0.0.GA/jboss-managed-2.0.0.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-mdr/2.0.1.GA/jboss-mdr-2.0.1.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-mdr/2.0.1.GA/jboss-mdr-2.0.1.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.GA/jboss-metatype-2.0.0.GA.jar" sourcepath="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.GA/jboss-metatype-2.0.0.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jboss/profiler/jvmti/jboss-profiler-jvmti/1.0.0.CR5/jboss-profiler-jvmti-1.0.0.CR5.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-reflect/2.0.2.GA/jboss-reflect-2.0.2.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-reflect/2.0.2.GA/jboss-reflect-2.0.2.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-server-manager/0.1.1.GA/jboss-server-manager-0.1.1.GA.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-server-manager/0.1.1.GA/jboss-server-manager-0.1.1.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jboss/jboss-test/1.0.3.GA/jboss-test-1.0.3.GA.jar" sourcepath="M2_REPO/jboss/jboss-test/1.0.3.GA/jboss-test-1.0.3.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/test/jboss-test/1.1.1.GA/jboss-test-1.1.1.GA.jar" sourcepath="M2_REPO/org/jboss/test/jboss-test/1.1.1.GA/jboss-test-1.1.1.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-vfs/2.0.0.GA/jboss-vfs-2.0.0.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-vfs/2.0.0.GA/jboss-vfs-2.0.0.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jbossxb/2.0.0.CR15/jbossxb-2.0.0.CR15.jar" sourcepath="M2_REPO/org/jboss/jbossxb/2.0.0.CR15/jbossxb-2.0.0.CR15-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
-  <classpathentry kind="src" path="/pluggable-instrumentor"/>
-  <classpathentry kind="var" path="M2_REPO/qdox/qdox/1.6.1/qdox-1.6.1.jar" sourcepath="M2_REPO/qdox/qdox/1.6.1/qdox-1.6.1-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/stax/stax-api/1.0/stax-api-1.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/trove/trove/2.1.1/trove-2.1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/apache-xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.9.1/xml-apis-2.9.1.jar"/>
-</classpath>
\ No newline at end of file
+	<classpathentry excluding="**/*.java" including="jbossorg-eula.txt" kind="src" path="src/etc"/>
+	<classpathentry kind="src" path="src/main"/>
+	<classpathentry excluding="org/jboss/test/aop/classpool/support/a/|org/jboss/test/aop/classpool/support/b/" kind="src" output="target/test-classes" path="src/tests"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.0.2/activation-1.0.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/ant/ant/1.7.0/ant-1.7.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-junit/1.7.0/ant-junit-1.7.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-launcher/1.7.0/ant-launcher-1.7.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/bcel/bcel/5.1/bcel-5.1.jar" sourcepath="M2_REPO/bcel/bcel/5.1/bcel-5.1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/apache-httpclient/commons-httpclient/2.0.2/commons-httpclient-2.0.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/oswego-concurrent/concurrent/1.3.4-jboss-update1/concurrent-1.3.4-jboss-update1.jar" sourcepath="M2_REPO/oswego-concurrent/concurrent/1.3.4-jboss-update1/concurrent-1.3.4-jboss-update1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar" sourcepath="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/wutka-dtdparser/dtdparser121/1.2.1/dtdparser121-1.2.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/urbanophile/java-getopt/1.0.9/java-getopt-1.0.9.jar"/>
+	<classpathentry kind="var" path="M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA.jar" sourcepath="M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/sun-jaxb/jaxb-api/2.1.4/jaxb-api-2.1.4.jar" sourcepath="M2_REPO/sun-jaxb/jaxb-api/2.1.4/jaxb-api-2.1.4-sources.jar"/>
+	<classpathentry kind="src" path="/jboss-aop"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-aop-mc-int/2.0.0.CR1/jboss-aop-mc-int-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-aop-mc-int/2.0.0.CR1/jboss-aop-mc-int-2.0.0.CR1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-bootstrap/5.0.0.CR2/jboss-as-bootstrap-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-bootstrap/5.0.0.CR2/jboss-as-bootstrap-5.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2-tests.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-jmx/5.0.0.CR2/jboss-as-jmx-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-jmx/5.0.0.CR2/jboss-as-jmx-5.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-main/5.0.0.CR2/jboss-as-main-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-main/5.0.0.CR2/jboss-as-main-5.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloader/2.0.1.GA/jboss-classloader-2.0.1.GA.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloader/2.0.1.GA/jboss-classloader-2.0.1.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading/2.0.1.GA/jboss-classloading-2.0.1.GA.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading/2.0.1.GA/jboss-classloading-2.0.1.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.3.GA/jboss-classloading-spi-5.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.3.GA/jboss-classloading-spi-5.0.3.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.1.GA/jboss-classloading-vfs-2.0.1.GA.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.1.GA/jboss-classloading-vfs-2.0.1.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.10.GA/jboss-common-core-2.2.10.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.10.GA/jboss-common-core-2.2.10.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.3.GA/jboss-deployers-client-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.3.GA/jboss-deployers-client-2.0.3.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.3.GA/jboss-deployers-client-spi-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.3.GA/jboss-deployers-client-spi-2.0.3.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.3.GA/jboss-deployers-core-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.3.GA/jboss-deployers-core-2.0.3.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.3.GA/jboss-deployers-core-spi-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.3.GA/jboss-deployers-core-spi-2.0.3.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.3.GA/jboss-deployers-impl-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.3.GA/jboss-deployers-impl-2.0.3.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.3.GA/jboss-deployers-spi-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.3.GA/jboss-deployers-spi-2.0.3.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.3.GA/jboss-deployers-structure-spi-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.3.GA/jboss-deployers-structure-spi-2.0.3.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.3.GA/jboss-deployers-vfs-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.3.GA/jboss-deployers-vfs-2.0.3.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.3.GA/jboss-deployers-vfs-spi-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.3.GA/jboss-deployers-vfs-spi-2.0.3.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-kernel/2.0.0.CR1/jboss-kernel-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-kernel/2.0.0.CR1/jboss-kernel-2.0.0.CR1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-managed/2.0.0.GA/jboss-managed-2.0.0.GA.jar" sourcepath="M2_REPO/org/jboss/man/jboss-managed/2.0.0.GA/jboss-managed-2.0.0.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-mdr/2.0.1.GA/jboss-mdr-2.0.1.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-mdr/2.0.1.GA/jboss-mdr-2.0.1.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.GA/jboss-metatype-2.0.0.GA.jar" sourcepath="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.GA/jboss-metatype-2.0.0.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/jboss/profiler/jvmti/jboss-profiler-jvmti/1.0.0.CR5/jboss-profiler-jvmti-1.0.0.CR5.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-reflect/2.0.2.GA/jboss-reflect-2.0.2.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-reflect/2.0.2.GA/jboss-reflect-2.0.2.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-server-manager/0.1.1.GA/jboss-server-manager-0.1.1.GA.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-server-manager/0.1.1.GA/jboss-server-manager-0.1.1.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/jboss/jboss-test/1.0.3.GA/jboss-test-1.0.3.GA.jar" sourcepath="M2_REPO/jboss/jboss-test/1.0.3.GA/jboss-test-1.0.3.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/test/jboss-test/1.1.1.GA/jboss-test-1.1.1.GA.jar" sourcepath="M2_REPO/org/jboss/test/jboss-test/1.1.1.GA/jboss-test-1.1.1.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-vfs/2.0.0.GA/jboss-vfs-2.0.0.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-vfs/2.0.0.GA/jboss-vfs-2.0.0.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jbossxb/2.0.0.CR15/jbossxb-2.0.0.CR15.jar" sourcepath="M2_REPO/org/jboss/jbossxb/2.0.0.CR15/jbossxb-2.0.0.CR15-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
+	<classpathentry kind="src" path="/pluggable-instrumentor"/>
+	<classpathentry kind="var" path="M2_REPO/qdox/qdox/1.6.1/qdox-1.6.1.jar" sourcepath="M2_REPO/qdox/qdox/1.6.1/qdox-1.6.1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/stax/stax-api/1.0/stax-api-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/trove/trove/2.1.1/trove-2.1.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/apache-xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.9.1/xml-apis-2.9.1.jar"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/BaseClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/BaseClassPool.java	2008-12-09 20:29:02 UTC (rev 82156)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/BaseClassPool.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -56,15 +56,14 @@
    @Override
    public CtClass createCtClass(String classname, boolean useCache)
    {
-      return super.createCtClass(classname, useCache);
+      CtClass clazz = super.createCtClass(classname, useCache);
+      if (clazz != null)
+      {
+         cacheCtClass(classname, clazz, false);
+      }
+      return clazz;
    }
 
-   @Override
-   public void cacheCtClass(String classname, CtClass c, boolean dynamic)
-   {
-      super.cacheCtClass(classname, c, dynamic);
-   }
-
    protected CtClass createParentCtClass(String classname, boolean useCache)
    {
       
@@ -105,15 +104,8 @@
    }
    
    @Override
-   public boolean isLocalClassLoaderResource(String classResourceName)
+   protected boolean isLocalClassLoaderResource(String classResourceName)
    {
       return isLocalResourcePlugin.isMyResource(classResourceName);
    }
-
-   public boolean isLocalClassLoaderClass(String classname)
-   {
-      return isLocalResourcePlugin.isMyResource(getResourceName(classname));
-   }
-
-
 }

Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolDomain.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolDomain.java	2008-12-09 20:29:02 UTC (rev 82156)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolDomain.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -21,7 +21,6 @@
 */ 
 package org.jboss.aop.classpool;
 
-import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -29,7 +28,7 @@
 import javassist.CtClass;
 import javassist.NotFoundException;
 
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.util.ClassLoaderUtils;
 
 
 /**
@@ -45,8 +44,6 @@
    
    private List<DelegatingClassPool> delegatingPools = new ArrayList<DelegatingClassPool>();
    
-   private ClassPoolDomainStrategy classPoolDomainStrategy;
-   
    private boolean parentFirst;
 
    public ClassPoolDomain(String domainName, ClassPoolDomain parent)
@@ -56,14 +53,23 @@
 
       if (parent == null)
       {
-         classPoolDomainStrategy = new RootClassPoolDomainImpl();
+         this.parent = createParentClassPoolToClassPoolDomainAdaptor();
+         if (this.parent == null)
+         {
+            throw new IllegalStateException("No ClassPoolToClassPool");
+         }
       }
-      else 
-      {
-         classPoolDomainStrategy = new ChildClassPoolDomainImpl();
-      }
    }
    
+   protected ClassPoolDomain()
+   {
+   }
+   
+   protected ClassPoolToClassPoolDomainAdapter createParentClassPoolToClassPoolDomainAdaptor()
+   {
+      return new ClassPoolToClassPoolDomainAdapter();
+   }
+   
    public String getDomainName()
    {
       return domainName;
@@ -92,194 +98,112 @@
       delegatingPools.remove(pool);
    }
    
-   synchronized CtClass getCached(DelegatingClassPool initiating, String classname)
+   synchronized CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, boolean create)
    {
-      if (parentFirst)
+      CtClass clazz = getCachedOrCreateInternal(classname, create);
+      
+      if (clazz == null)
       {
-         CtClass clazz = classPoolDomainStrategy.getParentCached(classname);
-         if (clazz != null)
-         {
-            return clazz;
-         }
+         clazz = getCachedOrCreateFromPoolParent(initiatingPool, classname, create);
       }
-      for(DelegatingClassPool pool : delegatingPools)
-      {
-         if (pool == initiating)
-         {
-            continue;
-         }
-         if (pool.isUnloadedClassLoader())
-         {
-            AspectManager.instance().unregisterClassLoader(pool.getClassLoader());
-            continue;
-         }
-         CtClass clazz = pool.getCached(false, classname);
-         if (clazz != null)
-         {
-            return clazz;
-         }
-      }
-
-      if (!parentFirst)
-      {
-         return classPoolDomainStrategy.getParentCached(classname); 
-      }
-
-      return null;
+      return clazz;
    }
    
-   synchronized CtClass createCtClass(DelegatingClassPool initiating, String classname, boolean useCache)
+   
+   private CtClass getCachedOrCreateFromPoolParent(BaseClassPool initiatingPool, String classname, boolean create)
    {
-      if (parentFirst)
+      if (initiatingPool == null)
       {
-         CtClass clazz = createParentCtClass(classname, useCache);
-         if (clazz != null)
-         {
-            return clazz;
-         }
+         return null;
       }
-      for(DelegatingClassPool pool : delegatingPools)
+      ClassPool parentPool = initiatingPool.getParent();
+      if (parentPool == null)
       {
-         if (pool == initiating)
-         {
-            continue;
-         }
-         if (pool.isUnloadedClassLoader())
-         {
-            AspectManager.instance().unregisterClassLoader(pool.getClassLoader());
-            continue;
-         }
-         CtClass clazz = pool.createCtClass(false, classname, useCache);
-         if (clazz != null)
-         {
-            return clazz;
-         }
+         return null;
       }
-
-      if (!parentFirst)
+       
+      if (parentPool instanceof BaseClassPool)
       {
-         return createParentCtClass(classname, useCache); 
+         return getCachedOrCreate((BaseClassPool)parentPool, classname, create);
       }
-      return null;
+      else
+      {
+         return getCachedOrCreate(parentPool, classname, create);
+      }
    }
    
-   synchronized CtClass createParentCtClass(String classname, boolean useCache)
-   {
-      return classPoolDomainStrategy.createParentCtClass(classname, useCache);
-   }
    
-   synchronized URL findParentResource(String classname)
+   protected CtClass getCachedOrCreateInternal(String classname, boolean create)
    {
-      return classPoolDomainStrategy.findParentResource(classname);
-   }
-   
-   synchronized URL findResource(String classname)
-   {
-      if (parentFirst)
+      CtClass clazz = null;
+      if (parentFirst && parent!= null)
       {
-         URL url = classPoolDomainStrategy.findParentResource(classname);
-         if (url != null)
-         {
-            return url;
-         }
+         clazz = parent.getCachedOrCreateInternal(classname, create);
       }
-      for (DelegatingClassPool pool : delegatingPools)
+      if (clazz == null)
       {
-         if (pool.isUnloadedClassLoader())
+         String resourceName = delegatingPools.size() > 0 ? ClassLoaderUtils.getResourceName(classname) : null;
+         for (DelegatingClassPool pool : delegatingPools)
          {
-            AspectManager.instance().unregisterClassLoader(pool.getClassLoader());
-            continue;
-         }
-         if (pool.isLocalClassLoaderClass(classname))
-         {
-            URL url = pool.find(classname);
-            if (url != null)
+            if (pool.isLocalResource(resourceName))
             {
-               return url;
+               clazz = pool.getCachedLocally(classname);
+               if (clazz == null && create)
+               {
+                  clazz = pool.createCtClass(classname, true);
+               }
             }
          }
       }
-      if (!parentFirst)
+      if (clazz == null && parent != null && !parentFirst)
       {
-         return classPoolDomainStrategy.findParentResource(classname);
+         clazz = parent.getCachedOrCreateInternal(classname, create);
       }
-      return null;
+      return clazz;
    }
-   
-   public String toString()
+
+   protected CtClass getCachedOrCreate(BaseClassPool parentPool, String classname, boolean create)
    {
-      return super.toString() + "[" + domainName + "]";
-   }
-   
-   private interface ClassPoolDomainStrategy
-   {
-      URL findParentResource(String classname);
-      CtClass createParentCtClass(String classname, boolean useCache);
-      CtClass getParentCached(String classname);
-   }
-   
-   protected class RootClassPoolDomainImpl implements ClassPoolDomainStrategy
-   {
-      ClassPool parentPool = null;
-      
-      public RootClassPoolDomainImpl()
+      if (parentPool == null)
       {
-         initialiseParentClassLoader();
-         if (parentPool == null)
-         {
-            throw new IllegalStateException("Null parent classpool");
-         }
+         return null;
       }
-      public void initialiseParentClassLoader()
-      {
-         parentPool = ClassPool.getDefault();
-      }
       
-      public URL findParentResource(String classname)
+      CtClass clazz = null;
+      if (!parentPool.childFirstLookup)
       {
-         return parentPool.find(classname);
+         clazz = getCachedOrCreateFromPoolParent(parentPool, classname, create); 
       }
       
-      public CtClass createParentCtClass(String classname, boolean useCache)
+      //We can use the exposed methods directly to avoid the overhead of NotFoundException
+      clazz = parentPool.getCached(classname);
+      if (clazz == null && create)
       {
-         try
-         {
-            return parentPool.get(classname);
-         }
-         catch(NotFoundException ignore)
-         {
-         }
-         return null;
+         clazz = parentPool.createCtClass(classname, true);
       }
-      
-      public CtClass getParentCached(String classname)
+
+      if (clazz == null && !parentPool.childFirstLookup)
       {
-         try
-         {
-            return parentPool.get(classname);
-         }
-         catch (NotFoundException ignore)
-         {
-         }
-         return null;
+         clazz = getCachedOrCreateFromPoolParent(parentPool, classname, create); 
       }
+      return clazz;
    }
    
-   private class ChildClassPoolDomainImpl implements ClassPoolDomainStrategy
+   protected CtClass getCachedOrCreate(ClassPool parentPool, String classname, boolean create)
    {
-      public URL findParentResource(String classname)
+      try
       {
-         return parent.findResource(classname);
+         //This will check the parents
+         return parentPool.get(classname);
       }
-      
-      public CtClass createParentCtClass(String classname, boolean useCache)
+      catch(NotFoundException e)
       {
-         return parent.createCtClass(null, classname, useCache);
+         return null;
       }
+   }
       
-      public CtClass getParentCached(String classname)
-      {
-         return parent.getCached(null, classname);
-      }
+   public String toString()
+   {
+      return super.toString() + "[" + domainName + "]";
    }
 }

Added: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolToClassPoolDomainAdapter.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolToClassPoolDomainAdapter.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolToClassPoolDomainAdapter.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -0,0 +1,100 @@
+/*
+* 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.aop.classpool;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassPoolToClassPoolDomainAdapter extends ClassPoolDomain
+{
+   protected ClassPool pool;
+   
+   public ClassPoolToClassPoolDomainAdapter()
+   {
+      this.pool = initialiseParentClassLoader();
+      if (pool == null)
+      {
+         throw new IllegalStateException("Null parent classpool");
+      }
+   }
+   
+   public ClassPool initialiseParentClassLoader()
+   {
+      return ClassPool.getDefault();
+   }
+   
+   @Override
+   synchronized void addClassPool(DelegatingClassPool pool)
+   {
+      throw new IllegalStateException("Cannot add pools to the domain adaptor");
+   }
+
+   
+   @Override
+   protected synchronized CtClass getCachedOrCreateInternal(String classname, boolean create)
+   {
+      if (pool instanceof BaseClassPool)
+      {
+         return getCachedOrCreate((BaseClassPool)pool, classname, create);
+      }
+      else
+      {
+         return getCachedOrCreate(pool, classname, create);
+      }
+   }
+
+   @Override
+   public String getDomainName()
+   {
+      return null;
+   }
+
+   @Override
+   public boolean isParentFirst()
+   {
+      return !pool.childFirstLookup;
+   }
+
+   @Override
+   synchronized void removeClassPool(DelegatingClassPool pool)
+   {
+      throw new IllegalStateException("Cannot remove pools from the domain adaptor");
+   }
+
+   @Override
+   public void setParentFirst(boolean parentFirst)
+   {
+      throw new IllegalStateException("Cannot change the parent first setting in the domain adaptor");
+   }
+
+   @Override
+   public String toString()
+   {
+      return "ClassPoolToDomainAdapter[" + System.identityHashCode(this) + " " + pool.toString() + "]";
+   }
+
+}

Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DelegatingClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DelegatingClassPool.java	2008-12-09 20:29:02 UTC (rev 82156)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DelegatingClassPool.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -39,8 +39,6 @@
    private final static Logger logger = Logger.getLogger(DelegatingClassPool.class);
    private final ClassPoolDomain domain;
    
-   private boolean isTemp;
-   
    private boolean closed;
    
    public DelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository, boolean isTemp)
@@ -57,6 +55,11 @@
       domain.addClassPool(this);
    }
 
+   ClassPoolDomain getDomain()
+   {
+      return domain;
+   }
+   
    public CtClass get(String classname) throws NotFoundException 
    {
       System.out.println("==> Initiating lookup of " + classname + " in " + this);
@@ -76,20 +79,8 @@
    @Override
    protected synchronized CtClass get0(String classname, boolean useCache) throws NotFoundException
    {
-      CtClass clazz = null;
-      if (useCache) 
-      {
-         clazz = getCached(classname);
-         if (clazz != null)
-         {
-            return clazz;
-         }
-      }
-   
-      return createCtClass(classname, useCache);
+      return domain.getCachedOrCreate(this, classname, true);
    }
-
-
    
    @Override
    public boolean isUnloadedClassLoader()
@@ -108,129 +99,15 @@
    @Override
    public CtClass getCached(String classname)
    {
-      return getCached(true, classname);
+      return domain.getCachedOrCreate(this, classname, false);
+      //return getCached(true, classname);
    }
    
-   
-   CtClass getCached(boolean isInitiatingPool, String classname)
-   {
-      if (isInitiatingPool && domain.isParentFirst())
-      {
-         CtClass clazz = domain.getCached(this, classname);
-         if (clazz != null)
-         {
-            return clazz;
-         }
-      }
-      CtClass clazz = getCachedLocally(classname);
-      if (clazz != null)
-      {
-         System.out.println("==> Found cached class " + classname + " in " + this);
-         if (logger.isTraceEnabled())
-         {
-            logger.trace("Found cached class " + classname + " in " + this);
-         }
-         return clazz;
-      }
-      if (clazz == null)
-      {
-         boolean isLocal = false;
-
-         ClassLoader cl = getClassLoader0();
-
-         if (cl != null)
-         {
-            isLocal = isLocalResource(classname);
-         }
-
-         if (!isLocal)
-         {
-            Object o = generatedClasses.get(classname);
-            if (o == null && isInitiatingPool)
-            {
-               clazz = domain.getCached(this, classname);
-               if (clazz != null)
-               {
-                  return clazz;
-               }
-            }
-         }
-      }
-      
-      return getCachedFromParent(classname);
-   }
-
-   private CtClass getCachedFromParent(String classname)
-   {
-      if (parent != null)
-      {
-         if (parent instanceof AOPClassPool)
-         {
-            return ((AOPClassPool)parent).getCached(classname);
-         }
-         else
-         {
-            try
-            {
-               return parent.get(classname);
-            }
-            catch (NotFoundException e)
-            {
-            }
-         }
-      }
-      
-      return null;
-   }
-
    @Override
-   public CtClass createCtClass(String classname, boolean useCache)
+   public CtClass getCachedLocally(String classname)
    {
-      return createCtClass(true, classname, useCache);
+      return super.getCachedLocally(classname);
    }
-   
-   CtClass createCtClass(boolean isInitiatingPool, String classname, boolean useCache)
-   {
-      CtClass clazz = null;
-      if (isLocalResource(classname))
-      {
-         boolean create = true;
-         if (domain.isParentFirst())
-         {
-            if (domain.findParentResource(classname) != null)
-            {
-               create = false;
-            }
-         }
-         
-         if (create)
-         {
-            clazz = super.createCtClass(classname, useCache);
-            if (clazz != null && useCache)
-            {
-               if (useCache)
-               {
-                  System.out.println("==> Caching class " + classname + " in " + this);
-                  if (logger.isTraceEnabled())
-                  {
-                     logger.trace("Caching class " + classname + " in " + this);
-                  }
-                  cacheCtClass(clazz.getName(), clazz, false);
-               }
-            }
-         }
-      }
-      if (clazz == null && isInitiatingPool)
-      {
-         clazz = domain.createCtClass(this, classname, useCache);
-      }
-      
-      if (clazz == null)
-      {
-         clazz = createParentCtClass(classname, useCache);
-      }
-      return clazz;
-   }
 
    //Lifted from AOPClassPool, also exists in JBossClassPool
    @Override

Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/NonDelegatingClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/NonDelegatingClassPool.java	2008-12-09 20:29:02 UTC (rev 82156)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/NonDelegatingClassPool.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -39,45 +39,6 @@
       super.childFirstLookup = !parentFirst;
    }
 
-//   /**
-//    * Overrides ClassPool.get0() so that we can look up classes without caching them in the initiating pool.
-//    * The DelgatingClassPool + ClassPoolDomain handle the caching in the correct pool + handles the 
-//    * parentFirst functionality
-//    */
-//   @Override
-//   protected synchronized CtClass get0(String classname, boolean useCache) throws NotFoundException
-//   {
-//      CtClass clazz = null;
-//      if (useCache) 
-//      {
-//         clazz = getCached(classname);
-//         if (!childFirstLookup && clazz != null)
-//         {
-//            return clazz;
-//         }
-//      }
-//   
-//      boolean attemptCreate = false;
-//      if (clazz == null)
-//      {
-//         attemptCreate = true;
-//      }
-//      else if (clazz != null && clazz.getClassPool() != this && childFirstLookup && isLocalResource(classname))
-//      {
-//         attemptCreate = true;
-//      }
-//      
-//      if (attemptCreate)
-//      {
-//         CtClass clazz2 = createCtClass(classname, useCache);
-//         if (clazz2 != null)
-//         {
-//            clazz = clazz2;
-//         }
-//      }
-//      return clazz;
-//   }
-
    @Override
    public CtClass createCtClass(String classname, boolean useCache)
    {
@@ -88,8 +49,7 @@
       }
       if (clazz == null)
       {
-//         String resName = getResourceName(classname);
-         if (isLocalResource(classname))
+         if (isLocalResource(getResourceName(classname)))
          {
             clazz = super.createCtClass(classname, useCache);
          }

Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePlugin.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePlugin.java	2008-12-09 20:29:02 UTC (rev 82156)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePlugin.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -22,7 +22,6 @@
 package org.jboss.aop.classpool;
 
 import java.net.URL;
-import java.net.URLClassLoader;
 
 import javassist.ClassPool;
 

Modified: projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java	2008-12-09 20:29:02 UTC (rev 82156)
+++ projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -21,16 +21,8 @@
 */ 
 package org.jboss.aop.classpool.jbosscl;
 
-import java.net.URL;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.NotFoundException;
-
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.classpool.ClassPoolDomain;
-import org.jboss.classloader.spi.base.BaseClassLoader;
-import org.jboss.classloader.spi.base.BaseClassLoaderDomain;
+import org.jboss.aop.classpool.ClassPoolToClassPoolDomainAdapter;
 
 /**
  * 
@@ -44,15 +36,10 @@
       // FIXME JBossClClassPool constructor
       super(domainName, parent);
    }
-   
-   protected class RootClassPoolDomainImpl extends ClassPoolDomain.RootClassPoolDomainImpl
+
+   protected ClassPoolToClassPoolDomainAdapter createParentClassPoolToClassPoolDomainAdaptor()
    {
-      @Override
-      public void initialiseParentClassLoader()
-      {
-         ClassPool pool = AspectManager.instance().registerClassLoader(BaseClassLoaderDomain.class.getClassLoader());
-         ClassPool parentPool = ClassPool.getDefault();
-      }
+      return new JBossClClassPoolToClassPoolDomainAdapter();
    }
-
+   
 }

Added: projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -0,0 +1,42 @@
+/*
+* 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.aop.classpool.jbosscl;
+
+import javassist.ClassPool;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.classpool.ClassPoolToClassPoolDomainAdapter;
+import org.jboss.classloader.spi.base.BaseClassLoaderDomain;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class JBossClClassPoolToClassPoolDomainAdapter extends ClassPoolToClassPoolDomainAdapter
+{
+   @Override
+   public ClassPool initialiseParentClassLoader()
+   {
+      return AspectManager.instance().registerClassLoader(BaseClassLoaderDomain.class.getClassLoader());
+   }
+}

Modified: projects/aop/trunk/asintegration-mc/src/tests/org/jboss/test/aop/classpool/jbosscl/test/ClassPoolWithRepositoryTestCase.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/tests/org/jboss/test/aop/classpool/jbosscl/test/ClassPoolWithRepositoryTestCase.java	2008-12-09 20:29:02 UTC (rev 82156)
+++ projects/aop/trunk/asintegration-mc/src/tests/org/jboss/test/aop/classpool/jbosscl/test/ClassPoolWithRepositoryTestCase.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -219,30 +219,6 @@
       }
    }
    
-   public void testChildOverrideWithNoParentDelegation() throws Exception
-   {
-      ClassPool globalPool = null;
-      ClassPool scopedPool = null;
-      try
-      {
-         globalPool = createClassPool("GLOBAL", true, JAR_A_1);
-         scopedPool = createChildDomainParentLastClassPool("CHILD", "CHILD", true, JAR_A_1);
-         CtClass aFromParent = globalPool.get(CLASS_A);
-         assertNotNull(aFromParent);
-         CtClass aFromChild = scopedPool.get(CLASS_A);
-         assertNotNull(aFromChild);
-         assertNotSame(aFromParent, aFromChild);
-         assertSame(globalPool, aFromParent.getClassPool());
-         assertSame(scopedPool, aFromChild.getClassPool());
-      }
-      finally
-      {
-         unregisterClassPool(globalPool);
-         unregisterClassPool(scopedPool);
-         unregisterDomain(scopedPool);
-      }
-   }
-   
    public void testURLChildOfGlobalUcl() throws Exception
    {
       ClassPool global = null;
@@ -270,6 +246,31 @@
       }
    }
    
+   public void testChildOverrideWithNoParentDelegation() throws Exception
+   {
+      ClassPool globalPool = null;
+      ClassPool scopedPool = null;
+      try
+      {
+         globalPool = createClassPool("GLOBAL", true, JAR_A_1);
+         scopedPool = createChildDomainParentLastClassPool("CHILD", "CHILD", true, JAR_A_1);
+         CtClass aFromParent = globalPool.get(CLASS_A);
+         assertNotNull(aFromParent);
+         CtClass aFromChild = scopedPool.get(CLASS_A);
+         assertNotNull(aFromChild);
+         assertNotSame(aFromParent, aFromChild);
+         assertSame(globalPool, aFromParent.getClassPool());
+         assertSame(scopedPool, aFromChild.getClassPool());
+      }
+      finally
+      {
+         unregisterClassPool(globalPool);
+         unregisterClassPool(scopedPool);
+         unregisterDomain(scopedPool);
+      }
+   }
+
+
    public void testUndeploySibling() throws Exception
    {
       ClassPool poolA = null;
@@ -333,6 +334,134 @@
       }
    }
    
+   
+   public void testSeveralLevelsOfDomain() throws Exception
+   {
+      ClassPool parent = null;
+      ClassPool cl1B = null;
+      ClassPool cl1C = null;
+      ClassPool cl2B = null;
+      ClassPool cl2C = null;
+      ClassPool cl11A = null;
+      ClassPool cl11B = null;
+      ClassPool cl11C = null;
+      ClassPool cl12A = null;
+      ClassPool cl12B = null;
+      ClassPool cl12C = null;
+      
+      try
+      {
+         parent = createClassPool("A", true, JAR_A_1);
+         CtClass aFromParent = parent.get(CLASS_A);
+         assertSame(parent, aFromParent.getClassPool());
+         
+         final String domain1 = "1";
+         cl1B = createChildDomainParentFirstClassPool("1B", domain1, true, JAR_B_1);
+         cl1C =  createChildDomainParentFirstClassPool("1C", domain1, true, JAR_C_1);
+         CtClass aFrom1B = cl1B.get(CLASS_A);
+         CtClass bFrom1B = cl1B.get(CLASS_B);
+         CtClass cFrom1B = cl1B.get(CLASS_C);
+         CtClass aFrom1C = cl1C.get(CLASS_A);
+         CtClass bFrom1C = cl1C.get(CLASS_B);
+         CtClass cFrom1C = cl1C.get(CLASS_C);
+         assertSame(aFromParent, aFrom1B);
+         assertSame(aFromParent, aFrom1C);
+         assertSame(bFrom1B, bFrom1C);
+         assertSame(cFrom1B, cFrom1C);
+         assertSame(cl1B, bFrom1B.getClassPool());
+         assertSame(cl1C, cFrom1B.getClassPool());
+         
+         
+         final String domain2 = "2";
+         cl2B = createChildDomainParentFirstClassPool("2B", domain2, true, JAR_B_1);
+         cl2C = createChildDomainParentFirstClassPool("2C", domain2, true, JAR_C_1);
+         CtClass aFrom2B = cl2B.get(CLASS_A);
+         CtClass bFrom2B = cl2B.get(CLASS_B);
+         CtClass cFrom2B = cl2B.get(CLASS_C);
+         CtClass aFrom2C = cl2C.get(CLASS_A);
+         CtClass bFrom2C = cl2C.get(CLASS_B);
+         CtClass cFrom2C = cl2C.get(CLASS_C);
+         assertSame(aFromParent, aFrom2B);
+         assertSame(aFromParent, aFrom2C);
+         assertSame(bFrom2B, bFrom2C);
+         assertSame(cFrom2B, cFrom2C);
+         assertSame(cl2B, bFrom2B.getClassPool());
+         assertSame(cl2C, cFrom2B.getClassPool());
+         assertNotSame(bFrom1B, bFrom2B);
+         assertNotSame(bFrom2C, bFrom1C);
+         assertNotSame(cFrom2C, cFrom1C);
+         
+         final String domain11 = "11";
+         cl11A = createChildDomainParentFirstClassPool("11A", domain11, domain1, true, JAR_A_2);
+         cl11B = createChildDomainParentFirstClassPool("11B", domain11, domain1, true, JAR_B_2);
+         cl11C = createChildDomainParentFirstClassPool("11C", domain11, domain1, true, JAR_C_2);
+         final String domain12 = "12";
+         cl12A = createChildDomainParentLastClassPool("12A", domain12, domain1, true, JAR_A_2);
+         cl12B = createChildDomainParentLastClassPool("12B", domain12, domain1, true, JAR_B_2);
+         cl12C = createChildDomainParentLastClassPool("12C", domain12, domain1, true, JAR_C_2);
+         CtClass aFrom11A = cl11A.get(CLASS_A);
+         CtClass aFrom11B = cl11B.get(CLASS_A);
+         CtClass aFrom11C = cl11C.get(CLASS_A);
+         assertSame(aFromParent, aFrom11A);
+         assertSame(aFromParent, aFrom11B);
+         assertSame(aFromParent, aFrom11C);
+         CtClass aFrom12A = cl12A.get(CLASS_A);
+         CtClass aFrom12B = cl12B.get(CLASS_A);
+         CtClass aFrom12C = cl12C.get(CLASS_A);
+         assertNotSame(aFromParent, aFrom12A);
+         assertSame(aFrom12A, aFrom12B);
+         assertSame(aFrom12A, aFrom12C);
+         assertSame(cl12A, aFrom12A.getClassPool());
+         
+         CtClass bFrom11A = cl11A.get(CLASS_B);
+         CtClass bFrom11B = cl11B.get(CLASS_B);
+         CtClass bFrom11C = cl11C.get(CLASS_B);
+         CtClass cFrom11A = cl11A.get(CLASS_C);
+         CtClass cFrom11B = cl11B.get(CLASS_C);
+         CtClass cFrom11C = cl11C.get(CLASS_C);
+         assertSame(bFrom11A, bFrom11B);
+         assertSame(bFrom11A, bFrom11C);
+         assertSame(cl1B, bFrom11B.getClassPool());
+         assertSame(cFrom11A, cFrom11B);
+         assertSame(cFrom11A, cFrom11C);
+         assertSame(cl1C, cFrom11C.getClassPool());
+         
+         CtClass bFrom12A = cl12A.get(CLASS_B);
+         CtClass bFrom12B = cl12B.get(CLASS_B);
+         CtClass bFrom12C = cl12C.get(CLASS_B);
+         CtClass cFrom12A = cl12A.get(CLASS_C);
+         CtClass cFrom12B = cl12B.get(CLASS_C);
+         CtClass cFrom12C = cl12C.get(CLASS_C);
+         assertSame(bFrom12A, bFrom12B);
+         assertSame(bFrom12A, bFrom12C);
+         assertSame(cl12B, bFrom12B.getClassPool());
+         assertSame(cFrom12A, cFrom12B);
+         assertSame(cFrom12A, cFrom12C);
+         assertSame(cl12C, cFrom12C.getClassPool());
+         assertNotSame(bFrom11B, bFrom12B);
+         assertNotSame(cFrom11C, cFrom12C);
+      }
+      finally
+      {
+         unregisterClassPool(parent);
+         unregisterClassPool(cl1B);
+         unregisterClassPool(cl1C);
+         unregisterClassPool(cl2B);
+         unregisterClassPool(cl2C);
+         unregisterClassPool(cl11A);
+         unregisterClassPool(cl11B);
+         unregisterClassPool(cl11C);
+         unregisterClassPool(cl12A);
+         unregisterClassPool(cl12B);
+         unregisterClassPool(cl12C);
+         
+         unregisterDomain(cl12A);
+         unregisterDomain(cl11A);
+         unregisterDomain(cl2B);
+         unregisterDomain(cl1B);
+      }
+   }
+
 /* 
    The folllowing two tests are probably not very realistic http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4195022#4195022
    public void testClassLoaderlWithParentClassLoader() throws Exception
@@ -357,7 +486,7 @@
       }
    }
 
-   
+   If we ever need to implement this, this test needs to have the latest additions to ClassLoaderWithRepositorySanityTestCase
    public void testClassLoaderWithParentClassLoaderAndSameClassInDomain() throws Exception
    {
       ClassPool parent = createChildURLClassPool(null, JAR_B_1);

Modified: projects/aop/trunk/asintegration-mc/src/tests/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/tests/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java	2008-12-09 20:29:02 UTC (rev 82156)
+++ projects/aop/trunk/asintegration-mc/src/tests/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -347,12 +347,24 @@
       return AspectManager.instance().registerClassLoader(loader);
    }
    
+   protected ClassPool createChildDomainParentFirstClassPool(String name, String domainName, String parentDomainName, boolean importAll, URL... urls) throws Exception
+   {
+      ClassLoader loader = createChildDomainParentFirstClassLoader(name, domainName, parentDomainName, importAll, urls);
+      return AspectManager.instance().registerClassLoader(loader);
+   }
+   
    protected ClassPool createChildDomainParentLastClassPool(String name, String domainName, boolean importAll, URL... urls) throws Exception
    {
       ClassLoader loader = createChildDomainParentLastClassLoader(name, domainName, importAll, urls);
       return AspectManager.instance().registerClassLoader(loader);
    }
 
+   protected ClassPool createChildDomainParentLastClassPool(String name, String domainName, String parentDomainName, boolean importAll, URL... urls) throws Exception
+   {
+      ClassLoader loader = createChildDomainParentLastClassLoader(name, domainName, parentDomainName, importAll, urls);
+      return AspectManager.instance().registerClassLoader(loader);
+   }
+
    protected ClassPool createChildURLClassPool(ClassPool parent, URL url)
    {
       ClassLoader parentLoader = null;

Modified: projects/aop/trunk/asintegration-mc/src/tests/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTestDelegate.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/tests/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTestDelegate.java	2008-12-09 20:29:02 UTC (rev 82156)
+++ projects/aop/trunk/asintegration-mc/src/tests/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTestDelegate.java	2008-12-09 20:32:31 UTC (rev 82157)
@@ -21,8 +21,6 @@
 */ 
 package org.jboss.test.aop.classpool.jbosscl.test;
 
-import junit.framework.Test;
-
 import org.jboss.test.AbstractTestDelegate;
 
 /**




More information about the jboss-cvs-commits mailing list