[Jboss-cvs] JBossAS SVN: r57060 - in branches/Branch_4_0: aspects aspects/src/jdk15/org/jboss/aop/deployment aspects/src/main/org/jboss/aop/deployment build

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Sep 21 15:06:44 EDT 2006


Author: kabir.khan at jboss.com
Date: 2006-09-21 15:06:34 -0400 (Thu, 21 Sep 2006)
New Revision: 57060

Added:
   branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/LoaderRepositoryUrlUtil.java
   branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/ScopedClassLoaderDomain.java
   branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/ScopedJBossClassPool.java
Modified:
   branches/Branch_4_0/aspects/build.xml
   branches/Branch_4_0/aspects/src/jdk15/org/jboss/aop/deployment/AspectManagerService32JDK5.java
   branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectDeployer.java
   branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectDeployerMBean.java
   branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectManagerService.java
   branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectManagerService32.java
   branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectManagerServiceMBean.java
   branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPool.java
   branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPool32.java
   branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPoolFactory.java
   branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPoolFactory32.java
   branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossScopedClassLoaderHelper.java
   branches/Branch_4_0/build/build-thirdparty.xml
Log:
[JBAOP-288] Unify API used by AspectDeployer with AOP 2.0

Modified: branches/Branch_4_0/aspects/build.xml
===================================================================
--- branches/Branch_4_0/aspects/build.xml	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/build.xml	2006-09-21 19:06:34 UTC (rev 57060)
@@ -56,7 +56,7 @@
 
       <!-- Module name(s) & version -->
       <property name="aspects.version" value="jboss-aspect-library-1.5"/>
-      <property name="aop.version" value="jboss-aop_1.5.1.GA"/>
+      <property name="aop.version" value="jboss-aop_1.5.2.GA"/>
       <property name="aspects.title" value="JBoss AOP Aspect Library"/>
 
       <property name="module.name" value="aspects"/>

Modified: branches/Branch_4_0/aspects/src/jdk15/org/jboss/aop/deployment/AspectManagerService32JDK5.java
===================================================================
--- branches/Branch_4_0/aspects/src/jdk15/org/jboss/aop/deployment/AspectManagerService32JDK5.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/jdk15/org/jboss/aop/deployment/AspectManagerService32JDK5.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -21,7 +21,8 @@
  */
 package org.jboss.aop.deployment;
 
