[jboss-cvs] JBossAS SVN: r80274 - in projects/aop/trunk: aop/src/main/org/jboss/aop/classpool and 22 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Oct 30 13:43:34 EDT 2008


Author: kabir.khan at jboss.com
Date: 2008-10-30 13:43:34 -0400 (Thu, 30 Oct 2008)
New Revision: 80274

Added:
   projects/aop/trunk/aop/aop-report.xml
   projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPCLassPoolSearchStrategy.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/BaseClassPool.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolDomainRegistry.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/NonDelegatingClassPool.java
   projects/aop/trunk/asintegration-jmx/src/assembly/
   projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a1.xml
   projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a2.xml
   projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b1.xml
   projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b2.xml
   projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c1.xml
   projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c2.xml
   projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/
   projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/
   projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossClassPathHelper.java
   projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclClassPoolFactory.java
   projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclDelegatingClassPool.java
   projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/UclClassPoolDomain.java
   projects/aop/trunk/asintegration-jmx/src/tests/
   projects/aop/trunk/asintegration-jmx/src/tests/org/
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/ParentLastURLClassLoader.java
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/a/
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/a/A.java
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/b/
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/b/B.java
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/c/
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/c/C.java
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassLoaderSanityTestCase.java
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestDelegate.java
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestSuite.java
   projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclDelegatingClassPoolTestCase.java
   projects/aop/trunk/build/release.properties
Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java
   projects/aop/trunk/asintegration-core/.classpath
   projects/aop/trunk/asintegration-core/pom.xml
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/AbstractIsLocalResourcePlugin.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePlugin.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePluginFactory.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/IsLocalResourcePluginFactory.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePlugin.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePluginFactory.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePlugin.java
   projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePluginFactory.java
   projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/ClassPoolTest.java
   projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/IsLocalResourcePluginFactoryTestCase.java
   projects/aop/trunk/asintegration-jmx/.classpath
   projects/aop/trunk/asintegration-jmx/pom.xml
Log:
[JBAOP-666] New classpools for RepositoryClassLoaders in AS 4

Added: projects/aop/trunk/aop/aop-report.xml
===================================================================

Added: projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPCLassPoolSearchStrategy.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPCLassPoolSearchStrategy.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPCLassPoolSearchStrategy.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,34 @@
+/*
+* 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.CtClass;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface AOPCLassPoolSearchStrategy
+{
+   CtClass getCached(String classname);
+}

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-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -47,6 +47,14 @@
    /** Classnames of classes that have been loaded, but were not woven */
    protected ConcurrentHashMap<String, Boolean> loadedButNotWovenClasses = new ConcurrentHashMap<String, Boolean>();
 
+   /** Causes the AOPClassPool.getCached() method to search all ClassPools registered in the repository */
+   public static final Class<SearchAllRegisteredLoadersSearchStrategy> SEARCH_ALL_STRATEGY = SearchAllRegisteredLoadersSearchStrategy.class;
+
+   /** Causes the AOPClassPool.getCached() method to search only itself */
+   public static final Class<SearchLocalLoaderLoaderSearchStrategy> SEARCH_LOCAL_ONLY_STRATEGY = SearchLocalLoaderLoaderSearchStrategy.class;
+   
+   private final AOPCLassPoolSearchStrategy searchStrategy;
+   
    static
    {
       ClassPool.doPruning = false;
@@ -65,9 +73,43 @@
 
    private AOPClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, boolean isTemp)
    {
+      this(cl, src, repository, SEARCH_ALL_STRATEGY, isTemp);
+   }
+
+   public AOPClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, Class<? extends AOPCLassPoolSearchStrategy> searchStrategy)
+   {
+      this(cl, src, repository, searchStrategy, false);
+   }
+   
+   public AOPClassPool(ClassPool src, ScopedClassPoolRepository repository, Class<? extends AOPCLassPoolSearchStrategy> searchStrategy)
+   {
+      this(null, src, repository, searchStrategy, true);
+   }
+   
+   private AOPClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, Class<? extends AOPCLassPoolSearchStrategy> searchStrategy, boolean isTemp)
+   {
       super(cl, src, repository, isTemp);
+      if (searchStrategy == SEARCH_ALL_STRATEGY)
+      {
+         this.searchStrategy = new SearchAllRegisteredLoadersSearchStrategy();
+      }
+      else if (searchStrategy == SEARCH_LOCAL_ONLY_STRATEGY)
+      {
+         this.searchStrategy = new SearchLocalLoaderLoaderSearchStrategy();
+      }
+      else
+      {
+         try
+         {
+            this.searchStrategy = searchStrategy.newInstance();
+         }
+         catch (Exception e)
+         {
+            throw new RuntimeException("Error instantiating search strategy class " + searchStrategy, e);
+         }
+      }
    }
-
+   
    public void setClassLoader(ClassLoader cl)
    {
       classLoader = new WeakReference<ClassLoader>(cl);
@@ -86,54 +128,17 @@
 
    public CtClass getCached(String classname)
    {
-      CtClass clazz = getCachedLocally(classname);
-      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)
-            {
-               Map<ClassLoader, ClassPool> registeredCLs = AspectManager.getRegisteredCLs();
-               synchronized (registeredCLs)
-               {
-                  for(ClassPool pl : AspectManager.getRegisteredCLs().values())
-                  {
-                     AOPClassPool pool = (AOPClassPool) pl;
-                     if (pool.isUnloadedClassLoader())
-                     {
-                        AspectManager.instance().unregisterClassLoader(pool.getClassLoader());
-                        continue;
-                     }
-
-                     //Do not check classpools for scoped classloaders
-                     if (!pool.includeInGlobalSearch())
-                     {
-                        continue;
-                     }
-
-                     clazz = pool.getCachedLocally(classname);
-                     if (clazz != null)
-                     {
-                        return clazz;
-                     }
-                  }
-               }
-            }
-         }
-      }
-      // *NOTE* NEED TO TEST WHEN SUPERCLASS IS IN ANOTHER UCL!!!!!!
-      return clazz;
+      return searchStrategy.getCached(classname);
    }
+   
+   /**
+    * Make createCtClass public so that we can override it 
+    */
+   @Override
+   protected CtClass createCtClass(String classname, boolean useCache)
+   {
+      return super.createCtClass(classname, useCache);
+   }
 
    protected boolean includeInGlobalSearch()
    {
@@ -224,5 +229,72 @@
       return super.get0(classname, useCache);
    }
    
+   /**
+    * Contains the original AOPClassPool.getCached()
+    * 
+    */
+   private class SearchAllRegisteredLoadersSearchStrategy implements AOPCLassPoolSearchStrategy
+   {
+      public CtClass getCached(String classname)
+      {
+         CtClass clazz = getCachedLocally(classname);
+         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)
+               {
+                  Map<ClassLoader, ClassPool> registeredCLs = AspectManager.getRegisteredCLs();
+                  synchronized (registeredCLs)
+                  {
+                     for(ClassPool pl : AspectManager.getRegisteredCLs().values())
+                     {
+                        AOPClassPool pool = (AOPClassPool) pl;
+                        if (pool.isUnloadedClassLoader())
+                        {
+                           AspectManager.instance().unregisterClassLoader(pool.getClassLoader());
+                           continue;
+                        }
+
+                        //Do not check classpools for scoped classloaders
+                        if (!pool.includeInGlobalSearch())
+                        {
+                           continue;
+                        }
+
+                        clazz = pool.getCachedLocally(classname);
+                        if (clazz != null)
+                        {
+                           return clazz;
+                        }
+                     }
+                  }
+               }
+            }
+         }
+         // *NOTE* NEED TO TEST WHEN SUPERCLASS IS IN ANOTHER UCL!!!!!!
+         return clazz;
+      }
+   }
    
+   /**
+    * Checks only the AOPClassPool's cache 
+    */
+   private class SearchLocalLoaderLoaderSearchStrategy implements AOPCLassPoolSearchStrategy
+   {
+      public CtClass getCached(String classname)
+      {
+         return getCachedLocally(classname);
+      }
+   }
 }

Modified: projects/aop/trunk/asintegration-core/.classpath
===================================================================
--- projects/aop/trunk/asintegration-core/.classpath	2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/.classpath	2008-10-30 17:43:34 UTC (rev 80274)
@@ -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.0.CR3/jboss-classloader-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloader/2.0.0.CR3/jboss-classloader-2.0.0.CR3-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.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.0.CR2/jboss-deployers-client-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.0.CR2/jboss-deployers-client-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2-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.CR1/jboss-managed-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-managed/2.0.0.CR1/jboss-managed-2.0.0.CR1-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1-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.0.CR1/jboss-reflect-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1-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.CR1/jboss-vfs-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1-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/" 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.0.CR3/jboss-classloader-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloader/2.0.0.CR3/jboss-classloader-2.0.0.CR3-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.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.0.CR2/jboss-deployers-client-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.0.CR2/jboss-deployers-client-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2-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.CR1/jboss-managed-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-managed/2.0.0.CR1/jboss-managed-2.0.0.CR1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1-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.0.CR1/jboss-reflect-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1-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.CR1/jboss-vfs-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1-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/pom.xml
===================================================================
--- projects/aop/trunk/asintegration-core/pom.xml	2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/pom.xml	2008-10-30 17:43:34 UTC (rev 80274)
@@ -49,18 +49,41 @@
             <exclude>org/jboss/test/aop/classpool/support/b/B.class</exclude>
           </excludes>
         </configuration>
-        <!-- fileSets>
-          <fileSet>
-            <directory>target/test-classes</directory>
-            <outputDirectory>/</outputDirectory>
-            <excludes>
-              <exclude>org/jboss/test/aop/classpool/support/a/A.class</exclude>
-              <exclude>org/jboss/test/aop/classpool/support/b/B.class</exclude>
-            </excludes>
-          </fileSet>
-        </fileSets -->
-        
       </plugin>
+            <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>2.2-beta-2</version>
+        <executions>
+          <execution>
+            <id>test-classpool-a</id>
+            <phase>package</phase>
+            <goals>
+              <goal>attached</goal>
+            </goals>
+            <configuration>
+              <descriptors>
+                <descriptor>src/assembly/test-classpool-a.xml</descriptor>
+              </descriptors>
+              <finalName>${artifactId}</finalName>
+            </configuration>
+          </execution>
+          <execution>
+            <id>test-classpool-b</id>
+            <phase>package</phase>
+            <goals>
+              <goal>attached</goal>
+            </goals>
+            <configuration>
+              <descriptors>
+                <descriptor>src/assembly/test-classpool-b.xml</descriptor>
+              </descriptors>
+              <finalName>${artifactId}</finalName>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>

Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/AbstractIsLocalResourcePlugin.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/AbstractIsLocalResourcePlugin.java	2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/AbstractIsLocalResourcePlugin.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -21,6 +21,10 @@
 */ 
 package org.jboss.aop.classpool;
 
