[jboss-cvs] JBossAS SVN: r83695 - in projects/aop/trunk: asintegration-core/src/main/java/org/jboss/aop/classpool and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jan 30 11:44:57 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-01-30 11:44:56 -0500 (Fri, 30 Jan 2009)
New Revision: 83695

Modified:
   projects/aop/trunk/asintegration-core/src/etc/jboss.properties
   projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ClassPoolToClassPoolDomainAdapter.java
   projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolFactory.java
   projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/ClassLoaderWithRepositorySanityTestCase.java
   projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/ClassPoolWithRepositoryTestCase.java
   projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java
Log:
[JBAOP-666] Take into account web deployments. They will be deployed in a sub-domain with the parent domain adapter pointing to the parent deployment's classloader

Modified: projects/aop/trunk/asintegration-core/src/etc/jboss.properties
===================================================================
--- projects/aop/trunk/asintegration-core/src/etc/jboss.properties	2009-01-30 15:59:00 UTC (rev 83694)
+++ projects/aop/trunk/asintegration-core/src/etc/jboss.properties	2009-01-30 16:44:56 UTC (rev 83695)
@@ -1,5 +1,5 @@
 # Properties file for the ant install scripts
 # Set the root of your jboss installation here 
-jboss.home=/Users/kabir/sourcecontrol/jboss-head/build/output/jboss-5.0.0.GA/
+jboss.home=/Users/kabir/sourcecontrol/jbossas/Branch_5_x/build/output/jboss-5.1.0.Beta1
 #Set the server configuration you want to patch here (e.g, all or default)
 jboss.config=all

Modified: projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ClassPoolToClassPoolDomainAdapter.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ClassPoolToClassPoolDomainAdapter.java	2009-01-30 15:59:00 UTC (rev 83694)
+++ projects/aop/trunk/asintegration-core/src/main/java/org/jboss/aop/classpool/ClassPoolToClassPoolDomainAdapter.java	2009-01-30 16:44:56 UTC (rev 83695)
@@ -36,11 +36,23 @@
    public ClassPoolToClassPoolDomainAdapter()
    {
       this.pool = initialiseParentClassLoader();
+      if (logger.isTraceEnabled()) logger.trace("Created " + this);
+      validate();
+   }
+   
+   public ClassPoolToClassPoolDomainAdapter(ClassPool pool)
+   {
+      this.pool = pool;
+      if (logger.isTraceEnabled()) logger.trace("Created " + this);
+      validate();
+   }
+
+   private void validate()
+   {
       if (pool == null)
       {
          throw new IllegalStateException("Null parent classpool");
       }
-      if (logger.isTraceEnabled()) logger.trace("Created " + this);
    }
    
    public ClassPool initialiseParentClassLoader()

Modified: projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolFactory.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolFactory.java	2009-01-30 15:59:00 UTC (rev 83694)
+++ projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClClassPoolFactory.java	2009-01-30 16:44:56 UTC (rev 83695)
@@ -26,10 +26,12 @@
 import javassist.scopedpool.ScopedClassPoolFactory;
 import javassist.scopedpool.ScopedClassPoolRepository;
 
+import org.jboss.aop.AspectManager;
 import org.jboss.aop.asintegration.jboss5.DomainRegistry;
 import org.jboss.aop.classpool.AbstractJBossClassPoolFactory;
 import org.jboss.aop.classpool.ClassPoolDomain;
 import org.jboss.aop.classpool.ClassPoolDomainRegistry;
+import org.jboss.aop.classpool.ClassPoolToClassPoolDomainAdapter;
 import org.jboss.aop.classpool.NonDelegatingClassPool;
 import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.ClassLoaderSystem;
@@ -93,6 +95,15 @@
             }
             parentPoolDomain = ClassPoolDomainRegistry.getInstance().getDomain(parentDomain);
          }
+         if (parentDomainName == null)
+         {
+            ClassLoader parentUnitLoader = registry.getParentUnitLoader(cl);
+            if (parentUnitLoader != null)
+            {
+               ClassPool parentUnitPool = AspectManager.getTopLevelAspectManager().registerClassLoader(parentUnitLoader);
+               parentPoolDomain = new ClassPoolToClassPoolDomainAdapter(parentUnitPool);
+            }
+         }
          poolDomain = new JBossClClassPoolDomain(domain.getName(), parentPoolDomain, domain.getParentPolicy(), registry);
          
          ClassPoolDomainRegistry.getInstance().addClassPoolDomain(domain, poolDomain);