-import org.jboss.aop.ClassPoolFactory;
+import javassist.scopedpool.ScopedClassPoolFactory;
+
 import org.jboss.aop.ClassLoaderValidation;
 
 /**
@@ -31,7 +32,7 @@
  */
 public class AspectManagerService32JDK5 extends AspectManagerServiceJDK5
 {
-   protected ClassPoolFactory createFactory() throws Exception
+   protected ScopedClassPoolFactory createFactory() throws Exception
    {
       return new JBossClassPoolFactory32(tmpClassesDir);
    }

Modified: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectDeployer.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectDeployer.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectDeployer.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -47,11 +47,14 @@
  * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
  * @author <a href="mailto:dimitris at jboss.org">Dimitris Andreadis</a>
  * @version $Revision$
+ * @jmx:mbean name="jboss.aspect:AspectDeployer"
+ * extends="org.jboss.deployment.SubDeployerMBean"
  */
 public class AspectDeployer
 extends SubDeployerSupport
 implements SubDeployer, AspectDeployerMBean
 {
+
    /**
     * Default CTOR used to set default values to the Suffixes and RelativeOrder
     * attributes. Those are read at subdeployer registration time by the MainDeployer
@@ -164,7 +167,7 @@
          AspectXmlLoader.deployXML(docURL, scl);
          Notification msg = new Notification("AOP Deploy", this, getNextNotificationSequenceNumber());
          sendNotification(msg);
-         log.info("Deployed AOP: " + di.url);
+         log.debug("Deployed AOP: " + di.url);
       }
       catch (Exception ex)
       {
@@ -297,4 +300,4 @@
       
       return null;
    }
-}
+}
\ No newline at end of file

Modified: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectDeployerMBean.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectDeployerMBean.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectDeployerMBean.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -21,18 +21,51 @@
 */
 package org.jboss.aop.deployment;
 
-import javax.management.ObjectName;
-import org.jboss.deployment.SubDeployerMBean;
-import org.jboss.mx.util.ObjectNameFactory;
-
 /**
  * MBean interface.
- * 
- * @version $Revision$
  */
-public interface AspectDeployerMBean extends SubDeployerMBean
-{
-   /** The default ObjectName */
-   public static final ObjectName OBJECT_NAME = ObjectNameFactory.create("jboss.aspect:AspectDeployer");
+public interface AspectDeployerMBean extends org.jboss.deployment.SubDeployerMBean {
 
+   //default object name
+   public static final javax.management.ObjectName OBJECT_NAME = org.jboss.mx.util.ObjectNameFactory.create("jboss.aspect:AspectDeployer");
+
+   /**
+    * Returns true if this deployer can deploy the given DeploymentInfo.
+    * @return True if this deployer can deploy the given DeploymentInfo.
+    */
+  boolean accepts(org.jboss.deployment.DeploymentInfo di) ;
+
+   /**
+    * Describe <code>init</code> method here.
+    * @param di a <code>DeploymentInfo</code> value
+    * @throws DeploymentException if an error occurs
+    */
+  void init(org.jboss.deployment.DeploymentInfo di) throws org.jboss.deployment.DeploymentException;
+
+   /**
+    * Describe <code>create</code> method here.
+    * @param di a <code>DeploymentInfo</code> value
+    * @throws DeploymentException if an error occurs
+    */
+  void create(org.jboss.deployment.DeploymentInfo di) throws org.jboss.deployment.DeploymentException;
+
+   /**
+    * The <code>start</code> method starts all the mbeans in this DeploymentInfo..
+    * @param di a <code>DeploymentInfo</code> value
+    * @throws DeploymentException if an error occurs
+    */
+  void start(org.jboss.deployment.DeploymentInfo di) throws org.jboss.deployment.DeploymentException;
+
+   /**
+    * Undeploys the package at the url string specified. This will: Undeploy packages depending on this one. Stop, destroy, and unregister all the specified mbeans Unload this package and packages this package deployed via the classpath tag. Keep track of packages depending on this one that we undeployed so that they can be redeployed should this one be redeployed.
+    * @param di the <code>DeploymentInfo</code> value to stop.
+    */
+  void stop(org.jboss.deployment.DeploymentInfo di) ;
+
+   /**
+    * Describe <code>destroy</code> method here.
+    * @param di a <code>DeploymentInfo</code> value
+    */
+  void destroy(org.jboss.deployment.DeploymentInfo di) ;
+
 }

Modified: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectManagerService.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectManagerService.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectManagerService.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -28,6 +28,9 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.StringTokenizer;
+
+import javassist.scopedpool.ScopedClassPoolFactory;
+
 import javax.management.Attribute;
 import javax.management.AttributeNotFoundException;
 import javax.management.InstanceNotFoundException;
@@ -40,10 +43,10 @@
 import org.jboss.aop.AspectNotificationHandler;
 import org.jboss.aop.AspectXmlLoader;
 import org.jboss.aop.ClassLoaderValidation;
-import org.jboss.aop.ClassPoolFactory;
 import org.jboss.aop.Deployment;
 import org.jboss.aop.hook.JDK14Transformer;
 import org.jboss.aop.hook.JDK14TransformerManager;
+import org.jboss.aop.instrument.InstrumentorFactory;
 import org.jboss.mx.server.ServerConstants;
 import org.jboss.mx.util.ObjectNameFactory;
 import org.jboss.system.ServiceMBeanSupport;
@@ -81,7 +84,7 @@
 
    // Public -------------------------------------------------------
 
-   protected ClassPoolFactory createFactory() throws Exception
+   protected ScopedClassPoolFactory createFactory() throws Exception
    {
       return new JBossClassPoolFactory(tmpClassesDir);
    }
@@ -105,7 +108,8 @@
       // Validate the the tmp dir exists
       if (tmpClassesDir.exists() == false && tmpClassesDir.mkdirs() == false)
          throw new FileNotFoundException("Failed to create tmpClassesDir: " + tmpClassesDir.getAbsolutePath());
-      AspectManager.classPoolFactory = createFactory();
+      AspectManager.setClassPoolFactory(createFactory());
+      
       AspectManager.classLoaderValidator = createClassLoaderValidation();
       // Add the tmp classes dir to our UCL classpath
 
@@ -122,7 +126,7 @@
       }
       created = true;
       AspectManager.notificationHandler = this;
-
+      
       AspectManager.scopedCLHelper = new JBossScopedClassLoaderHelper();
       
       baseAop();
@@ -208,8 +212,8 @@
          {
             try
             {
-            	//Make sure that we use the correct classloader, in order to get the correct domain if it is a scoped loader
-            	return AspectManager.instance(loader).translate(classname, loader, classBytes);
+               //Make sure that we use the correct classloader, in order to get the correct domain if it is a scoped loader
+               return AspectManager.instance(loader).translate(classname, loader, classBytes);
             }
             catch (Exception e)
             {
@@ -242,12 +246,12 @@
 
    public boolean getPrune()
    {
-      return AspectManager.prune;
+      return AspectManager.getPrune();
    }
 
    public void setPrune(boolean prune)
    {
-      AspectManager.prune = prune;
+      AspectManager.setPrune(prune);
    }
 
    public String getExclude()
@@ -301,6 +305,7 @@
       AspectManager.instance().setIgnore(list);
    }
 
+   
    /**
     * The temporary directory to which dyn class files are written
     *
@@ -560,4 +565,15 @@
       }
       this.enableLoadtimeWeaving = enableTransformer;
    }
+   
+   public String getInstrumentor()
+   {
+      return InstrumentorFactory.getInstrumentorName();
+   }
+   
+   public void setInstrumentor(String instrumentor)
+   {
+      InstrumentorFactory.initialise(instrumentor);
+   }
+
 }

Modified: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectManagerService32.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectManagerService32.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectManagerService32.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -21,8 +21,9 @@
 */
 package org.jboss.aop.deployment;
 
+import javassist.scopedpool.ScopedClassPoolFactory;
+
 import org.jboss.aop.ClassLoaderValidation;
-import org.jboss.aop.ClassPoolFactory;
 
 /**
  * Comment
@@ -32,7 +33,7 @@
  */
 public class AspectManagerService32 extends AspectManagerService
 {
-   protected ClassPoolFactory createFactory() throws Exception
+   protected ScopedClassPoolFactory createFactory() throws Exception
    {
       return new JBossClassPoolFactory32(tmpClassesDir);
    }

Modified: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectManagerServiceMBean.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectManagerServiceMBean.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/AspectManagerServiceMBean.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -114,8 +114,14 @@
    boolean getPrune();
 
    void setPrune(boolean prune);
+   
+   String getIgnore();
 
-   public String getIgnore();
-
-   public void setIgnore(String ignore);
+   void setIgnore(String ignore);
+   
+   String getInstrumentor();
+   
+   void setInstrumentor(String instrumentor);
+   
+   
 }

Modified: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPool.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPool.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPool.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -23,14 +23,15 @@
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.net.URL;
 import java.security.ProtectionDomain;
 
-import org.jboss.aop.AOPClassPool;
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.classpool.AOPClassPool;
 import org.jboss.mx.loading.RepositoryClassLoader;
 import javassist.CannotCompileException;
 import javassist.ClassPool;
 import javassist.CtClass;
+import javassist.scopedpool.ScopedClassPoolRepository;
 
 /**
  * Comment
@@ -44,39 +45,37 @@
     * Used for dynamically created classes (see loadClass(String, byte[]), ClassLoader)
     */
    protected File tempdir = null;
+   protected URL tempURL = null;
    // For loadClass tmpdir creation for UCL
    protected final Object tmplock = new Object();
-
-   protected JBossClassPool(ClassLoader cl, ClassPool src, AspectManager manager, File tmp)
+   
+   protected JBossClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, File tmp, URL tmpURL)
    {
-      super(cl, src, manager);
+      super(cl, src, repository);
       tempdir = tmp;
+      tempURL = tmpURL;
    }
 
-   protected JBossClassPool(ClassPool src, AspectManager manager)
+   protected JBossClassPool(ClassPool src, ScopedClassPoolRepository repository)
    {
-      super(src, manager);
+      super(src, repository);
    }
 
    public boolean isUnloadedClassLoader()
    {
-	  ClassLoader dcl = super.getClassLoader();
-      if (dcl instanceof RepositoryClassLoader)
+      if (getClassLoader() instanceof RepositoryClassLoader)
       {
-         RepositoryClassLoader rcl = (RepositoryClassLoader) dcl;
+         RepositoryClassLoader rcl = (RepositoryClassLoader) getClassLoader();
          return rcl.getLoaderRepository() == null;
       }
       return false;
    }
 
-   
-
    public Class toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain)
    throws CannotCompileException
    {
       lockInCache(cc);
-	  ClassLoader dcl = super.getClassLoader();
-      if (dcl == null || tempdir == null)
+      if (getClassLoader() == null || tempdir == null)
       {
          return super.toClass(cc, loader, domain);
       }
@@ -84,7 +83,7 @@
       try
       {
          File classFile = null;
-         String classFileName = cc.getName().replace('.', '/') + ".class";
+         String classFileName = getResourceName(cc.getName());
          // Write the clas file to the tmpdir
          synchronized (tmplock)
          {
@@ -101,12 +100,12 @@
          // be found
          //((UnifiedClassLoader)dcl).clearBlacklists();
          // To be backward compatible
-         RepositoryClassLoader rcl = (RepositoryClassLoader) dcl;
+         RepositoryClassLoader rcl = (RepositoryClassLoader) getClassLoader();
          rcl.clearClassBlackList();
          rcl.clearResourceBlackList();
 
          // Now load the class through the cl
-         dynClass = dcl.loadClass(cc.getName());
+         dynClass = getClassLoader().loadClass(cc.getName());
       }
       catch (Exception ex)
       {
@@ -118,4 +117,19 @@
       return dynClass;
    }
 
+   protected boolean isLocalResource(String resourceName)
+   {
+      if (super.isLocalResource(resourceName))
+      {
+         return true;
+      }
+      
+      File file = new File(tempdir, resourceName);
+      if (file.exists())
+      {
+         return true;
+      }
+      
+      return false;
+   }
 }

Modified: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPool32.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPool32.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPool32.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -25,12 +25,14 @@
 import java.io.FileOutputStream;
 import java.security.ProtectionDomain;
 
-import org.jboss.aop.AOPClassPool;
 import org.jboss.aop.AspectManager;
+import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.mx.loading.RepositoryClassLoader;
 import org.jboss.mx.loading.UnifiedClassLoader;
 import javassist.CannotCompileException;
 import javassist.ClassPool;
 import javassist.CtClass;
+import javassist.scopedpool.ScopedClassPoolRepository;
 
 /**
  * Comment
@@ -47,36 +49,34 @@
    // For loadClass tmpdir creation for UCL
    protected final Object tmplock = new Object();
 
-   protected JBossClassPool32(ClassLoader cl, ClassPool src, AspectManager manager, File tmp)
+   protected JBossClassPool32(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, File tmp)
    {
-      super(cl, src, manager);
+      super(cl, src, repository);
       tempdir = tmp;
    }
 
-   protected JBossClassPool32(ClassPool src, AspectManager manager)
+   protected JBossClassPool32(ClassPool src, ScopedClassPoolRepository repository)
    {
-      super(src, manager);
+      super(src, repository);
    }
 
    public boolean isUnloadedClassLoader()
    {
-      ClassLoader dcl = super.getClassLoader();
-      if (dcl instanceof UnifiedClassLoader)
+      if (getClassLoader() instanceof UnifiedClassLoader)
       {
-         UnifiedClassLoader rcl = (UnifiedClassLoader) dcl;
+         UnifiedClassLoader rcl = (UnifiedClassLoader) getClassLoader();
          return rcl.getLoaderRepository() == null;
       }
       return false;
    }
 
    public Class toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain)
-   throws CannotCompileException
+           throws CannotCompileException
    {
-       lockInCache(cc);
-	  ClassLoader dcl = super.getClassLoader();
-      if (dcl == null || tempdir == null)
+      lockInCache(cc);
+      if (getClassLoader() == null || tempdir == null)
       {
-         return super.toClass(cc);
+         return super.toClass(cc, loader, domain);
       }
       Class dynClass = null;
       try
@@ -99,11 +99,11 @@
          // be found
          //((UnifiedClassLoader)dcl).clearBlacklists();
          // To be backward compatible
-         UnifiedClassLoader rcl = (UnifiedClassLoader) dcl;
+         UnifiedClassLoader rcl = (UnifiedClassLoader) getClassLoader();
          rcl.clearBlackLists();
 
          // Now load the class through the cl
-         dynClass = dcl.loadClass(cc.getName());
+         dynClass = getClassLoader().loadClass(cc.getName());
       }
       catch (Exception ex)
       {

Modified: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPoolFactory.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPoolFactory.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPoolFactory.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -24,11 +24,14 @@
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
-import org.jboss.aop.AOPClassPool;
+
 import org.jboss.aop.AspectManager;
-import org.jboss.aop.ClassPoolFactory;
+import org.jboss.aop.classpool.AOPClassPool;
 import org.jboss.mx.loading.RepositoryClassLoader;
 import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPool;
+import javassist.scopedpool.ScopedClassPoolFactory;
+import javassist.scopedpool.ScopedClassPoolRepository;
 
 /**
  * Comment
@@ -37,7 +40,7 @@
  * @version $Revision$
  *
  **/
-public class JBossClassPoolFactory implements ClassPoolFactory
+public class JBossClassPoolFactory implements ScopedClassPoolFactory
 {
    protected File tmpClassesDir;
 
@@ -46,16 +49,22 @@
       this.tmpClassesDir = tmpClassesDir;
 
    }
-   public AOPClassPool create(ClassLoader cl, ClassPool src, AspectManager manager)
+   public ScopedClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
    {
       try
       {
          if (cl instanceof RepositoryClassLoader)
          {
             File tempdir = createTempDir(cl);
-            return new JBossClassPool(cl, src, manager, tempdir);
+            URL tmpCP = createURLAndAddToLoader(cl, tempdir);
+            if (AspectManager.scopedCLHelper.ifScopedDeploymentGetScopedParentUclForCL(cl) != null)
+            {
+               //It is scoped
+               return new ScopedJBossClassPool(cl, src, repository, tempdir, tmpCP);
+            }
+            return new JBossClassPool(cl, src, repository, tempdir, tmpCP);
          }
-         return new AOPClassPool(cl, src, manager);
+         return new AOPClassPool(cl, src, repository);
       }
       catch (IOException e)
       {
@@ -63,9 +72,9 @@
       }
    }
 
-   public AOPClassPool create(ClassPool src, AspectManager manager)
+   public ScopedClassPool create(ClassPool src, ScopedClassPoolRepository repository)
    {
-      return new JBossClassPool(src, manager);
+      return new JBossClassPool(src, repository);
    }
 
    public File createTempDir(ClassLoader cl) throws IOException
@@ -74,13 +83,23 @@
       tempdir.delete();
       tempdir.mkdir();
       tempdir.deleteOnExit();
-      RepositoryClassLoader ucl = (RepositoryClassLoader) cl;
+
+      return tempdir;
+   }
+   
+   private URL createURLAndAddToLoader(ClassLoader cl, File tempdir) throws IOException
+   {
       URL tmpURL = tempdir.toURL();
       URL tmpCP = new URL(tmpURL, "?dynamic=true");
 
+      RepositoryClassLoader ucl = (RepositoryClassLoader) cl;
+
       // We may be undeploying.
-      if (ucl.getLoaderRepository() != null) ucl.addURL(tmpCP);
-      return tempdir;
+      if (ucl.getLoaderRepository() != null)
+      {
+         ucl.addURL(tmpCP);
+      }
+      
+      return tmpCP;
    }
-
 }