+import java.net.URL;
+
+import javassist.ClassPool;
+
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
@@ -28,18 +32,46 @@
  */
 public abstract class AbstractIsLocalResourcePlugin implements IsLocalResourcePlugin
 {
-   private final DelegatingClassPool pool;
+   private final BaseClassPool pool;
    
-   public AbstractIsLocalResourcePlugin(DelegatingClassPool pool)
+   public AbstractIsLocalResourcePlugin(BaseClassPool pool)
    {
       this.pool = pool;
       initialise();
    }
 
-   protected abstract void initialise();
+   protected void initialise()
+   {
+      
+   }
    
-   protected DelegatingClassPool getPool()
+   protected BaseClassPool getPool()
    {
       return pool;
    }
+   
+   /**
+    * Checks if the resource can be found in the parent classpool's loader
+    * and returns true if it either does not exist in the parent or if
+    * the parent has a different URL for the resource 
+    */
+   protected boolean isSameInParent(String classResourceName, URL foundURL)
+   {
+      ClassPool  parent = pool.getParent(); 
+      if (parent != null)
+      {
+         ClassLoader parentLoader = parent.getClassLoader();
+         URL parentURL = parentLoader.getResource(classResourceName);
+         if (parentURL == null)
+         {
+            return false;
+         }
+         if (parentURL.equals(foundURL))
+         {
+            return true;
+         }
+      }
+      
+      return false;
+   }
 }

Added: 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	                        (rev 0)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/BaseClassPool.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,119 @@
+/*
+* 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;
+import javassist.NotFoundException;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+/**
+ * Intermediate class containing commonly needed functionality for the new classpools. I don't want to
+ * modify AOPClassPool too much
+ *  
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class BaseClassPool extends AOPClassPool
+{
+   private IsLocalResourcePlugin isLocalResourcePlugin;
+
+   public BaseClassPool(ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository)
+   {
+      super(cl, parent, repository);
+      isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
+
+   }
+
+   public BaseClassPool(ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository, Class<? extends AOPCLassPoolSearchStrategy> searchStrategy)
+   {
+      super(cl, parent, repository, searchStrategy);
+      isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
+   }
+   
+   /**
+    * Make createCtClass public so that we can override it 
+    */
+   @Override
+   public CtClass createCtClass(String classname, boolean useCache)
+   {
+      return super.createCtClass(classname, useCache);
+   }
+
+   @Override
+   public void cacheCtClass(String classname, CtClass c, boolean dynamic)
+   {
+      super.cacheCtClass(classname, c, dynamic);
+   }
+
+   protected CtClass createParentCtClass(String classname, boolean useCache)
+   {
+      
+      CtClass clazz = null;
+      if (parent != null)
+      {
+         //Make parent create class
+         if (parent instanceof BaseClassPool)
+         {
+            clazz = ((BaseClassPool)parent).createCtClass(classname, useCache);
+         }
+         else
+         {
+            try
+            {
+               clazz = parent.get(classname);
+            }
+            catch (NotFoundException e)
+            {
+            }
+         }
+      }
+      
+      if (clazz != null)
+      {
+         ClassPool pool = clazz.getClassPool();
+         if (pool instanceof BaseClassPool)
+         {
+            ((BaseClassPool)pool).cacheCtClass(classname, clazz, false);
+         }
+      }
+      return clazz;
+   }
+
+   public ClassPool getParent()
+   {
+      return parent;
+   }
+   
+   @Override
+   public boolean isLocalClassLoaderResource(String classResourceName)
+   {
+      return isLocalResourcePlugin.isMyResource(classResourceName);
+   }
+
+   public boolean isLocalClassLoaderClass(String classname)
+   {
+      return isLocalResourcePlugin.isMyResource(getResourceName(classname));
+   }
+
+
+}