Modified: projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/ClassLoaderWithRepositorySanityTestCase.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/ClassLoaderWithRepositorySanityTestCase.java	2009-01-30 15:59:00 UTC (rev 83694)
+++ projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/ClassLoaderWithRepositorySanityTestCase.java	2009-01-30 16:44:56 UTC (rev 83695)
@@ -362,29 +362,35 @@
       ClassLoader parent = createChildURLClassLoader(null, JAR_B_1);
       ClassLoader globalA = null;
       ClassLoader globalB = null;
+      ClassLoader globalC = null;
       try
       {
          final String domain = "CHILD";
          globalA = createChildDomainParentFirstClassLoader("A", domain, true, parent, JAR_A_1);
          Class<?> aFromGlobal = globalA.loadClass(CLASS_A);
          assertSame(globalA, aFromGlobal.getClassLoader());
+         Class<?> bFromGlobalA = globalA.loadClass(CLASS_B);
+         assertSame(parent, bFromGlobalA.getClassLoader());
 
          globalB = createChildDomainParentFirstClassLoader("B", domain, true, parent, JAR_B_2);
-         Class<?> bFromGlobalA = globalA.loadClass(CLASS_B);
-         assertSame(parent, bFromGlobalA.getClassLoader());
          Class<?> bFromParent = parent.loadClass(CLASS_B);
          assertSame(parent, bFromParent.getClassLoader());
          assertSame(bFromGlobalA, bFromParent);
          
          Class<?> bFromGlobalB = globalB.loadClass(CLASS_B);
          assertSame(bFromGlobalB, bFromParent);
+         
+         globalC = createChildDomainParentLastClassLoader("C", domain + "2", true, parent, JAR_B_2);
+         assertLoadClass(CLASS_B, globalC);
       }
       finally
       {
          unregisterClassLoader(globalA);
          unregisterClassLoader(globalB);
+         unregisterClassLoader(globalC);
          unregisterClassLoader(parent);
          unregisterDomain(globalA);
+         unregisterDomain(globalC);
       }
    }
 

Modified: projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/ClassPoolWithRepositoryTestCase.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/ClassPoolWithRepositoryTestCase.java	2009-01-30 15:59:00 UTC (rev 83694)
+++ projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/ClassPoolWithRepositoryTestCase.java	2009-01-30 16:44:56 UTC (rev 83695)
@@ -21,14 +21,13 @@
 */ 
 package org.jboss.test.aop.classpool.jbosscl.test;
 
-import org.jboss.aop.classpool.ClassPoolDomain;
-import org.jboss.classloader.spi.ClassLoaderDomain;
-
 import javassist.ClassPool;
 import javassist.CtClass;
 import javassist.NotFoundException;
 import junit.framework.Test;
 
+import org.jboss.classloader.spi.ClassLoaderDomain;
+
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
@@ -723,8 +722,6 @@
       assertSame(b.getClassPool(), bArray.getClassPool());
    }
 
-/* 
-   The folllowing two tests are probably not very realistic http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4195022#4195022
    public void testClassLoaderlWithParentClassLoader() throws Exception
    {
       ClassPool parent = createChildURLClassPool(null, JAR_B_1);
@@ -747,35 +744,43 @@
       }
    }
 
-   If we ever need to implement this, this test needs to have the latest additions to ClassLoaderWithRepositorySanityTestCase
    public void testClassLoaderWithParentClassLoaderAndSameClassInDomain() throws Exception
    {
       ClassPool parent = createChildURLClassPool(null, JAR_B_1);
       ClassPool globalA = null;
       ClassPool globalB = null;
+      ClassPool globalC = null;
       try
       {
          final String domain = "CHILD";
          globalA = createChildDomainParentFirstClassPool("A", domain, true, parent, JAR_A_1);
          CtClass aFromGlobal = globalA.get(CLASS_A);
          assertSame(globalA, aFromGlobal.getClassPool());
+         CtClass bFromGlobalA = globalA.get(CLASS_B);
+         assertSame(parent, bFromGlobalA.getClassPool());
 
-         globalB = createChildDomainParentFirstClassPool("B", domain, true, parent, JAR_B_1);
-         CtClass bFromGlobalA = globalA.get(CLASS_B);
-         assertSame(globalB, bFromGlobalA.getClassPool());
+         globalB = createChildDomainParentFirstClassPool("B", domain, true, parent, JAR_B_2);
          CtClass bFromParent = parent.get(CLASS_B);
          assertSame(parent, bFromParent.getClassPool());
-         assertNotSame(bFromGlobalA, bFromParent);
+         assertSame(bFromGlobalA, bFromParent);
+         
+         CtClass bFromGlobalB = globalB.get(CLASS_B);
+         assertSame(bFromGlobalB, bFromParent);
+         
+         globalC = createChildDomainParentLastClassPool("C", domain + "2", true, parent, JAR_B_2);
+         assertLoadCtClass(CLASS_B, globalC);
       }
       finally
       {
          unregisterClassPool(globalA);
          unregisterClassPool(globalB);
+         unregisterClassPool(globalC);
          unregisterClassPool(parent);
          unregisterDomain(globalA);
+         unregisterDomain(globalC);
       }
    }
-*/
+
    private void checkCanLoadString(ClassPool poolA, ClassPool poolB) throws NotFoundException
    {
       CtClass strA = poolA.getCtClass(STRING);

Modified: projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java	2009-01-30 15:59:00 UTC (rev 83694)
+++ projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java	2009-01-30 16:44:56 UTC (rev 83695)
@@ -388,7 +388,7 @@
       {
          result.setFactory(factory);
       }
-      ClassLoader loader = assertClassLoader(factory);
+      ClassLoader loader = assertClassLoader(factory, parent);
 
       return loader;
    }