Modified: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPoolFactory32.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPoolFactory32.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossClassPoolFactory32.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -24,11 +24,11 @@
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
-import org.jboss.aop.AOPClassPool;
-import org.jboss.aop.AspectManager;
-import org.jboss.aop.ClassPoolFactory;
 import org.jboss.mx.loading.UnifiedClassLoader;
 import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPool;
+import javassist.scopedpool.ScopedClassPoolFactory;
+import javassist.scopedpool.ScopedClassPoolRepository;
 
 /**
  * Comment
@@ -37,7 +37,7 @@
  * @version $Revision$
  *
  **/
-public class JBossClassPoolFactory32 implements ClassPoolFactory
+public class JBossClassPoolFactory32 implements ScopedClassPoolFactory
 {
    protected File tmpClassesDir;
 
@@ -46,12 +46,12 @@
       this.tmpClassesDir = tmpClassesDir;
 
    }
-   public AOPClassPool create(ClassLoader cl, ClassPool src, AspectManager manager)
+   public ScopedClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
    {
       try
       {
          File tempdir = createTempDir(cl);
-         return new JBossClassPool32(cl, src, manager, tempdir);
+         return new JBossClassPool32(cl, src, repository, tempdir);
       }
       catch (IOException e)
       {
@@ -59,9 +59,9 @@
       }
    }
 