Added: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolDomainRegistry.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolDomainRegistry.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolDomainRegistry.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,53 @@
+/*
+* 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 java.util.Map;
+import java.util.WeakHashMap;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassPoolDomainRegistry
+{
+   final static ClassPoolDomainRegistry INSTANCE = new ClassPoolDomainRegistry();
+   
+   final Map<Object, ClassPoolDomain> domains = new WeakHashMap<Object, ClassPoolDomain>();
+   
+   public static ClassPoolDomainRegistry getInstance()
+   {
+      return INSTANCE;
+   }
+   
+   public ClassPoolDomain getDomain(Object key)
+   {
+      return domains.get(key);
+   }
+   
+   public void addClassPoolDomain(Object key, ClassPoolDomain domain)
+   {
+      domains.put(key, domain);
+   }
+   
+}

Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePlugin.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePlugin.java	2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePlugin.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -28,16 +28,11 @@
  */
 public class DefaultClassLoaderIsLocalResourcePlugin extends AbstractIsLocalResourcePlugin implements IsLocalResourcePlugin
 {
-   public DefaultClassLoaderIsLocalResourcePlugin(DelegatingClassPool pool)
+   public DefaultClassLoaderIsLocalResourcePlugin(BaseClassPool pool)
    {
       super(pool);
    }
 
-   @Override
-   protected void initialise()
-   {
-   }
-
    public boolean isMyResource(String resourceName)
    {
       return getPool().getClassLoader().getResource(resourceName) != null;

Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePluginFactory.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePluginFactory.java	2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePluginFactory.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -29,7 +29,7 @@
 public class DefaultClassLoaderIsLocalResourcePluginFactory implements IsLocalResourcePluginFactory
 {
 
-   public IsLocalResourcePlugin create(DelegatingClassPool pool)
+   public IsLocalResourcePlugin create(BaseClassPool pool)
    {
       return new DefaultClassLoaderIsLocalResourcePlugin(pool);
    }

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-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DelegatingClassPool.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -21,8 +21,7 @@
 */ 
 package org.jboss.aop.classpool;
 
-import java.net.URL;
-
+import javassist.ClassPool;
 import javassist.CtClass;
 import javassist.NotFoundException;
 import javassist.scopedpool.ScopedClassPoolRepository;
@@ -30,11 +29,12 @@
 import org.jboss.logging.Logger;
 
 /**
+ * Base class for classpools backed by a domain
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
-public class DelegatingClassPool extends AOPClassPool //TODO It would be great not to have this redundant code
+public class DelegatingClassPool extends BaseClassPool
 {
    private final static Logger logger = Logger.getLogger(DelegatingClassPool.class);
    private final ClassPoolDomain domain;
@@ -43,22 +43,18 @@
    
    private boolean closed;
    
-   private IsLocalResourcePlugin isLocalResourcePlugin;
-   
-   public DelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ScopedClassPoolRepository repository, boolean isTemp)
+   public DelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository, boolean isTemp)
    {
-      super(cl, null, repository);
+      super(cl, parent, repository);
       this.domain = domain;
       domain.addClassPool(this);
-      isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
    }
 
-   protected DelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ScopedClassPoolRepository repository)
+   protected DelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository)
    {
-      super(cl, null, repository);
+      super(cl, parent, repository);
       this.domain = domain;
       domain.addClassPool(this);
-      isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
    }
 
    public CtClass get(String classname) throws NotFoundException 
@@ -152,17 +148,43 @@
             Object o = generatedClasses.get(classname);
             if (o == null && isInitiatingPool)
             {
-               return domain.getCached(this, classname);
+               clazz = domain.getCached(this, classname);
+               if (clazz != null)
+               {
+                  return clazz;
+               }
             }
          }
       }
-      // *NOTE* NEED TO TEST WHEN SUPERCLASS IS IN ANOTHER UCL!!!!!!
+      
+      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
-   protected CtClass createCtClass(String classname, boolean useCache)
+   public CtClass createCtClass(String classname, boolean useCache)
    {
       return createCtClass(true, classname, useCache);
    }
@@ -172,8 +194,6 @@
       CtClass clazz = null;
       if (isLocalResource(classname))
       {
-         URL classUrl = find(classname);
-   
          boolean create = true;
          if (domain.isParentFirst())
          {
@@ -202,8 +222,13 @@
       }
       if (clazz == null && isInitiatingPool)
       {
-         return domain.createCtClass(this, classname, useCache);
+         clazz = domain.createCtClass(this, classname, useCache);
       }
+      
+      if (clazz == null)
+      {
+         clazz = createParentCtClass(classname, useCache);
+      }
       return clazz;
    }
 
@@ -215,17 +240,6 @@
    }
 
    @Override
-   public boolean isLocalClassLoaderResource(String classResourceName)
-   {
-      return isLocalResourcePlugin.isMyResource(classResourceName);
-   }
-
-   public boolean isLocalClassLoaderClass(String classname)
-   {
-      return isLocalResourcePlugin.isMyResource(getResourceName(classname));
-   }
-
-   @Override
    public String toString()
    {
       return super.toString() + " domain: " + domain;

Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/IsLocalResourcePluginFactory.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/IsLocalResourcePluginFactory.java	2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/IsLocalResourcePluginFactory.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -28,5 +28,5 @@
  */
 public interface IsLocalResourcePluginFactory
 {
-   IsLocalResourcePlugin create(DelegatingClassPool pool);
+   IsLocalResourcePlugin create(BaseClassPool pool);
 }

Added: 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	                        (rev 0)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/NonDelegatingClassPool.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,106 @@
+/*
+* 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 java.net.URL;
+
+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: 1.1 $
+ */
+public class NonDelegatingClassPool extends BaseClassPool
+{
+   public NonDelegatingClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, boolean parentFirst)
+   {
+      super(cl, src, repository, AOPClassPool.SEARCH_LOCAL_ONLY_STRATEGY);
+      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)
+   {
+      CtClass clazz = null;
+      if (!childFirstLookup)
+      {
+         clazz = createParentCtClass(classname, useCache);
+      }
+      if (clazz == null)
+      {
+//         String resName = getResourceName(classname);
+         if (isLocalResource(classname))
+         {
+            clazz = super.createCtClass(classname, useCache);
+         }
+      }
+      if (childFirstLookup && clazz == null)
+      {
+         clazz = createParentCtClass(classname, useCache);
+      }
+      
+      return clazz;
+   }
+}

Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePlugin.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePlugin.java	2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePlugin.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -21,6 +21,8 @@
 */ 
 package org.jboss.aop.classpool;
 
+import java.net.URL;
+
 import org.jboss.util.loading.Translatable;
 
 /**
@@ -30,17 +32,11 @@
  */
 public class TranslatableClassLoaderIsLocalResourcePlugin extends AbstractIsLocalResourcePlugin
 {
-   public TranslatableClassLoaderIsLocalResourcePlugin(DelegatingClassPool pool)
+   public TranslatableClassLoaderIsLocalResourcePlugin(BaseClassPool pool)
    {
-      // FIXME TranslatableClassLoaderParentResourcePlugin constructor
       super(pool);
    }
 
-   @Override
-   protected void initialise()
-   {
-   }
-
    public boolean isMyResource(String resourceName)
    {
       ClassLoader loader = getPool().getClassLoader();
@@ -48,7 +44,16 @@
       {
          throw new IllegalStateException("ClassLoader is not instance of Translatable " + loader);
       }
-      return ((Translatable)getPool().getClassLoader()).getResourceLocally(resourceName) != null;
+      URL url = ((Translatable)getPool().getClassLoader()).getResourceLocally(resourceName);
+      if (url == null)
+      {
+         return false;
+      }
+      if (isSameInParent(resourceName, url))
+      {
+         return false;
+      }
+      return true;
    }
 
 }

Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePluginFactory.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePluginFactory.java	2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePluginFactory.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -28,7 +28,7 @@
  */
 public class TranslatableClassLoaderIsLocalResourcePluginFactory implements IsLocalResourcePluginFactory
 {
-   public IsLocalResourcePlugin create(DelegatingClassPool pool)
+   public IsLocalResourcePlugin create(BaseClassPool pool)
    {
       return new TranslatableClassLoaderIsLocalResourcePlugin(pool);
    }

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-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePlugin.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -24,6 +24,8 @@
 import java.net.URL;
 import java.net.URLClassLoader;
 
+import javassist.ClassPool;
+
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
@@ -31,43 +33,37 @@
  */
 public class URLClassLoaderIsLocalResourcePlugin extends AbstractIsLocalResourcePlugin 
 {
-   String[] urls;
-   public URLClassLoaderIsLocalResourcePlugin(DelegatingClassPool pool)
+   public URLClassLoaderIsLocalResourcePlugin(BaseClassPool pool)
    {
-      // FIXME URLClassLoaderParentResourcePlugin constructor
       super(pool);
    }
    
-   public boolean isMyResource(String resourceName)
+   public boolean isMyResource(String classResourceName)
    {
-      URL url = getPool().getClassLoader().getResource(resourceName);
-      if (url != null)
+      //TODO This should be moved into URLClassLoaderIsLocalResourcePlugin, and the -core tests should be updated to
+      //not use the same urls
+      ClassLoader myLoader = getPool().getClassLoader();
+      URL myURL = myLoader.getResource(classResourceName); 
+      if (myURL == null)
       {
-         String urlString = url.toString();
-         for (String s : urls)
+         return false;
+      }
+      
+      ClassPool parent = getPool().getParent();
+      if (parent != null)
+      {
+         ClassLoader parentLoader = parent.getClassLoader();
+         URL parentURL = parentLoader.getResource(classResourceName);
+         if (parentURL == null)
          {
-            if (urlString.contains(s))
-            {
-               return true;
-            }
+            return true;
          }
+         if (!parentURL.equals(myURL))
+         {
+            return true;
+         }
       }
+      
       return false;
    }
-
-   @Override
-   protected void initialise()
-   {
-      ClassLoader loader = getPool().getClassLoader();
-      if (loader instanceof URLClassLoader == false)
-      {
-         throw new IllegalStateException("Not a URLClassLoader " + loader);
-      }
-      URL[] loaderUrls = ((URLClassLoader)loader).getURLs();
-      urls = new String[loaderUrls.length];
-      for (int i = 0 ; i < loaderUrls.length ; i++)
-      {
-         urls[i] = loaderUrls[i].toString();
-      }
-   }
 }

Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePluginFactory.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePluginFactory.java	2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePluginFactory.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -29,7 +29,7 @@
 public class URLClassLoaderIsLocalResourcePluginFactory implements IsLocalResourcePluginFactory
 {
 
-   public IsLocalResourcePlugin create(DelegatingClassPool pool)
+   public IsLocalResourcePlugin create(BaseClassPool pool)
    {
       return new URLClassLoaderIsLocalResourcePlugin(pool);
    }

Modified: projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/ClassPoolTest.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/ClassPoolTest.java	2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/ClassPoolTest.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -27,6 +27,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import javassist.ClassPool;
+
 import org.jboss.aop.classpool.AOPClassPoolRepository;
 import org.jboss.aop.classpool.ClassPoolDomain;
 import org.jboss.aop.classpool.DelegatingClassPool;
@@ -102,7 +104,7 @@
       //Once all the classes in the loader have been loaded, it seems to clear the URLs. Work around this 
       //by recreating the loader since we need the urls in the URLClassLoaderIsLocalResourcePlugin
       loaders.add(new URLClassLoader(urls));
-      return new DelegatingClassPool(domain, loader, AOPClassPoolRepository.getInstance(), false);
+      return new DelegatingClassPool(domain, loader, ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
    }
 
    @Override

Modified: projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/IsLocalResourcePluginFactoryTestCase.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/IsLocalResourcePluginFactoryTestCase.java	2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/IsLocalResourcePluginFactoryTestCase.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -25,6 +25,8 @@
 import java.net.URL;
 import java.net.URLClassLoader;
 
+import javassist.ClassPool;
+
 import org.jboss.aop.classpool.AOPClassPoolRepository;
 import org.jboss.aop.classpool.ClassPoolDomain;
 import org.jboss.aop.classpool.DefaultClassLoaderIsLocalResourcePlugin;
@@ -76,37 +78,37 @@
 
    public void testDefaultClassLoader() 
    {
-      DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new DefaultClassLoader(), AOPClassPoolRepository.getInstance(), false);
+      DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new DefaultClassLoader(), ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
       assertFactoryAndPlugin(pool, DefaultClassLoaderIsLocalResourcePluginFactory.class, DefaultClassLoaderIsLocalResourcePlugin.class);
    }
    
    public void testURLClassLoaderDirect()
    {
-      DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new URLClassLoader(URLS), AOPClassPoolRepository.getInstance(), false);
+      DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new URLClassLoader(URLS), ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
       assertFactoryAndPlugin(pool, URLClassLoaderIsLocalResourcePluginFactory.class, URLClassLoaderIsLocalResourcePlugin.class);
    }
 
    public void testURLClassLoaderSubClass()
    {
-      DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new URLCLassLoaderSubClass(URLS), AOPClassPoolRepository.getInstance(), false);
+      DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new URLCLassLoaderSubClass(URLS), ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
       assertFactoryAndPlugin(pool, URLClassLoaderIsLocalResourcePluginFactory.class, URLClassLoaderIsLocalResourcePlugin.class);
    }
 
    public void testTranslatableClassLoaderImplementation()
    {
-      DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new TranslatableImplementation(), AOPClassPoolRepository.getInstance(), false);
+      DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new TranslatableImplementation(), ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
       assertFactoryAndPlugin(pool, TranslatableClassLoaderIsLocalResourcePluginFactory.class, TranslatableClassLoaderIsLocalResourcePlugin.class);
    }
    
    public void testTranslatableClassLoaderImplementationAndURLClassLoaderSubClass()
    {
-      DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new TranslatableImplementationAndURLClassLoaderSubClass(URLS), AOPClassPoolRepository.getInstance(), false);
+      DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new TranslatableImplementationAndURLClassLoaderSubClass(URLS), ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
       assertFactoryAndPlugin(pool, TranslatableClassLoaderIsLocalResourcePluginFactory.class, TranslatableClassLoaderIsLocalResourcePlugin.class);
    }
    
    public void testTranslatable2ClassLoaderImplementationAndURLClassLoaderSubClass()
    {
-      DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new Translatable2ImplementationAndURLClassLoaderSubClass(URLS), AOPClassPoolRepository.getInstance(), false);
+      DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new Translatable2ImplementationAndURLClassLoaderSubClass(URLS), ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
       assertFactoryAndPlugin(pool, TranslatableClassLoaderIsLocalResourcePluginFactory.class, TranslatableClassLoaderIsLocalResourcePlugin.class);
    }
    

Modified: projects/aop/trunk/asintegration-jmx/.classpath
===================================================================
--- projects/aop/trunk/asintegration-jmx/.classpath	2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-jmx/.classpath	2008-10-30 17:43:34 UTC (rev 80274)
@@ -1,62 +1,64 @@
+<?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="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-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="src" path="/jboss-aop-asintegration-core"/>
-  <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.0.CR3/jboss-classloader-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloader/2.0.0.CR3/jboss-classloader-2.0.0.CR3-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.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.0.CR2/jboss-deployers-client-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.0.CR2/jboss-deployers-client-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2-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.CR1/jboss-managed-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-managed/2.0.0.CR1/jboss-managed-2.0.0.CR1-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1-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.0.CR1/jboss-reflect-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1-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/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1-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/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 excluding="org/jboss/test/aop/classpool/ucl/support/a/|org/jboss/test/aop/classpool/ucl/support/b/|org/jboss/test/aop/classpool/ucl/support/c/" kind="src" path="src/tests"/>
+	<classpathentry kind="src" path="src/main"/>
+	<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-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="src" path="/jboss-aop-asintegration-core"/>
+	<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.0.CR3/jboss-classloader-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloader/2.0.0.CR3/jboss-classloader-2.0.0.CR3-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.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.0.CR2/jboss-deployers-client-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.0.CR2/jboss-deployers-client-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2-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.CR1/jboss-managed-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-managed/2.0.0.CR1/jboss-managed-2.0.0.CR1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1-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.0.CR1/jboss-reflect-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1-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/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1-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/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-jmx/pom.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/pom.xml	2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-jmx/pom.xml	2008-10-30 17:43:34 UTC (rev 80274)
@@ -43,6 +43,13 @@
             </goals>
           </execution>
         </executions>
+        <configuration>
+          <excludes>
+            <exclude>org/jboss/test/aop/classpool/ucl/support/a/A.class</exclude>
+            <exclude>org/jboss/test/aop/classpool/ucl/support/b/B.class</exclude>
+            <exclude>org/jboss/test/aop/classpool/ucl/support/c/C.class</exclude>
+          </excludes>
+        </configuration>
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
@@ -54,6 +61,91 @@
           <skip>true</skip>
         </configuration>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>2.2-beta-2</version>