@@ -522,8 +522,8 @@
    protected ClassPool createChildDomainParentFirstClassPool(String name, String domainName, boolean importAll, ClassPool parent, URL... urls) throws Exception
    {
       return createChildDomainParentFirstClassPool(null, name, domainName, importAll, parent, urls);
+   }
 
-   }
    protected ClassPool createChildDomainParentFirstClassPool(Result result, String name, String domainName, boolean importAll, ClassPool parent, URL... urls) throws Exception
    {
       ClassLoader loader = createChildDomainParentFirstClassLoader(result, name, domainName, importAll, parent.getClassLoader(), urls);
@@ -552,6 +552,17 @@
       return AspectManager.instance().registerClassLoader(loader);
    }
 
+   protected ClassPool createChildDomainParentLastClassPool(String name, String domainName, boolean importAll, ClassPool parent, URL... urls) throws Exception
+   {
+      return createChildDomainParentLastClassPool(null, name, domainName, importAll, parent, urls);
+   }
+
+   protected ClassPool createChildDomainParentLastClassPool(Result result, String name, String domainName, boolean importAll, ClassPool parent, URL... urls) throws Exception
+   {
+      ClassLoader loader = createChildDomainParentLastClassLoader(result, name, domainName, importAll, parent.getClassLoader(), urls);
+      return AspectManager.instance().registerClassLoader(loader);
+   }
+   
    protected ClassPool createChildDomainParentLastClassPool(String name, String domainName, String parentDomainName, boolean importAll, URL... urls) throws Exception
    {
       return createChildDomainParentLastClassPool(null, name, domainName, parentDomainName, importAll, urls);
@@ -609,14 +620,19 @@
    
    protected void registerModule(ClassLoader loader, Module module)
    {
+      registerModule(loader, module, null);
+   }
+   
+   protected void registerModule(ClassLoader loader, Module module, ClassLoader parent)
+   {
       if (getSystem() != domainRegistry.getSystem())
       {
          domainRegistry.setSystem(getSystem());
       }
-      //TODO I have just hacked the domain and the parentUnitLoader here so this might cause problems
+      //TODO I have just hacked the domain here so this might cause problems
       //with the tests if we try to do weaving. However, it should be fine while just testing pools
       //and loaders
-      domainRegistry.initMapsForLoader(loader, module, null, null);
+      domainRegistry.initMapsForLoader(loader, module, null, parent);
    }
    
    protected void unregisterModule(ClassLoader loader)
@@ -750,13 +766,18 @@
 
    protected ClassLoader assertClassLoader(TestVFSClassLoaderFactory factory) throws Exception
    {
+      return assertClassLoader(factory, null);
+   }
+   
+   protected ClassLoader assertClassLoader(TestVFSClassLoaderFactory factory, ClassLoader parent) throws Exception
+   {
       try
       {
          Object obj = getBean(getContextName(factory));
          ClassLoader loader = assertInstanceOf(obj, ClassLoader.class);
          
          Module module = assertModule(getContextName(factory));
-         registerModule(loader, module);
+         registerModule(loader, module, parent);
          loaderNameDeploymentRegistry.registerLoaderName(factory.getName(), loader);
          
          return loader;




More information about the jboss-cvs-commits mailing list