-   public AOPClassPool create(ClassPool src, AspectManager manager)
+   public ScopedClassPool create(ClassPool src, ScopedClassPoolRepository repository)
    {
-      return new JBossClassPool32(src, manager);
+      return new JBossClassPool32(src, repository);
    }
 
    public File createTempDir(ClassLoader cl) throws IOException
@@ -78,5 +78,4 @@
       if (ucl.getLoaderRepository() != null) ucl.addURL(tmpCP);
       return tempdir;
    }
-
 }

Modified: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossScopedClassLoaderHelper.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossScopedClassLoaderHelper.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/JBossScopedClassLoaderHelper.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -21,10 +21,12 @@
 */ 
 package org.jboss.aop.deployment;
 
-import org.jboss.aop.AOPScopedClassLoaderHelper;
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
+import org.jboss.aop.classpool.AOPScopedClassLoaderHelper;
 import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
+import org.jboss.mx.loading.LoaderRepository;
 import org.jboss.mx.loading.RepositoryClassLoader;
-import org.jboss.system.server.NoAnnotationURLClassLoader;
 
 /**
  * 
@@ -33,7 +35,6 @@
  */
 public class JBossScopedClassLoaderHelper implements AOPScopedClassLoaderHelper
 {
-
    public ClassLoader ifScopedDeploymentGetScopedParentUclForCL(ClassLoader loader)
    {
       ClassLoader parent = loader;
@@ -59,23 +60,17 @@
       boolean scoped = false;
       if (loader instanceof RepositoryClassLoader)
       {
-         ClassLoader parent = loader.getParent();
-         
-         //TODO is this really the best way to find out if we are scoped or not?
-         if (parent.getClass().equals(NoAnnotationURLClassLoader.class))
+         LoaderRepository repository = ((RepositoryClassLoader)loader).getLoaderRepository();
+         if (repository instanceof HeirarchicalLoaderRepository3)
          {
-            RepositoryClassLoader rloader = (RepositoryClassLoader)loader;
-            //Scoped with java2ParentDelegation=true
-            scoped = rloader.getLoaderRepository().getClass().equals(HeirarchicalLoaderRepository3.class);
+            scoped = true;
+            HeirarchicalLoaderRepository3 hlr = (HeirarchicalLoaderRepository3)repository;
+            boolean parentFirst = hlr.getUseParentFirst();
          }
-         else
-         {
-            //Scoped with java2ParentDelegation=false
-            scoped = parent.getClass().getName().equals("org.jboss.mx.loading.HeirarchicalLoaderRepository3$NoParentClassLoader");
-         }
       }
       return scoped;
    }
+   
 
    public ClassLoader getTopLevelJBossClassLoader()
    {
@@ -91,4 +86,16 @@
       }
       return topRcl;
    }