+        <executions>
+          <execution>
+            <id>test-classpool-a1</id>
+            <phase>package</phase>
+            <goals>
+              <goal>attached</goal>
+            </goals>
+            <configuration>
+              <descriptors>
+                <descriptor>src/assembly/test-classpool-a1.xml</descriptor>
+              </descriptors>
+              <finalName>${artifactId}</finalName>
+            </configuration>
+          </execution>
+          <execution>
+            <id>test-classpool-a2</id>
+            <phase>package</phase>
+            <goals>
+              <goal>attached</goal>
+            </goals>
+            <configuration>
+              <descriptors>
+                <descriptor>src/assembly/test-classpool-a2.xml</descriptor>
+              </descriptors>
+              <finalName>${artifactId}</finalName>
+            </configuration>
+          </execution>
+          <execution>
+            <id>test-classpool-b1</id>
+            <phase>package</phase>
+            <goals>
+              <goal>attached</goal>
+            </goals>
+            <configuration>
+              <descriptors>
+                <descriptor>src/assembly/test-classpool-b1.xml</descriptor>
+              </descriptors>
+              <finalName>${artifactId}</finalName>
+            </configuration>
+          </execution>
+          <execution>
+            <id>test-classpool-b2</id>
+            <phase>package</phase>
+            <goals>
+              <goal>attached</goal>
+            </goals>
+            <configuration>
+              <descriptors>
+                <descriptor>src/assembly/test-classpool-b2.xml</descriptor>
+              </descriptors>
+              <finalName>${artifactId}</finalName>
+            </configuration>
+          </execution>
+          <execution>
+            <id>test-classpool-c1</id>
+            <phase>package</phase>
+            <goals>
+              <goal>attached</goal>
+            </goals>
+            <configuration>
+              <descriptors>
+                <descriptor>src/assembly/test-classpool-c1.xml</descriptor>
+              </descriptors>
+              <finalName>${artifactId}</finalName>
+            </configuration>
+          </execution>
+          <execution>
+            <id>test-classpool-c2</id>
+            <phase>package</phase>
+            <goals>
+              <goal>attached</goal>
+            </goals>
+            <configuration>
+              <descriptors>
+                <descriptor>src/assembly/test-classpool-c2.xml</descriptor>
+              </descriptors>
+              <finalName>${artifactId}</finalName>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
   

Added: projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a1.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a1.xml	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a1.xml	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,16 @@
+<assembly>
+  <id>test-classpool-a1</id>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <fileSets>
+    <fileSet>
+      <directory>target/test-classes</directory>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>org/jboss/test/aop/classpool/ucl/support/a/A.class</include>
+      </includes>
+    </fileSet>
+  </fileSets>
+</assembly>
\ No newline at end of file

Added: projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a2.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a2.xml	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a2.xml	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,16 @@
+<assembly>
+  <id>test-classpool-a2</id>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <fileSets>
+    <fileSet>
+      <directory>target/test-classes</directory>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>org/jboss/test/aop/classpool/ucl/support/a/A.class</include>
+      </includes>
+    </fileSet>
+  </fileSets>
+</assembly>
\ No newline at end of file

Added: projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b1.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b1.xml	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b1.xml	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,16 @@
+<assembly>
+  <id>test-classpool-b1</id>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <fileSets>
+    <fileSet>
+      <directory>target/test-classes</directory>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>org/jboss/test/aop/classpool/ucl/support/b/B.class</include>
+      </includes>
+    </fileSet>
+  </fileSets>
+</assembly>
\ No newline at end of file

Added: projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b2.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b2.xml	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b2.xml	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,16 @@
+<assembly>
+  <id>test-classpool-b2</id>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <fileSets>
+    <fileSet>
+      <directory>target/test-classes</directory>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>org/jboss/test/aop/classpool/ucl/support/b/B.class</include>
+      </includes>
+    </fileSet>
+  </fileSets>
+</assembly>
\ No newline at end of file

Added: projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c1.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c1.xml	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c1.xml	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,16 @@
+<assembly>
+  <id>test-classpool-c1</id>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <fileSets>
+    <fileSet>
+      <directory>target/test-classes</directory>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>org/jboss/test/aop/classpool/ucl/support/c/C.class</include>
+      </includes>
+    </fileSet>
+  </fileSets>
+</assembly>
\ No newline at end of file

Added: projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c2.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c2.xml	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c2.xml	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,16 @@
+<assembly>
+  <id>test-classpool-c2</id>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <fileSets>
+    <fileSet>
+      <directory>target/test-classes</directory>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>org/jboss/test/aop/classpool/ucl/support/c/C.class</include>
+      </includes>
+    </fileSet>
+  </fileSets>
+</assembly>
\ No newline at end of file

Added: projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossClassPathHelper.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossClassPathHelper.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossClassPathHelper.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,41 @@
+/*
+* 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.ucl;
+
+import java.io.File;
+import java.net.URL;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class JBossClassPathHelper
+{
+   File tmpDir;
+   URL tmpURL;
+   public JBossClassPathHelper(File tmpDir, URL tmpURL)
+   {
+      this.tmpDir = tmpDir;
+      this.tmpURL = tmpURL;
+   }
+}

Added: projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclClassPoolFactory.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclClassPoolFactory.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclClassPoolFactory.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,165 @@
+/*
+* 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.ucl;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPool;
+import javassist.scopedpool.ScopedClassPoolFactory;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.aop.classpool.AbstractJBossClassPoolFactory;
+import org.jboss.aop.classpool.ClassPoolDomain;
+import org.jboss.aop.classpool.ClassPoolDomainRegistry;
+import org.jboss.aop.classpool.NonDelegatingClassPool;
+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: 1.1 $
+ */
+public class JBossUclClassPoolFactory extends AbstractJBossClassPoolFactory implements ScopedClassPoolFactory
+{
+   private ClassPoolDomain mainDomain;
+   protected File tmpClassesDir;
+
+   public JBossUclClassPoolFactory(File tmpClassesDir) throws IOException
+   {
+      this.tmpClassesDir = tmpClassesDir;
+   }
+   
+   public synchronized ScopedClassPool 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 JBossUclDelegatingClassPool(domain, cl, parent, repository, tempdir, tmpCP);
+      }
+      
+      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)
+         {
+            
+            domain = new UclClassPoolDomain("Scoped" + System.identityHashCode(loaderRepository), mainDomain);
+            boolean parentFirst = ((HeirarchicalLoaderRepository3)loaderRepository).getUseParentFirst();
+            domain.setParentFirst(parentFirst);
+         }
+         else
+         {
+            if (mainDomain == null)
+            {
+               domain = new UclClassPoolDomain(ServerConstants.DEFAULT_LOADER_NAME, null);
+               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);
+      }
+   }
+
+}

