[jboss-cvs] JBossAS SVN: r82824 - in projects/aop/trunk/asintegration-mc: src/main/org/jboss/aop/asintegration/jboss5 and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jan 13 14:23:48 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-01-13 14:23:48 -0500 (Tue, 13 Jan 2009)
New Revision: 82824

Modified:
   projects/aop/trunk/asintegration-mc/.classpath
   projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/asintegration/jboss5/DomainRegistry.java
   projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/asintegration/jboss5/VFSClassLoaderDomainRegistry.java
   projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java
   projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolFactory.java
Log:
[JBAOP-666] Add commented out code for testing JBCL-78 and add ability to obtain a Module from a ClassLoader from the registry

Modified: projects/aop/trunk/asintegration-mc/.classpath
===================================================================
--- projects/aop/trunk/asintegration-mc/.classpath	2009-01-13 19:11:31 UTC (rev 82823)
+++ projects/aop/trunk/asintegration-mc/.classpath	2009-01-13 19:23:48 UTC (rev 82824)
@@ -28,10 +28,10 @@
 	<classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2-sources.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2-sources.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2-sources.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloader/2.0.1.GA/jboss-classloader-2.0.1.GA.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloader/2.0.1.GA/jboss-classloader-2.0.1.GA-sources.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading/2.0.1.GA/jboss-classloading-2.0.1.GA.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading/2.0.1.GA/jboss-classloading-2.0.1.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloader/2.2.0-SNAPSHOT/jboss-classloader-2.2.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloader/2.2.0-SNAPSHOT/jboss-classloader-2.2.0-SNAPSHOT-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading/2.2.0-SNAPSHOT/jboss-classloading-2.2.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading/2.2.0-SNAPSHOT/jboss-classloading-2.2.0-SNAPSHOT-sources.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.3.GA/jboss-classloading-spi-5.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.3.GA/jboss-classloading-spi-5.0.3.GA-sources.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.1.GA/jboss-classloading-vfs-2.0.1.GA.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.1.GA/jboss-classloading-vfs-2.0.1.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.2.0-SNAPSHOT/jboss-classloading-vfs-2.2.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.2.0-SNAPSHOT/jboss-classloading-vfs-2.2.0-SNAPSHOT-sources.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.10.GA/jboss-common-core-2.2.10.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.10.GA/jboss-common-core-2.2.10.GA-sources.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1-sources.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.3.GA/jboss-deployers-client-2.0.3.GA.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.3.GA/jboss-deployers-client-2.0.3.GA-sources.jar"/>

Modified: projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/asintegration/jboss5/DomainRegistry.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/asintegration/jboss5/DomainRegistry.java	2009-01-13 19:11:31 UTC (rev 82823)
+++ projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/asintegration/jboss5/DomainRegistry.java	2009-01-13 19:23:48 UTC (rev 82824)
@@ -47,4 +47,5 @@
 
    Module getModule(ClassLoader loader);
 
+   ClassLoader getClassLoader(Module module);
 }
\ No newline at end of file

Modified: projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/asintegration/jboss5/VFSClassLoaderDomainRegistry.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/asintegration/jboss5/VFSClassLoaderDomainRegistry.java	2009-01-13 19:11:31 UTC (rev 82823)
+++ projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/asintegration/jboss5/VFSClassLoaderDomainRegistry.java	2009-01-13 19:23:48 UTC (rev 82824)
@@ -53,6 +53,9 @@
    /** Modules by classloader */
    private Map<ClassLoader, WeakReference<Module>> classLoaderModules = new WeakHashMap<ClassLoader, WeakReference<Module>>();
    