+
+   public Domain getScopedClassLoaderDomain(ClassLoader cl, AspectManager parent)
+   {
+      boolean parentDelegation = true;
+      if (cl instanceof RepositoryClassLoader)
+      {
+         HeirarchicalLoaderRepository3 repository = (HeirarchicalLoaderRepository3)((RepositoryClassLoader)cl).getLoaderRepository();
+         parentDelegation = repository.getUseParentFirst();
+      }
+      return new ScopedClassLoaderDomain(cl, parentDelegation, parent, false);
+   }
+
 }

Added: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/LoaderRepositoryUrlUtil.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/LoaderRepositoryUrlUtil.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/LoaderRepositoryUrlUtil.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -0,0 +1,175 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.aop.deployment;
+
+import java.net.URL;
+
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanServer;
+import javax.management.Notification;
+import javax.management.NotificationListener;
+import javax.management.ObjectName;
+
+import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.mx.util.MBeanServerLocator;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class LoaderRepositoryUrlUtil implements NotificationListener
+{
+   final static MBeanServer SERVER;
+   final static ObjectName MAIN_LOADER_REPOSITORY_OBJECT_NAME;
+   final static LoaderRepository MAIN_LOADER_REPOSITORY;
+   static
+   {
+      SERVER = MBeanServerLocator.locateJBoss();
+      try
+      {
+         MAIN_LOADER_REPOSITORY_OBJECT_NAME = new ObjectName("JMImplementation:name=Default,service=LoaderRepository");
+         MAIN_LOADER_REPOSITORY = (LoaderRepository)SERVER.invoke(MAIN_LOADER_REPOSITORY_OBJECT_NAME, "getInstance", new Object[0], new String[0]);
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+   
+   long currentSequenceNumber;
+   long lastSequenceNumber = -1;
+   URL[] urls;
+   
+   public LoaderRepositoryUrlUtil()
+   {
+      try
+      {
+         SERVER.addNotificationListener(MAIN_LOADER_REPOSITORY_OBJECT_NAME, this, null, null);
+      }
+      catch (InstanceNotFoundException e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+
+   public synchronized void handleNotification(Notification notification, Object handback)
+   {
+      if (notification.getType().equals(LoaderRepository.CLASSLOADER_ADDED))
+      {
+         currentSequenceNumber = notification.getSequenceNumber();
+      }
+      else if (notification.getType().equals(LoaderRepository.CLASSLOADER_REMOVED))
+      {
+         currentSequenceNumber = notification.getSequenceNumber();
+      }
+   }
+   
+   public synchronized UrlInfo getURLInfo(HeirarchicalLoaderRepository3 scopedLoader, UrlInfo urlInfo)
+   {
+      boolean changed = false;
+      if (lastSequenceNumber != currentSequenceNumber)
+      {
+         urls = MAIN_LOADER_REPOSITORY.getURLs();
+         lastSequenceNumber = currentSequenceNumber;
+         changed = true;
+      }
+      if (!changed)
+      {
+         changed = urlInfo != null && (urlInfo.getSequenceNumber() != lastSequenceNumber);
+      }
+      if (urlInfo == null || changed)
+      {
+         URL[] localUrls = getLocalUrls(scopedLoader, urls);
+         urlInfo = new UrlInfo(urls, localUrls, lastSequenceNumber);
+      }
+      return urlInfo;
+   }
+   
+   public long getCurrentSequenceNumber()
+   {
+      return currentSequenceNumber;
+   }
+   
+   private URL[] getLocalUrls(HeirarchicalLoaderRepository3 scopedRepository, URL[] globalUrls)
+   {
+      URL[] scopedRepositoryUrls = scopedRepository.getURLs();
+
+      //This is a bit of a hack, since this relies on the order of the urls returned by HeirarchicalLoaderRepository3
+      //My urls, followed by parent urls.
+      int scopedLength = 0;
+      for (int i = 0 ; i < scopedRepositoryUrls.length ; i++)
+      {
+         URL scopedUrl = scopedRepositoryUrls[i];
+         for (int j = 0 ; j < globalUrls.length ; j ++)
+         {
+            URL globalUrl = globalUrls[j];
+            if (scopedRepositoryUrls[i].equals(globalUrls[j]))
+            {
+               scopedLength = i;
+               break;
+            }
+         }
+         if (scopedLength > 0)
+         {
+            break;
+         }
+      }
+      
+      URL[] localUrls = new URL[scopedLength];
+      System.arraycopy(scopedRepositoryUrls, 0, localUrls, 0, scopedLength);
+      return localUrls;
+   }
+   
+   public class UrlInfo
+   {
+      
+      URL[] globalUrls;
+      URL[] localUrls;
+      long sequenceNumber;
+
+      public UrlInfo(URL[] globalUrls, URL[] localUrls, long sequenceNumber)
+      {
+         super();
+         this.globalUrls = globalUrls;
+         this.localUrls = localUrls;
+         this.sequenceNumber = sequenceNumber;
+      }
+      
+      public URL[] getGlobalUrls()
+      {
+         return globalUrls;
+      }
+      
+      public URL[] getLocalUrls()
+      {
+         return localUrls;
+      }
+
+      public long getSequenceNumber()
+      {
+         return sequenceNumber;
+      }
+   }
+   
+}

Added: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/ScopedClassLoaderDomain.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/ScopedClassLoaderDomain.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/ScopedClassLoaderDomain.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -0,0 +1,153 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.aop.deployment;
+
+import java.lang.ref.WeakReference;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.Domain;
+import org.jboss.aop.advice.AspectDefinition;
+import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.mx.loading.RepositoryClassLoader;
+
+import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
+
+/**
+ * A domain that is used for scoped classloaders
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ScopedClassLoaderDomain extends Domain
+{
+   
+   WeakReference loader;
+   boolean parentDelegation;
+   ConcurrentReaderHashMap myPerVMAspects = new ConcurrentReaderHashMap();
+   ConcurrentReaderHashMap notMyPerVMAspects = new ConcurrentReaderHashMap();
+   
+   public ScopedClassLoaderDomain(ClassLoader loader, boolean parentDelegation, AspectManager manager, boolean parentFirst)
+   {
+      // FIXME ScopedClassLoaderDomain constructor
+      super(manager, parentFirst);
+      this.loader = new WeakReference(loader);
+      this.parentDelegation = parentDelegation;
+   }
+
+   protected ClassLoader getClassLoader()
+   {
+      ClassLoader cl = (ClassLoader)loader.get();
+      if (cl != null)
+      {
+         return cl;
+      }
+      return null;
+   }
+   
+   public Object getPerVMAspect(AspectDefinition def)
+   {
+      return getPerVMAspect(def.getName());
+   }
+
+   public Object getPerVMAspect(String def)
+   {
+      if (parentDelegation == true)
+      {
+         //We will alway be loading up the correct class
+         Object aspect = super.getPerVMAspect(def);
+         return aspect;
+      }
+      else
+      {
+         return getPerVmAspectWithNoParentDelegation(def);
+      }
+   }
+   
+   private Object getPerVmAspectWithNoParentDelegation(String def)
+   {
+      Object aspect = myPerVMAspects.get(def);
+      if (aspect != null)
+      {
+         return aspect;
+      }
+
+      aspect = super.getPerVMAspect(def);
+      if (aspect != null)
+      {
+         LoaderRepository loadingRepository = getAspectRepository(aspect);
+         LoaderRepository myRepository = getScopedRepository();
+         if (loadingRepository == myRepository)
+         {
+            //The parent does not load this class
+            myPerVMAspects.put(def, aspect);
+         }
+         else
+         {
+            //The class has been loaded by a parent classloader, find out if we also have a copy
+            try
+            {
+               Class clazz = myRepository.loadClass(aspect.getClass().getName());
+               if (clazz == aspect.getClass())
+               {
+                  notMyPerVMAspects.put(def, Boolean.TRUE);
+               }
+               else
+               {
+                  //We have a different version of the class deployed
+                  AspectDefinition aspectDefinition = getAspectDefinition(def);
+                  //Override the classloader to create the aspect instance
+                  aspect = createPerVmAspect(def, aspectDefinition, getClassLoader());
+                  myPerVMAspects.put(def, aspect);
+               }
+            }
+            catch (ClassNotFoundException e)
+            {
+               throw new RuntimeException(e);
+            }
+         }
+      }
+      
+      return aspect;
+   }
+   
+   private LoaderRepository getAspectRepository(Object aspect)
+   {
+      ClassLoader cl = aspect.getClass().getClassLoader();
+      ClassLoader parent = cl;
+      while (parent != null)
+      {
+         if (parent instanceof RepositoryClassLoader)
+         {
+            return ((RepositoryClassLoader)parent).getLoaderRepository();
+         }
+         parent = parent.getParent();
+      }
+      return null;
+   }
+   
+   private HeirarchicalLoaderRepository3 getScopedRepository()
+   {
+      HeirarchicalLoaderRepository3 myRepository = (HeirarchicalLoaderRepository3)((RepositoryClassLoader)getClassLoader()).getLoaderRepository();
+      return myRepository;
+   }
+}

Added: branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/ScopedJBossClassPool.java
===================================================================
--- branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/ScopedJBossClassPool.java	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/aspects/src/main/org/jboss/aop/deployment/ScopedJBossClassPool.java	2006-09-21 19:06:34 UTC (rev 57060)
@@ -0,0 +1,214 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.aop.deployment;
+
+import java.io.File;
+import java.lang.ref.WeakReference;
+import java.net.URL;
+import java.util.Iterator;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.classpool.AOPClassPool;
+import org.jboss.aop.classpool.AOPClassPoolRepository;
+import org.jboss.aop.deployment.LoaderRepositoryUrlUtil.UrlInfo;
+import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.mx.loading.RepositoryClassLoader;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.NotFoundException;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+/**
+ * A classpool in JBoss backed by a scoped (HierarchicalLoaderRepository) loader repository
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ScopedJBossClassPool extends JBossClassPool 
+{
+   final static LoaderRepositoryUrlUtil LOADER_REPOSITORY_UTIL = new LoaderRepositoryUrlUtil();
+   
+   WeakReference repository = null;
+   UrlInfo urlInfo;
+
+   protected ScopedJBossClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, File tmp, URL tmpURL)
+   {
+      super(cl, src, repository, tmp, tmpURL);
+      
+      boolean parentFirst = false;
+      LoaderRepository loaderRepository = null;
+      ClassLoader prnt = cl;
+      while (prnt != null)
+      {
+         if (prnt instanceof RepositoryClassLoader)
+         {
+            loaderRepository = ((RepositoryClassLoader)prnt).getLoaderRepository();
+            if (loaderRepository instanceof HeirarchicalLoaderRepository3)
+            {
+               parentFirst = ((HeirarchicalLoaderRepository3)loaderRepository).getUseParentFirst();
+            }
+            break;
+         }
+         prnt = cl.getParent();
+      }
+      
+      super.childFirstLookup = !parentFirst;
+   }
+   
+
+   private HeirarchicalLoaderRepository3 getRepository()
+   {
+      //FIXME - Once Javassist > 3.3.0 is out use getClassLoader0() and get rid of try/catch
+      ClassLoader cl = null;
+      try
+      {
+         cl =  getClassLoader();
+      }
+      catch (RuntimeException e)
+      {
+         //Ignore, the ScopedClassPoll throws an exception if pool is not associated with a cl
+      }
+      if (cl != null)
+      {
+         return (HeirarchicalLoaderRepository3)((RepositoryClassLoader)cl).getLoaderRepository();
+      }
+      return null;
+   }
+
+   private URL getResourceUrlForClass(String resourcename)
+   {
+      HeirarchicalLoaderRepository3 repo = getRepository();
+      return repo.getResource(resourcename, super.getClassLoader());
+   }
+   
+   private boolean isMine(URL url)
+   {
+      HeirarchicalLoaderRepository3 repo = getRepository();
+      if (repo != null)
+      {
+         //The URL of the class loaded with my scoped classloader
+         if (url != null)
+         {
+            urlInfo = LOADER_REPOSITORY_UTIL.getURLInfo(getRepository(), urlInfo);
+            
+            URL[] myUrls = urlInfo.getLocalUrls();
+            String resource = url.toString();
+            for (int i = 0 ; i < myUrls.length ; i++)
+            {
+               if (resource.indexOf(myUrls[i].toString()) >= 0)
+               {
+                  return true;
+               }
+            }
+            return false;
+         }
+      }
+      return true;
+   }
+
+   public CtClass getCached(String classname)
+   {
+      if (classname == null)
+      {
+         return null;
+      }
+
+      if (generatedClasses.get(classname) != null)
+      {
+         //It is a new class, and this callback is probably coming from the frozen check when creating a new nested class
+         return super.getCached(classname);
+      }
+      
+      //Is this from the scoped classloader itself of from the parent?
+      String resourcename = getResourceName(classname);
+      URL url = getResourceUrlForClass(resourcename);
+      boolean isMine = isMine(url);
+      
+      if (isMine)
+      {
+         if (super.childFirstLookup)
+         {
+            //Parent delegation is false, attempt to get this class out of ourselves
+            CtClass clazz = super.getCachedLocally(classname);
+            if (clazz == null)
+            {
+               clazz = createCtClass(classname, false);
+               if (clazz != null)
+               {
+                  lockInCache(clazz);
+               }
+            }
+            if (clazz != null)
+            {
+               return clazz;
+            }
+         }
+         return super.getCached(classname);
+      }
+      
+
+      try
+      {
+         ClassPool pool = getCorrectPoolForResource(url);
+         return pool.get(classname);
+      }
+      catch (NotFoundException e)
+      {
+      }
+      return null;
+   }
+
+   private ClassPool getCorrectPoolForResource(URL url)
+   {
+      synchronized(AspectManager.getRegisteredCLs())
+      {
+         for(Iterator it = AspectManager.getRegisteredCLs().values().iterator() ; it.hasNext() ; )
+         {
+            AOPClassPool candidate = (AOPClassPool)it.next();
+            if (candidate.isUnloadedClassLoader())
+            {
+               AspectManager.instance().unregisterClassLoader(candidate.getClassLoader());
+               continue;
+            }
+            
+            if (candidate.getClassLoader() instanceof RepositoryClassLoader)
+            {
+               //Sometimes the ClassLoader is a proxy for MBeanProxyExt?!
+               RepositoryClassLoader rcl = (RepositoryClassLoader)candidate.getClassLoader();
+               URL[] urls = rcl.getClasspath();
+               String resource = url.toString();
+               for (int i = 0 ; i < urls.length ; i++)
+               {
+                  if (resource.indexOf(urls[i].toString()) >= 0)
+                  {
+                     return candidate;
+                  }
+               }
+            }
+         }
+      }
+
+      return AOPClassPool.createAOPClassPool(ClassPool.getDefault(), AOPClassPoolRepository.getInstance());
+   }
+}

Modified: branches/Branch_4_0/build/build-thirdparty.xml
===================================================================
--- branches/Branch_4_0/build/build-thirdparty.xml	2006-09-21 18:30:45 UTC (rev 57059)
+++ branches/Branch_4_0/build/build-thirdparty.xml	2006-09-21 19:06:34 UTC (rev 57060)
@@ -84,17 +84,17 @@
       <componentref name="ibm-wsdl4j" version="1.5.2jboss"/>
       <componentref name="jacorb" version="2.2.4jboss.patch1"/>
       <componentref name="javassist" version="3.3.0.GA"/>
-      <componentref name="jboss/aop" version="1.5.1.GA"/>
+      <componentref name="jboss/aop" version="1.5.2.GA"/>
       <componentref name="jboss/backport-concurrent" version="2.1.0.GA"/>
       <componentref name="jboss/cache" version="1.4.0.SP1"/>
       <componentref name="jboss/common" version="snapshot-Branch_1_0"/>
-      <componentref name="jboss/dom4j-jarjar" version="1.6.1"/>        
-      <componentref name="jboss/jbossretro-rt" version="1.0.2.GA"/>
+      <componentref name="jboss/dom4j-jarjar" version="1.6.1"/>
+      <componentref name="jboss/jbossretro-rt" version="1.0.3.GA"/>
       <componentref name="jboss/jbossws" version="1.0.3.GA"/>
       <componentref name="jboss/jbossws14" version="1.0.3.GA"/>
       <componentref name="jboss/jboss-ws4ee" version="4.0.4.SP1"/>
       <componentref name="jboss/jbossxb" version="1.0.0.CR6"/>
-      <componentref name="jboss/microcontainer" version="1.0.2"/>      
+      <componentref name="jboss/microcontainer" version="1.0.2"/>
       <componentref name="jboss/remoting" version="1.4.3.GA"/>
       <componentref name="jboss/serialization" version="1.0.2.GA"/>
       <componentref name="jfreechart" version="0.9.20"/>




More information about the jboss-cvs-commits mailing list