Added: projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclDelegatingClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclDelegatingClassPool.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclDelegatingClassPool.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,104 @@
+/*
+* 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.ucl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.net.URL;
+import java.security.ProtectionDomain;
+
+import javassist.CannotCompileException;
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.aop.classpool.ClassPoolDomain;
+import org.jboss.aop.classpool.DelegatingClassPool;
+import org.jboss.mx.loading.RepositoryClassLoader;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class JBossUclDelegatingClassPool extends DelegatingClassPool
+{
+   File tmpDir;
+   URL tmpURL;
+   // For loadClass tmpdir creation for UCL
+   protected final Object tmplock = new Object();
+
+   public JBossUclDelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent, 
+         ScopedClassPoolRepository repository, File tmpDir, URL tmpURL)
+   {
+      super(domain, cl, parent, repository);
+      this.tmpDir = tmpDir;
+      this.tmpURL = tmpURL;
+   }
+
+   public Class<?> toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain)
+   throws CannotCompileException
+   {
+      lockInCache(cc);
+      if (getClassLoader() == null || tmpDir == null)
+      {
+         return super.toClass(cc, loader, domain);
+      }
+      Class<?> dynClass = null;
+      try
+      {
+         File classFile = null;
+         String classFileName = getResourceName(cc.getName());
+         // Write the clas file to the tmpdir
+         synchronized (tmplock)
+         {
+            classFile = new File(tmpDir, classFileName);
+            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) getClassLoader();
+         rcl.clearClassBlackList();
+         rcl.clearResourceBlackList();
+
+         // Now load the class through the cl
+         dynClass = getClassLoader().loadClass(cc.getName());
+      }
+      catch (Exception ex)
+      {
+         ClassFormatError cfe = new ClassFormatError("Failed to load dyn class: " + cc.getName());
+         cfe.initCause(ex);
+         throw cfe;
+      }
+
+      return dynClass;
+   }
+
+}

Added: projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/UclClassPoolDomain.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/UclClassPoolDomain.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/UclClassPoolDomain.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,38 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.aop.classpool.ucl;
+
+import org.jboss.aop.classpool.ClassPoolDomain;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class UclClassPoolDomain extends ClassPoolDomain
+{
+   public UclClassPoolDomain(String domainName, ClassPoolDomain parent)
+   {
+      // FIXME UclClassPoolDomain constructor
+      super(domainName, parent);
+   }
+}

Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/ParentLastURLClassLoader.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/ParentLastURLClassLoader.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/ParentLastURLClassLoader.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,82 @@
+/*
+* 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.test.aop.classpool.ucl.support;
+
+import java.net.URL;
+import java.net.URLClassLoader;
+
+/**
+ * An attempt to emulate the web classloader with parent last search order in AS
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ParentLastURLClassLoader extends URLClassLoader
+{
+   ClassLoader parent;
+   URLClassLoader delegate;
+
+   public ParentLastURLClassLoader(URL[] urls, ClassLoader parent)
+   {
+      super(urls, parent);
+      delegate = new URLClassLoader(urls);
+      this.parent = parent;
+   }
+
+   @Override
+   public URL findResource(String name)
+   {
+      URL url = delegate.findResource(name);
+      if (url == null && parent instanceof URLClassLoader)
+      {
+         url = ((URLClassLoader)parent).findResource(name);
+      }
+      return url;
+   }
+
+   @Override
+   public URL getResource(String name)
+   {
+      URL url = delegate.getResource(name);
+      if (url == null)
+      {
+         url = parent.getResource(name);
+      }
+      return url;
+   }
+
+   @Override
+   public Class<?> loadClass(String name) throws ClassNotFoundException
+   {
+      try
+      {
+         return delegate.loadClass(name);
+      }
+      catch(ClassNotFoundException e)
+      {
+      }
+      return parent.loadClass(name);
+   }
+
+   
+   
+}

Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/a/A.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/a/A.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/a/A.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,32 @@
+/*
+* 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.test.aop.classpool.ucl.support.a;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class A
+{
+
+}

Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/b/B.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/b/B.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/b/B.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,32 @@
+/*
+* 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.test.aop.classpool.ucl.support.b;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class B
+{
+
+}

Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/c/C.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/c/C.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/c/C.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,32 @@
+/*
+* 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.test.aop.classpool.ucl.support.c;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class C
+{
+
+}

Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassLoaderSanityTestCase.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassLoaderSanityTestCase.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassLoaderSanityTestCase.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,328 @@
+/*
+* 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.test.aop.classpool.ucl.test;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * This is here to figure out how the UCLs work, and we will duplicate this
+ * in the classpool test
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class UclClassLoaderSanityTestCase extends UclClassPoolTest
+{
+   public UclClassLoaderSanityTestCase(String name)
+   {
+      super(name);
+   }
+
+   public static Test suite()
+   {
+      return new TestSuite(UclClassLoaderSanityTestCase.class);
+   }
+
+
+   public void testGlobalScope() throws Exception
+   {
+      ClassLoader clA = null;
+      ClassLoader clB = null;
+      try
+      {
+         clA = createGlobalClassLoader(JAR_A_1);
+         clB = createGlobalClassLoader(JAR_B_1);
+         try
+         {
+            Class<?> aFromA = clA.loadClass(CLASS_A);
+            assertNotNull(aFromA);
+            Class<?> bFromA = clA.loadClass(CLASS_B);
+            assertNotNull(bFromA);
+            Class<?> aFromB = clB.loadClass(CLASS_A);
+            Class<?> bFromB = clB.loadClass(CLASS_B);
+            assertSame(aFromA, aFromB);
+            assertSame(bFromA, bFromB);
+            assertSame(clA, aFromA.getClassLoader());
+            assertSame(clB, bFromB.getClassLoader());
+         }
+         finally
+         {
+            removeClassLoaderFromRepository(clB);
+         }
+         Class<?> aFromA = clA.loadClass(CLASS_A);
+         assertNotNull(aFromA);
+
+         assertCannotLoadClass(clA, CLASS_B);
+      }
+      finally
+      {
+         removeClassLoaderFromRepository(clA);
+      }
+      assertCannotLoadClass(getGlobalRepository(), CLASS_A);
+   }
+   
+   public void testChildDomain() throws Exception
+   {
+      ClassLoader clA = null;
+      ClassLoader clB = null;
+      ClassLoader clC = null;
+      try
+      {
+         clA = createGlobalClassLoader(JAR_A_1);
+         clB = createGlobalClassLoader(JAR_B_1);
+         clC = createChildClassLoader(JAR_C_1, false);
+
+         Class<?> aFromA = clA.loadClass(CLASS_A);
+         assertNotNull(aFromA);
+         Class<?> bFromB = clB.loadClass(CLASS_B);
+         assertNotNull(bFromB);
+         Class<?> cFromC = clC.loadClass(CLASS_C);
+         assertNotNull(cFromC);
+         Class<?> aFromC = clC.loadClass(CLASS_A);
+         assertNotNull(aFromC);
+         Class<?> bFromC = clC.loadClass(CLASS_B);
+         assertNotNull(bFromC);
+         
+         assertSame(aFromA, aFromC);
+         assertSame(bFromB, bFromC);
+         assertSame(clA, aFromA.getClassLoader());
+         assertSame(clB, bFromB.getClassLoader());
+         assertSame(clC, cFromC.getClassLoader());
+         
+         assertCannotLoadClass(clA, CLASS_C);
+         assertCannotLoadClass(clB, CLASS_C);
+      }
+      finally
+      {
+         removeClassLoaderFromRepository(clA);
+         removeClassLoaderFromRepository(clB);
+      }
+   }
+   
+   public void testSiblingDomains() throws Exception
+   {
+      ClassLoader clA = createChildClassLoader(JAR_A_1, true);
+      ClassLoader clB = createChildClassLoader(JAR_B_1, false);
+
+      Class<?> clazzA = clA.loadClass(CLASS_A);
+      assertSame(clA, clazzA.getClassLoader());
+      Class<?> clazzB = clB.loadClass(CLASS_B);
+      assertSame(clB, clazzB.getClassLoader());
+      assertCannotLoadClass(clA, CLASS_B);
+      assertCannotLoadClass(clB, CLASS_A);
+   }
+
+   public void testChildWithNewClassesInParent() throws Exception
+   {
+      ClassLoader clGlobal = null;
+      ClassLoader clScoped = null;
+      try
+      {
+         clScoped = createChildClassLoader(JAR_B_1, true);
+         assertCannotLoadClass(clScoped, CLASS_A);
+         
+         clGlobal = createGlobalClassLoader(JAR_A_1);
+         Class<?> aFromChild = clScoped.loadClass(CLASS_A);
+         assertNotNull(aFromChild);
+         Class<?> aFromParent = clGlobal.loadClass(CLASS_A);
+         assertNotNull(aFromParent);
+         assertSame(aFromChild, aFromParent);
+         assertSame(clGlobal, aFromParent.getClassLoader());
+      }
+      finally
+      {
+         removeClassLoaderFromRepository(clGlobal);
+      }
+   }
+   
+   public void testChildOverrideWithParentDelegation() throws Exception
+   {
+      ClassLoader clGlobal = null;
+      try
+      {
+         clGlobal = createGlobalClassLoader(JAR_A_1);
+         ClassLoader clScoped = createChildClassLoader(JAR_A_2, true);
+         Class<?> aFromParent = clGlobal.loadClass(CLASS_A);
+         assertNotNull(aFromParent);
+         Class<?> aFromChild = clScoped.loadClass(CLASS_A);
+         assertNotNull(aFromChild);
+         assertSame(aFromParent, aFromChild);
+         assertSame(clGlobal, aFromParent.getClassLoader());
+      }
+      finally
+      {
+         removeClassLoaderFromRepository(clGlobal);
+      }
+   }
+
+   public void testChildOverrideWithNoParentDelegation() throws Exception
+   {
+      ClassLoader clGlobal = null;
+      try
+      {
+         clGlobal = createGlobalClassLoader(JAR_A_1);
+         ClassLoader clScoped = createChildClassLoader(JAR_A_2, false);
+         Class<?> aFromParent = clGlobal.loadClass(CLASS_A);
+         assertNotNull(aFromParent);
+         Class<?> aFromChild = clScoped.loadClass(CLASS_A);
+         assertNotNull(aFromChild);
+         assertNotSame(aFromParent, aFromChild);
+         assertSame(clGlobal, aFromParent.getClassLoader());
+         assertSame(clScoped, aFromChild.getClassLoader());
+      }
+      finally
+      {
+         removeClassLoaderFromRepository(clGlobal);
+      }
+   }
+   
+   public void testURLChildOfGlobalUcl() throws Exception
+   {
+      ClassLoader clGlobal = null;
+      try
+      {
+         clGlobal = createGlobalClassLoader(JAR_A_1);
+         ClassLoader clChildA = createChildURLClassLoader(clGlobal, JAR_B_1);
+         
+         Class<?> aFromA = clChildA.loadClass(CLASS_A);
+         assertSame(clGlobal, aFromA.getClassLoader());
+         Class<?> bFromA = clChildA.loadClass(CLASS_B);
+         assertSame(clChildA, bFromA.getClassLoader());
+         
+         ClassLoader clChildB = createChildURLClassLoader(clGlobal, JAR_A_2);
+         Class<?> aFromB = clChildB.loadClass(CLASS_A);
+         assertSame(clGlobal, aFromB.getClassLoader());
+      }
+      finally
+      {
+         removeClassLoaderFromRepository(clGlobal);
+      }
+   }
+   
+   public void testUndeploySibling() throws Exception
+   {
+      ClassLoader clA = null;
+      ClassLoader clB = null;
+      try
+      {
+         try
+         {
+            clA = createGlobalClassLoader(JAR_A_1);
+            assertCannotLoadClass(clA, CLASS_B);
+            
+            clB = createGlobalClassLoader(JAR_B_1);
+            Class<?> bFromA = clA.loadClass(CLASS_B);
+            assertSame(clB, bFromA.getClassLoader());
+         }
+         finally
+         {
+            removeClassLoaderFromRepository(clB);
+         }
+         assertCannotLoadClass(clA, CLASS_B);
+      }
+      finally
+      {
+         removeClassLoaderFromRepository(clA);
+      }
+   }
+
+   
+//   public void testUndeployParentDomainClassLoader() throws Exception
+//   {
+//      ClassLoader globalA = null;
+//      ClassLoader globalB = null;
+//      ClassLoader child = null;
+//      try
+//      {
+//         try
+//         {
+//            globalA = createGlobalClassLoader(JAR_A_1);
+//            assertCannotLoadClass(globalA, CLASS_B);
+//            
+//            child = createChildClassLoader(JAR_C_1, true);
+//            assertCannotLoadClass(child, CLASS_B);
+//            
+//            globalB = createGlobalClassLoader(JAR_B_1);
+//            Class<?> bFromChild = child.loadClass(CLASS_B);
+//            Class<?> bFromA = globalA.loadClass(CLASS_B);
+//            assertSame(globalB, bFromA.getClassLoader());
+//            assertSame(bFromA, bFromChild);
+//         }
+//         finally
+//         {
+//            removeClassLoaderFromRepository(globalB);
+//         }
+//         assertCannotLoadClass(child, CLASS_B);
+//      }
+//      finally
+//      {
+//         removeClassLoaderFromRepository(globalA);
+//      }
+//   }
+   
+   public void testUclWithParentClassLoader() throws Exception
+   {
+      ClassLoader parent = createChildURLClassLoader(null, JAR_B_1);
+      ClassLoader global = null;
+      try
+      {
+         global = createGlobalClassLoaderWithParent(JAR_A_1, parent);
+         Class<?> aFromGlobal = global.loadClass(CLASS_A);
+         assertSame(global, aFromGlobal.getClassLoader());
+         Class<?> bFromGlobal = global.loadClass(CLASS_B);
+         assertSame(parent, bFromGlobal.getClassLoader());
+         Class<?> bFromParent = parent.loadClass(CLASS_B);
+         assertSame(bFromGlobal, bFromParent);
+      }
+      finally
+      {
+         removeClassLoaderFromRepository(global);
+      }
+   }
+
+   
+   public void testUclWithParentClassLoaderAndSameClassInDomain() throws Exception
+   {
+      ClassLoader parent = createChildURLClassLoader(null, JAR_B_1);
+      ClassLoader globalA = null;
+      ClassLoader globalB = null;
+      try
+      {
+         globalA = createGlobalClassLoaderWithParent(JAR_A_1, parent);
+         Class<?> aFromGlobal = globalA.loadClass(CLASS_A);
+         assertSame(globalA, aFromGlobal.getClassLoader());
+
+         globalB = createGlobalClassLoader(JAR_B_2);
+         Class<?> bFromGlobalA = globalA.loadClass(CLASS_B);
+         assertSame(globalB, bFromGlobalA.getClassLoader());
+         Class<?> bFromParent = parent.loadClass(CLASS_B);
+         assertSame(parent, bFromParent.getClassLoader());
+         assertNotSame(bFromGlobalA, bFromParent);
+      }
+      finally
+      {
+         removeClassLoaderFromRepository(globalA);
+         removeClassLoaderFromRepository(globalB);
+      }
+   }
+}

Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,275 @@
+/*
+* 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.test.aop.classpool.ucl.test;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.HashSet;
+import java.util.Set;
+
+import javassist.ClassPool;
+
+import javax.management.MBeanServer;
+import javax.management.MBeanServerFactory;
+import javax.management.ObjectName;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.classpool.ucl.JBossUclClassPoolFactory;
+import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.mx.loading.RepositoryClassLoader;
+import org.jboss.mx.loading.UnifiedClassLoader3;
+import org.jboss.mx.util.MBeanServerLocator;
+import org.jboss.test.AbstractTestCaseWithSetup;
+import org.jboss.test.AbstractTestDelegate;
+import org.jboss.test.aop.classpool.ucl.support.ParentLastURLClassLoader;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class UclClassPoolTest extends AbstractTestCaseWithSetup
+{
+   public final static URL JAR_A_1 = getURLRelativeToProjectRoot("target/jboss-aop-asintegration-jmx-test-classpool-a1.jar");
+   public final static URL JAR_A_2 = getURLRelativeToProjectRoot("target/jboss-aop-asintegration-jmx-test-classpool-a2.jar");
+   public final static URL JAR_B_1 = getURLRelativeToProjectRoot("target/jboss-aop-asintegration-jmx-test-classpool-b1.jar");
+   public final static URL JAR_B_2 = getURLRelativeToProjectRoot("target/jboss-aop-asintegration-jmx-test-classpool-b2.jar");
+   public final static URL JAR_C_1 = getURLRelativeToProjectRoot("target/jboss-aop-asintegration-jmx-test-classpool-c1.jar");
+   public final static URL JAR_C_2 = getURLRelativeToProjectRoot("target/jboss-aop-asintegration-jmx-test-classpool-c2.jar");
+
+   public final static String CLASS_A = "org.jboss.test.aop.classpool.ucl.support.a.A";
+   public final static String CLASS_B = "org.jboss.test.aop.classpool.ucl.support.b.B";
+   public final static String CLASS_C = "org.jboss.test.aop.classpool.ucl.support.c.C";
+
+   private MBeanServer server; 
+   private LoaderRepository globalRepository;
+   //Keep a strong reference to the classloaders so that they are not garbage collected
+
+   final static Set<ClassLoader> registeredClassLoaders = new HashSet<ClassLoader>();
+   
+   final static ObjectName MAIN_LOADER_REPOSITORY_OBJECT_NAME;
+   static
+   {
+      try
+      {
+         MAIN_LOADER_REPOSITORY_OBJECT_NAME = new ObjectName("JMImplementation:name=Default,service=LoaderRepository");
+         AspectManager.setClassPoolFactory(new JBossUclClassPoolFactory(new File(".")));
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+
+   
+   public UclClassPoolTest(String name)
+   {
+      super(name);
+      System.setProperty("javax.management.builder.initial", "org.jboss.mx.server.MBeanServerBuilderImpl");
+      server = MBeanServerFactory.createMBeanServer();
+      MBeanServerLocator.setJBoss(server);
+      try
+      {
+         globalRepository = (LoaderRepository)server.invoke(MAIN_LOADER_REPOSITORY_OBJECT_NAME, "getInstance", new Object[0], new String[0]);
+      }
+      catch(Exception e)
+      {
+         
+      }
+   }
+
+   public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
+   {
+      return new UclClassPoolTestDelegate(clazz);
+   }
+   
+   protected static URL getURLRelativeToProjectRoot(String relativePath)
+   {
+      try
+      {
+         URL url = UclClassPoolTest.class.getProtectionDomain().getCodeSource().getLocation();
+         String location = url.toString();
+         int index = location.lastIndexOf("/asintegration-jmx/") + "/asintegration-jmx/".length();
+         location = location.substring(0, index);
+         
+         location = location + relativePath;
+         return new URL(location);
+      }
+      catch (MalformedURLException e)
+      {
+         // AutoGenerated
+         throw new RuntimeException(e);
+      }
+   }
+
+
+   public MBeanServer getServer()
+   {
+      return server;
+   }
+
+
+   public LoaderRepository getGlobalRepository()
+   {
+      return globalRepository;
+   }
+   
+   protected ClassLoader createGlobalClassLoader(URL url) throws Exception
+   {
+      ClassLoader cl = globalRepository.newClassLoader(url, true);
+      registeredClassLoaders.add(cl);
+      return cl;
+   }
+   
+   protected ClassPool createGlobalClassPool(URL url) throws Exception
+   {
+      ClassLoader loader = createGlobalClassLoader(url);
+      return AspectManager.instance().registerClassLoader(loader);
+   }
+   
+   protected ClassLoader createGlobalClassLoaderWithParent(URL url, ClassLoader parent) throws Exception
+   {
+      ClassLoader cl = new UnifiedClassLoader3(url, null, parent, globalRepository);
+      globalRepository.addClassLoader(cl);
+      registeredClassLoaders.add(cl);
+      return cl;
+   }
+
+   protected ClassPool createGlobalClassPoolWithParent(URL url, ClassPool parent) throws Exception
+   {
+      ClassLoader parentLoader = parent != null ? parent.getClassLoader() : null;
+      ClassLoader loader = createGlobalClassLoaderWithParent(url, parentLoader);
+      return AspectManager.instance().registerClassLoader(loader);
+   }
+   
+   protected void removeClassLoaderFromRepository(ClassLoader cl)
+   {
+      if (cl != null)
+      {
+         if (cl instanceof RepositoryClassLoader)
+         {
+            LoaderRepository repository = ((RepositoryClassLoader)cl).getLoaderRepository();
+            repository.removeClassLoader(cl);
+         }
+      }
+   }
+   
+   protected void removeClassPool(ClassPool pool)
+   {
+      if (pool != null)
+      {
+         ClassLoader cl = pool.getClassLoader();
+         if (cl != null)
+         {
+            removeClassLoaderFromRepository(cl);
+            AspectManager.instance().unregisterClassLoader(cl);
+            registeredClassLoaders.remove(cl);
+         }
+      }
+   }
+   
+   protected void assertCannotLoadClass(ClassLoader cl, String className)
+   {
+      try
+      {
+         cl.loadClass(className);
+         fail("Should not have been able to load " + className);
+      }
+      catch(Exception expected)
+      {
+      }
+   }
+   
+   protected void assertCannotLoadCtClass(ClassPool pool, String className)
+   {
+      try
+      {
+         pool.get(className);
+      }
+      catch(Exception e)
+      {
+      }
+   }
+   
+   protected void assertCannotLoadClass(LoaderRepository repository, String className)
+   {
+      try
+      {
+         repository.loadClass(className);
+         fail("Should not have been able to load " + className);
+      }
+      catch(Exception expected)
+      {
+      }
+   }
+   
+   protected ClassLoader createChildClassLoader(URL url, boolean parentFirst) throws Exception
+   {
+      HeirarchicalLoaderRepository3 repository = new HeirarchicalLoaderRepository3(getServer(), MAIN_LOADER_REPOSITORY_OBJECT_NAME);
+      repository.setUseParentFirst(parentFirst);
+      ClassLoader cl = repository.newClassLoader(url, true);
+      registeredClassLoaders.add(cl);
+      return cl;
+   }
+   
+   protected ClassPool createChildClassPool(URL url, boolean parentFirst) throws Exception
+   {
+      ClassLoader loader = createChildClassLoader(url, parentFirst);
+      return AspectManager.instance().registerClassLoader(loader);
+   }
+   
+   protected ClassLoader createChildURLClassLoader(ClassLoader parent, URL url)
+   {
+      ClassLoader cl = new URLClassLoader(new URL[] {url}, parent);
+      registeredClassLoaders.add(cl);
+      return cl;
+   }
+   
+   protected ClassLoader createChildURLClassLoaderParentLast(ClassLoader parent, URL url)
+   {
+      ClassLoader cl = new ParentLastURLClassLoader(new URL[] {url}, parent);
+      registeredClassLoaders.add(cl);
+      return cl;
+   }
+   
+   protected ClassPool createChildURLClassPool(ClassPool parent, URL url)
+   {
+      ClassLoader parentLoader = parent != null ? parent.getClassLoader() : null;
+      ClassLoader cl = createChildURLClassLoader(parentLoader, url);
+      registeredClassLoaders.add(cl);
+      return AspectManager.instance().registerClassLoader(cl);
+   }   
+   
+   protected ClassPool createChildURLClassPoolParentLast(ClassPool parent, URL url)
+   {
+      ClassLoader parentLoader = parent != null ? parent.getClassLoader() : null;
+      ClassLoader cl = createChildURLClassLoaderParentLast(parentLoader, url);
+      registeredClassLoaders.add(cl);
+      ClassPool pool = AspectManager.instance().registerClassLoader(cl);
+      pool.childFirstLookup = true;
+      return pool;
+   }   
+
+}

Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestDelegate.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestDelegate.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestDelegate.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -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.test.aop.classpool.ucl.test;
+
+import org.jboss.test.AbstractTestDelegate;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class UclClassPoolTestDelegate extends AbstractTestDelegate
+{
+
+   public UclClassPoolTestDelegate(Class<?> clazz)
+   {
+      super(clazz);
+   }
+
+}

Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestSuite.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestSuite.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestSuite.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,51 @@
+/*
+* 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.test.aop.classpool.ucl.test;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class UclClassPoolTestSuite extends TestSuite
+{
+   public static void main(String[] args)
+   {
+      TestRunner.run(suite());
+   }
+
+   public static Test suite()
+   {
+      TestSuite suite = new TestSuite("UclClassPool All Tests");
+      
+      suite.addTest(UclClassLoaderSanityTestCase.suite());
+      suite.addTest(UclDelegatingClassPoolTestCase.suite());
+      
+
+      return suite;
+   }
+
+}

Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclDelegatingClassPoolTestCase.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclDelegatingClassPoolTestCase.java	                        (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclDelegatingClassPoolTestCase.java	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,605 @@
+/*
+* 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.test.aop.classpool.ucl.test;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class UclDelegatingClassPoolTestCase extends UclClassPoolTest
+{
+
+   public UclDelegatingClassPoolTestCase(String name)
+   {
+      // FIXME SimpleUclDelegatingClassPoolTestCase constructor
+      super(name);
+   }
+
+   public static Test suite()
+   {
+      return new TestSuite(UclDelegatingClassPoolTestCase.class);
+   }
+
+   
+   public void testGlobalScope() throws Exception
+   {
+      ClassPool globalA = null;
+      ClassPool globalB = null;
+      try
+      {
+         try
+         {
+            globalA = createGlobalClassPool(JAR_A_1);
+            globalB = createGlobalClassPool(JAR_B_1);
+   
+            //Call twice to ensure that we hit the cache as well as creating the CtClases
+            accessGlobalScope(globalA, globalB);
+            accessGlobalScope(globalA, globalB);
+         }
+         finally
+         {
+            removeClassPool(globalA);
+         }
+         assertCannotLoadCtClass(globalB, CLASS_A);
+      }
+      finally
+      {
+         removeClassPool(globalB);
+      }
+   }
+   
+   private void accessGlobalScope(ClassPool globalA, ClassPool globalB) throws Exception
+   {
+      CtClass aFromA = globalA.get(CLASS_A);
+      assertNotNull(aFromA);
+      assertEquals(CLASS_A, aFromA.getName());
+      CtClass bFromA = globalA.get(CLASS_B);
+      assertNotNull(bFromA);
+      assertEquals(CLASS_B, bFromA.getName());
+      CtClass aFromB = globalB.get(CLASS_A);
+      assertNotNull(aFromB);
+      assertSame(aFromA, aFromB);
+      CtClass bFromB = globalB.get(CLASS_B);
+      assertNotNull(bFromB);
+      assertSame(bFromA, bFromB);
+   }
+   
+   public void testChildDomain() throws Exception
+   {
+      ClassPool poolA = null;
+      ClassPool poolB = null;
+      ClassPool poolC = null;
+      try
+      {
+         poolA = createGlobalClassPool(JAR_A_1);
+         poolB = createGlobalClassPool(JAR_B_1);
+         poolC = createChildClassPool(JAR_C_1, false);
+
+         //Call twice to ensure that we hit the cache as well as creating the CtClases
+         accessChildDomain(poolA, poolB, poolC);
+         accessChildDomain(poolA, poolB, poolC);
+      }
+      finally
+      {
+         removeClassPool(poolA);
+         removeClassPool(poolB);
+         removeClassPool(poolC);
+      }
+   }
+   
+   private void accessChildDomain(ClassPool poolA, ClassPool poolB, ClassPool poolC) throws Exception
+   {
+      CtClass aFromA = poolA.get(CLASS_A);
+      assertNotNull(aFromA);
+      CtClass bFromB = poolB.get(CLASS_B);
+      assertNotNull(bFromB);
+      CtClass cFromC = poolC.get(CLASS_C);
+      assertNotNull(cFromC);
+      CtClass aFromC = poolC.get(CLASS_A);
+      assertNotNull(aFromC);
+      CtClass bFromC = poolC.get(CLASS_B);
+      assertNotNull(bFromC);
+      
+      assertSame(aFromA, aFromC);
+      assertSame(bFromB, bFromC);
+      assertSame(poolA, aFromA.getClassPool());
+      assertSame(poolB, bFromB.getClassPool());
+      assertSame(poolC, cFromC.getClassPool());
+      
+      assertCannotLoadCtClass(poolA, CLASS_C);
+      assertCannotLoadCtClass(poolB, CLASS_C);
+   }
+   
+   public void testSiblingDomains() throws Exception
+   {
+      ClassPool poolA = createChildClassPool(JAR_A_1, true);
+      ClassPool poolB = createChildClassPool(JAR_B_1, false);
+      
+      try
+      {
+         accessSiblingDomains(poolA, poolB);
+      }
+      finally
+      {
+         removeClassPool(poolA);
+         removeClassPool(poolB);
+      }
+   }
+
+   private void accessSiblingDomains(ClassPool poolA, ClassPool poolB) throws Exception
+   {
+      CtClass clazzA = poolA.get(CLASS_A);
+      assertSame(poolA, clazzA.getClassPool());
+      CtClass clazzB = poolB.get(CLASS_B);
+      assertSame(poolB, clazzB.getClassPool());
+      assertCannotLoadCtClass(poolA, CLASS_B);
+      assertCannotLoadCtClass(poolB, CLASS_A);
+   }
+   
+   public void testChildWithNewClassesInParent() throws Exception
+   {
+      ClassPool globalPool = null;
+      ClassPool scopedPool = null;
+      try
+      {
+         scopedPool = createChildClassPool(JAR_B_1, true);
+         assertCannotLoadCtClass(scopedPool, CLASS_A);
+         
+         globalPool = createGlobalClassPool(JAR_A_1);
+         CtClass aFromChild = scopedPool.get(CLASS_A);
+         assertNotNull(aFromChild);
+         CtClass aFromParent = globalPool.get(CLASS_A);
+         assertNotNull(aFromParent);
+         assertSame(aFromChild, aFromParent);
+         assertSame(globalPool, aFromParent.getClassPool());
+         
+         CtClass aFromChild2 = scopedPool.get(CLASS_A);
+         assertSame(aFromChild, aFromChild2);
+      }
+      finally
+      {
+         removeClassPool(globalPool);
+         removeClassPool(scopedPool);
+      }
+   }
+   
+   public void testChildOverrideWithParentDelegation() throws Exception
+   {
+      ClassPool globalPool = null;
+      ClassPool scopedPool = null;
+      try
+      {
+         globalPool = createGlobalClassPool(JAR_A_1);
+         scopedPool = createChildClassPool(JAR_A_2, true);
+         CtClass aFromParent = globalPool.get(CLASS_A);
+         assertNotNull(aFromParent);
+         CtClass aFromChild = scopedPool.get(CLASS_A);
+         assertNotNull(aFromChild);
+         assertSame(aFromParent, aFromChild);
+         assertSame(globalPool, aFromParent.getClassPool());
+      }
+      finally
+      {
+         removeClassPool(globalPool);
+         removeClassPool(scopedPool);
+      }
+   }
+
+   public void testChildOverrideWithNoParentDelegation() throws Exception
+   {
+      ClassPool globalPool = null;
+      ClassPool scopedPool = null;
+      try
+      {
+         globalPool = createGlobalClassPool(JAR_A_1);
+         scopedPool = createChildClassPool(JAR_A_2, false);
+         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
+      {
+         removeClassPool(globalPool);
+         removeClassPool(scopedPool);
+      }
+   }
+   
+   public void testURLChildOfGlobalUclParentFirst() throws Exception
+   {
+      ClassPool globalPool = null;
+      ClassPool childA = null;
+      ClassPool childB = null;
+      try
+      {
+         globalPool = createGlobalClassPool(JAR_A_1);
+         childA = createChildURLClassPool(globalPool, JAR_B_1);
+         
+         //Try loading A from child first
+         CtClass aFromA = childA.get(CLASS_A);
+         assertSame(globalPool, aFromA.getClassPool());
+         
+         //Try loading A from global
+         CtClass aFromGlobal = globalPool.get(CLASS_A);
+         assertSame(aFromA, aFromGlobal);
+         
+         //Try loading B from A
+         CtClass bFromA = childA.get(CLASS_B);
+         assertSame(childA, bFromA.getClassPool());
+         
+         //Should get the cached copy from the parent
+         childB = createChildURLClassPool(globalPool, JAR_A_2);
+         CtClass aFromB = childB.get(CLASS_A);
+         assertSame(globalPool, aFromB.getClassPool());
+      }
+      finally
+      {
+         removeClassPool(globalPool);
+         removeClassPool(childA);
+         removeClassPool(childB);
+      }
+   }   
+
+   
+   public void testURLChildOfGlobalUcParentLast() throws Exception
+   {
+      ClassPool globalPool = null;
+      ClassPool childA = null;
+      ClassPool childB = null;
+      try
+      {
+         globalPool = createGlobalClassPool(JAR_A_1);
+         childA = createChildURLClassPoolParentLast(globalPool, JAR_B_1);
+         
+         //Try loading A from child first
+         CtClass aFromA = childA.get(CLASS_A);
+         assertSame(globalPool, aFromA.getClassPool());
+         
+         //Try loading A from global
+         CtClass aFromGlobal = globalPool.get(CLASS_A);
+         assertSame(aFromA, aFromGlobal);
+         
+         //Try loading B from A
+         CtClass bFromA = childA.get(CLASS_B);
+         assertSame(childA, bFromA.getClassPool());
+         
+         //Should get the child copy
+         childB = createChildURLClassPoolParentLast(globalPool, JAR_A_2);
+         CtClass aFromB = childB.get(CLASS_A);
+         assertSame(childB, aFromB.getClassPool());
+      }
+      finally
+      {
+         removeClassPool(globalPool);
+         removeClassPool(childA);
+         removeClassPool(childB);
+      }
+   }   
+
+   public void testURLChildOfGlobalUclParentFirstWithClassInGlobalSibling() throws Exception
+   {
+      ClassPool globalPoolA = null;
+      ClassPool globalPoolB = null;
+      ClassPool childC = null;
+      ClassPool childB = null;
+      try
+      {
+         globalPoolA = createGlobalClassPool(JAR_A_1);
+         globalPoolB = createGlobalClassPool(JAR_B_1);
+         childC = createChildURLClassPool(globalPoolA, JAR_C_1);
+         
+         //Try loading A from child first
+         CtClass bFromC = childC.get(CLASS_B);
+         assertSame(globalPoolB, bFromC.getClassPool());
+         
+         //Try loading A from global
+         CtClass bFromGlobalA = globalPoolA.get(CLASS_B);
+         assertSame(bFromC, bFromGlobalA);
+         
+         //Try loading B from A
+         CtClass cFromC = childC.get(CLASS_C);
+         assertSame(childC, cFromC.getClassPool());
+         
+         //Should get the cached copy from the parent
+         childB = createChildURLClassPool(globalPoolA, JAR_B_2);
+         CtClass bFromB = childB.get(CLASS_B);
+         assertSame(globalPoolB, bFromB.getClassPool());
+      }
+      finally
+      {
+         removeClassPool(globalPoolA);
+         removeClassPool(globalPoolB);
+         removeClassPool(childC);
+         removeClassPool(childB);
+      }
+   }   
+
+   public void testUndeploySibling() throws Exception
+   {
+      ClassPool poolA = null;
+      ClassPool poolB = null;
+      try
+      {
+         try
+         {
+            poolA = createGlobalClassPool(JAR_A_1);
+            assertCannotLoadCtClass(poolA, CLASS_B);
+            
+            poolB = createGlobalClassPool(JAR_B_1);
+            CtClass bFromA = poolA.get(CLASS_B);
+            assertSame(poolB, bFromA.getClassPool());
+         }
+         finally
+         {
+            removeClassPool(poolB);
+         }
+         assertCannotLoadCtClass(poolA, CLASS_B);
+      }
+      finally
+      {
+         removeClassPool(poolA);
+         removeClassPool(poolB);
+      }
+   }
+
+   
+//   public void testUndeployParentDomainClassLoader() throws Exception
+//   {
+//      ClassLoader globalA = null;
+//      ClassLoader globalB = null;
+//      ClassLoader child = null;
+//      try
+//      {
+//         try
+//         {
+//            globalA = createGlobalClassLoader(JAR_A_1);
+//            assertCannotLoadClass(globalA, CLASS_B);
+//            
+//            child = createChildClassLoader(JAR_C_1, true);
+//            assertCannotLoadClass(child, CLASS_B);
+//            
+//            globalB = createGlobalClassLoader(JAR_B_1);
+//            Class<?> bFromChild = child.loadClass(CLASS_B);
+//            Class<?> bFromA = globalA.loadClass(CLASS_B);
+//            assertSame(globalB, bFromA.getClassLoader());
+//            assertSame(bFromA, bFromChild);
+//         }
+//         finally
+//         {
+//            removeClassLoaderFromRepository(globalB);
+//         }
+//         assertCannotLoadClass(child, CLASS_B);
+//      }
+//      finally
+//      {
+//         removeClassLoaderFromRepository(globalA);
+//      }
+//   }
+   
+   public void testUclWithParentClassLoader() throws Exception
+   {
+      ClassPool parent = null;
+      ClassPool global = null;
+      try
+      {
+         parent = createChildURLClassPool(null, JAR_B_1);
+         global = createGlobalClassPoolWithParent(JAR_A_1, parent);
+
+         CtClass aFromGlobal = global.get(CLASS_A);
+         assertSame(global, aFromGlobal.getClassPool());
+         CtClass aFromGlobal2 = global.get(CLASS_A);
+         assertSame(aFromGlobal, aFromGlobal2);
+         
+         CtClass bFromGlobal = global.get(CLASS_B);
+         assertSame(parent, bFromGlobal.getClassPool());
+         CtClass bFromGlobal2 = global.get(CLASS_B);
+         assertSame(bFromGlobal, bFromGlobal2);
+         
+         CtClass bFromParent = parent.get(CLASS_B);
+         assertSame(parent, bFromParent.getClassPool());
+         assertSame(bFromGlobal, bFromParent);
+         CtClass bFromParent2 = parent.get(CLASS_B);
+         assertSame(bFromParent, bFromParent2);
+      }
+      finally
+      {
+         removeClassPool(global);
+         removeClassPool(parent);
+      }
+   }
+
+   public void testUclWithParentClassLoaderAndSameClassInDomain() throws Exception
+   {
+      ClassPool parent = null;
+      ClassPool globalA = null;
+      ClassPool globalB = null;
+      try
+      {
+         parent = createChildURLClassPool(null, JAR_B_1);
+         globalA = createGlobalClassPoolWithParent(JAR_A_1, parent);
+
+         CtClass aFromGlobal = globalA.get(CLASS_A);
+         assertSame(globalA, aFromGlobal.getClassPool());
+         CtClass aFromGlobal2 = globalA.get(CLASS_A);
+         assertSame(aFromGlobal, aFromGlobal2);
+
+         globalB = createGlobalClassPool(JAR_B_2);
+         CtClass bFromGlobalA = globalA.get(CLASS_B);
+         assertSame(globalB, bFromGlobalA.getClassPool());
+         CtClass bFromGlobalA2 = globalA.get(CLASS_B);
+         assertSame(bFromGlobalA, bFromGlobalA2);
+         
+         
+         CtClass bFromParent = parent.get(CLASS_B);
+         assertSame(parent, bFromParent.getClassPool());
+         assertNotSame(bFromGlobalA, bFromParent);
+         CtClass bFromParent2 = parent.get(CLASS_B);
+         assertSame(bFromParent, bFromParent2);
+      }
+      finally
+      {
+         removeClassPool(globalA);
+         removeClassPool(globalB);
+         removeClassPool(parent);
+      }
+   }
+   
+   public void testGeneratingClassInNonDelegatingPool() throws Exception
+   {
+      ClassPool parent = null;
+      ClassPool global = null;
+      ClassPool child = null;
+      try
+      {
+         final String PARENT = "parent.Parent";
+         final String CHILD = "child.Child";
+         parent = createChildURLClassPool(null, JAR_B_1);
+         global = createGlobalClassPoolWithParent(JAR_A_1, parent);
+         child = createChildURLClassPool(global, JAR_C_1);
+         
+         assertCannotLoadCtClass(parent, PARENT);
+         assertCannotLoadCtClass(global, PARENT);
+         assertCannotLoadCtClass(child, PARENT);
+         assertCannotLoadCtClass(child, CHILD);
+         
+         CtClass parentClass = parent.makeClass(PARENT);
+         
+         CtClass childClass = child.makeClass(CHILD);
+         childClass.setSuperclass(parentClass);
+         
+         CtClass parentFromParent = parent.get(PARENT);
+         assertSame(parent, parentFromParent.getClassPool());
+         assertSame(parentClass, parentFromParent);
+         
+         CtClass childFromChild = child.get(CHILD);
+         assertSame(child, childFromChild.getClassPool());
+         assertSame(childClass, childFromChild);
+         
+         assertCannotLoadCtClass(global, CHILD);
+         
+         CtClass parentFromChildA = childClass.getSuperclass();
+         assertSame(parentClass, parentFromChildA);
+       
+         CtClass parentFromChildB = child.get(PARENT);
+         assertSame(parentClass, parentFromChildB);
+         
+         Class<?> parentClazz = parentClass.toClass();
+         assertSame(parent.getClassLoader(), parentClazz.getClassLoader());
+         
+         Class<?> childClazz = childClass.toClass();
+         assertSame(child.getClassLoader(), childClazz.getClassLoader());
+         
+         Class<?> parentClazzFromParent = parent.getClassLoader().loadClass(PARENT);
+         assertSame(parentClazz, parentClazzFromParent);
+         
+         Class<?> parentClazzFromChild = parent.getClassLoader().loadClass(PARENT);
+         assertSame(parentClazz, parentClazzFromChild);
+         
+         Class<?> childClazzFromChild = child.getClassLoader().loadClass(CHILD);
+         assertSame(childClazz, childClazzFromChild);
+      }
+      finally
+      {
+         removeClassPool(parent);
+         removeClassPool(global);
+         removeClassPool(child);
+      }
+   }
+   
+   
+   public void testGeneratingClassInDelegatingPool() throws Exception
+   {
+      ClassPool globalA = null;
+      ClassPool globalB = null;
+      ClassPool child = null;
+      try
+      {
+         globalA = createGlobalClassPool(JAR_A_1);
+         globalB = createGlobalClassPool(JAR_B_1);
+         child = createChildURLClassPool(globalA, JAR_C_1);
+         
+         final String A_CLASS = "a.Clazz";
+         final String B_CLASS = "b.Clazz";
+         
+         assertCannotLoadCtClass(globalA, A_CLASS);
+         assertCannotLoadCtClass(globalB, A_CLASS);
+         assertCannotLoadCtClass(child, A_CLASS);
+         assertCannotLoadCtClass(globalA, B_CLASS);
+         assertCannotLoadCtClass(globalB, B_CLASS);
+         assertCannotLoadCtClass(child, B_CLASS);
+         
+         CtClass a = globalA.makeClass(A_CLASS);
+         CtClass b = globalB.makeClass(B_CLASS);
+         
+         CtClass aFromA = globalA.get(A_CLASS);
+         assertSame(a, aFromA);
+         assertSame(globalA, aFromA.getClassPool());
+         CtClass aFromB = globalB.get(A_CLASS);
+         assertSame(a, aFromB);
+         CtClass bFromA = globalA.get(B_CLASS);
+         assertSame(b, bFromA);
+         assertSame(globalB, bFromA.getClassPool());
+         CtClass bFromB = globalB.get(B_CLASS);
+         assertSame(b, bFromB);
+         CtClass aFromChild = child.get(A_CLASS);
+         assertSame(a, aFromChild);
+         CtClass bFromChild = child.get(B_CLASS);
+         assertSame(b, bFromChild);
+         
+         Class<?> clazzA = a.toClass();
+         assertSame(globalA.getClassLoader(), clazzA.getClassLoader());
+         
+         Class<?> clazzB = b.toClass();
+         assertSame(globalB.getClassLoader(), clazzB.getClassLoader());
+         
+         Class<?> clazzAFromA = globalA.getClassLoader().loadClass(A_CLASS);
+         assertSame(clazzA, clazzAFromA);
+         Class<?> clazzAFromB = globalB.getClassLoader().loadClass(A_CLASS);
+         assertSame(clazzA, clazzAFromB);
+         Class<?> clazzAFromChild = child.getClassLoader().loadClass(A_CLASS);
+         assertSame(clazzA, clazzAFromChild);
+         
+         Class<?> clazzBFromA = globalA.getClassLoader().loadClass(B_CLASS);
+         assertSame(clazzB, clazzBFromA);
+         Class<?> clazzBFromB = globalB.getClassLoader().loadClass(B_CLASS);
+         assertSame(clazzB, clazzBFromB);
+         Class<?> clazzBFromChild = child.getClassLoader().loadClass(B_CLASS);
+         assertSame(clazzB, clazzBFromChild);
+      }
+      finally
+      {
+         removeClassPool(globalA);
+         removeClassPool(globalB);
+         removeClassPool(child);
+      }
+   }
+   
+}

Added: projects/aop/trunk/build/release.properties
===================================================================
--- projects/aop/trunk/build/release.properties	                        (rev 0)
+++ projects/aop/trunk/build/release.properties	2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,7 @@
+#release configuration
+#Thu Oct 16 16:06:44 BST 2008
+preparationGoals=clean verify
+scm.commentPrefix=[maven-release-plugin] 
+exec.additionalArguments=-Prelease -P jboss.repository,jboss.repository
+completedPhase=check-poms
+scm.url=scm\:svn\:https\://svn.jboss.org/repos/labs/labs/jbossbuild/jboss-parent/tags/jboss-parent-4/jboss-aop-parent/jboss-aop-dist




More information about the jboss-cvs-commits mailing list