+   /** classloaders by module */
+   private Map<Module, WeakReference<ClassLoader>> moduleClassLoaders = new WeakHashMap<Module, WeakReference<ClassLoader>>();
+
    private Map<ClassLoaderDomain, Integer> classLoaderDomainReferenceCounts = new WeakHashMap<ClassLoaderDomain, Integer>();
    
    /**
@@ -93,6 +96,7 @@
          classLoaderDomainsByLoader.put(loader, new WeakReference<ClassLoaderDomain>(clDomain));
          classLoaderUnitParents.put(loader, new WeakReference<ClassLoader>(parentUnitLoader));
          classLoaderModules.put(loader, new WeakReference<Module>(module));
+         moduleClassLoaders.put(module, new WeakReference<ClassLoader>(loader));
          ret = true;
       }
       
@@ -126,7 +130,15 @@
             classLoaderDomainReferenceCounts.put(clDomain, ++cnt);
          }
          classLoaderUnitParents.remove(loader);
-         classLoaderModules.remove(loader);
+         WeakReference<Module> moduleRef = classLoaderModules.remove(loader);
+         if (moduleRef != null)
+         {
+            Module module = moduleRef.get();
+            if (module != null)
+            {
+               moduleClassLoaders.remove(module);
+            }
+         }
       }
    }
 
@@ -180,4 +192,14 @@
       }
       return null;
    }
+   
+   public synchronized ClassLoader getClassLoader(Module module)
+   {
+      WeakReference<ClassLoader> loaderRef = moduleClassLoaders.get(module);
+      if (loaderRef != null)
+      {
+         return loaderRef.get();
+      }
+      return null;
+   }
 }

Modified: projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java	2009-01-13 19:11:31 UTC (rev 82823)
+++ projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolDomain.java	2009-01-13 19:23:48 UTC (rev 82824)
@@ -35,6 +35,8 @@
 import javassist.NotFoundException;
 
 import org.jboss.aop.AspectManager;
+import org.jboss.aop.asintegration.jboss5.DomainRegistry;
+import org.jboss.aop.classpool.BaseClassPool;
 import org.jboss.aop.classpool.BaseClassPoolDomain;
 import org.jboss.aop.classpool.ClassPoolDomain;
 import org.jboss.aop.classpool.DelegatingClassPool;
@@ -53,8 +55,9 @@
    final static List<DelegatingClassPool> EMPTY_LIST = Collections.unmodifiableList(Collections.EMPTY_LIST);
    
    AspectManager manager = AspectManager.instance();
+   DomainRegistry registry;
    
-   public JBossClClassPoolDomain(String domainName, ClassPoolDomain parent, ParentPolicy parentPolicy)
+   public JBossClClassPoolDomain(String domainName, ClassPoolDomain parent, ParentPolicy parentPolicy, DomainRegistry registry)
    {
       super(domainName, 
             new JBossClParentDelegationStrategy(
@@ -62,6 +65,7 @@
                   parentPolicy, 
                   JBossClClassPoolToClassPoolDomainAdaptorFactory.getInstance())
       );
+      this.registry = registry;
    }
 
    synchronized void setupPoolsByPackage(DelegatingClassPool pool)
@@ -126,26 +130,7 @@
       //Check imports first
       if (clazz == null && module != null)
       {
-         List<? extends DelegateLoader> delegates = module.getDelegates();
-         if (delegates != null)
-         {
-            for (DelegateLoader delegate : delegates)
-            {
-               //TODO This is a hack, need a proper API in jboss-cl
-               System.err.println("HACK in JBossClClassPoolDomain");
-               ClassLoader loader = getBaseClassLoaderFromDelegateHack(delegate);
-               
-               //TODO Should be a nicer way to do this
-               ClassPool pool = manager.findClassPool(loader);
-               try
-               {
-                  clazz = pool.get(classname);
-               }
-               catch(NotFoundException e)
-               {
-               }
-            }
-         }
+         clazz = getCtClassFromModule(module, classname);
       }
       
       //Try to check the initiating pool itself
@@ -181,8 +166,70 @@
       return new ArrayList<DelegatingClassPool>(poolSet);
    }
 
+   private CtClass getCtClassFromModule(Module module, String classname)
+   {
+//      return getCtClassFromModuleHack(module, classname);
+      return getCtClassFromDelegates(module, classname);
+   }
+
+//   //TODO This should not use reflection once JBCL-78 has been released
+//   private CtClass getCtClassFromModuleHack(Module module, String classname)
+//   {
+//      Module found = null;
+//      try
+//      {
+//         found = module.getModuleForClass(classname);
+//      }
+//      catch (ClassNotFoundException e1)
+//      {
+//      }
+//      if (found == module)
+//      {
+//         return null;
+//      }
+//      ClassLoader foundLoader = registry.getClassLoader(found);
+//      ClassPool pool = manager.findClassPool(foundLoader);
+//      try
+//      {
+//         if (pool instanceof DelegatingClassPool)
+//         {
+//            return getCachedOrCreate((DelegatingClassPool)pool, classname, true);
+//         }
+//         return pool.get(classname);
+//      }
+//      catch(NotFoundException e)
+//      {
+//      }
+//      return null;
+//   }
    
-   //TODO This should be replaced with a proper call once jboss-cl allows us to get this
+   //TODO Delete this once JBCL-78 has been released
+   private CtClass getCtClassFromDelegates(Module module, String classname)
+   {
+      List<? extends DelegateLoader> delegates = module.getDelegates();
+      if (delegates != null)
+      {
+         for (DelegateLoader delegate : delegates)
+         {
+            //TODO This is a hack, need a proper API in jboss-cl
+            System.err.println("HACK in JBossClClassPoolDomain");
+            ClassLoader loader = getBaseClassLoaderFromDelegateHack(delegate);
+            
+            //TODO Should be a nicer way to do this
+            ClassPool pool = manager.findClassPool(loader);
+            try
+            {
+               return pool.get(classname);
+            }
+            catch(NotFoundException e)
+            {
+            }
+         }
+      }
+      return null;
+   }
+   
+   //TODO Delete this once JBCL-78 has been released
    private static ClassLoader getBaseClassLoaderFromDelegateHack(DelegateLoader loader)
    {
       Class<?> clazz = loader.getClass();

Modified: projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolFactory.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolFactory.java	2009-01-13 19:11:31 UTC (rev 82823)
+++ projects/aop/trunk/asintegration-mc/src/main/org/jboss/aop/classpool/jbosscl/JBossClClassPoolFactory.java	2009-01-13 19:23:48 UTC (rev 82824)
@@ -93,7 +93,7 @@
             }
             parentPoolDomain = ClassPoolDomainRegistry.getInstance().getDomain(parentDomain);
          }
-         poolDomain = new JBossClClassPoolDomain(domain.getName(), parentPoolDomain, domain.getParentPolicy());
+         poolDomain = new JBossClClassPoolDomain(domain.getName(), parentPoolDomain, domain.getParentPolicy(), registry);
          
          ClassPoolDomainRegistry.getInstance().addClassPoolDomain(domain, poolDomain);
       }




More information about the jboss-cvs-commits mailing list