[jboss-cvs] JBossAS SVN: r96118 - in projects/jboss-classpool/trunk: src/main/java/org/jboss/classpool/domain and 6 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Nov 6 13:58:16 EST 2009


Author: flavia.rainone at jboss.com
Date: 2009-11-06 13:58:16 -0500 (Fri, 06 Nov 2009)
New Revision: 96118

Added:
   projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/support/excluded/d/
   projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/support/excluded/d/D.java
Modified:
   projects/jboss-classpool/trunk/pom.xml
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdapter.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolDomain.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPoolFactory.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClParentDelegationStrategy.java
   projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/SecurityActions.java
   projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassLoaderWithHierarchicalDomainSanityTestCase.java
   projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassLoaderWithRepositorySanityTestCase.java
   projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassPoolWithHierarchicalDomainTestCase.java
   projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassPoolWithRepositoryTestCase.java
   projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/JBossClClassPoolTest.java
   projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/support/SupportClasses.java
Log:
[JBREFLECT-65] Replaced previous fix by a call to DomainREgistry.initMapsForLoader on RegisterModuleCallback. Added a few tests.

Modified: projects/jboss-classpool/trunk/pom.xml
===================================================================
--- projects/jboss-classpool/trunk/pom.xml	2009-11-06 18:33:52 UTC (rev 96117)
+++ projects/jboss-classpool/trunk/pom.xml	2009-11-06 18:58:16 UTC (rev 96118)
@@ -135,6 +135,9 @@
                 <jar destfile="${project.build.directory}/c2.jar"
                   basedir="${project.build.testOutputDirectory}" 
                   includes="org/jboss/test/classpool/support/excluded/c/*.class"/>
+                <jar destfile="${project.build.directory}/d.jar"
+                  basedir="${project.build.testOutputDirectory}" 
+                  includes="org/jboss/test/classpool/support/excluded/d/*.class"/>
                 <jar destfile="${project.build.directory}/replacereferences-parent.jar">
                   <fileset dir="${project.build.testOutputDirectory}">
                      <include name="org/jboss/test/classpool/support/excluded/replacereferences/**"/>

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdapter.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdapter.java	2009-11-06 18:33:52 UTC (rev 96117)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdapter.java	2009-11-06 18:58:16 UTC (rev 96118)
@@ -61,7 +61,7 @@
    }
    
    // TODO JBREFLECT-65 FIXME this shouldn't be return the default classpool always
-   public ClassPool initialiseParentClassLoader()
+   protected ClassPool initialiseParentClassLoader()
    {
       return ClassPool.getDefault();
    }

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java	2009-11-06 18:33:52 UTC (rev 96117)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java	2009-11-06 18:58:16 UTC (rev 96118)
@@ -30,6 +30,8 @@
 import org.jboss.classloading.spi.dependency.Module;
 import org.jboss.classloading.spi.dependency.ModuleRegistry;
 import org.jboss.classpool.spi.ClassPoolRepository;
+import org.jboss.deployers.plugins.classloading.AbstractDeploymentClassLoaderPolicyModule;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.logging.Logger;
 
 /**
@@ -45,7 +47,13 @@
    
    private Set<Module> registeredModules = new HashSet<Module>();
    private Set<Module> unregisteredModules = new HashSet<Module>();
-
+   private DomainRegistry domainRegistry;
+   
+   public RegisterModuleCallback(DomainRegistry domainRegistry)
+   {
+      this.domainRegistry = domainRegistry;
+   }
+   
    public synchronized void addModule(Module module)
    {
       logger.debug("Adding module " + module);
@@ -71,5 +79,12 @@
       logger.debug("Registering module " + module);
       registeredModules.add(module);
       unregisteredModules.remove(module);
+      if (module instanceof AbstractDeploymentClassLoaderPolicyModule)
+      {
+         ClassLoader cl = ClassLoading.getClassLoaderForModule(module);
+         DeploymentUnit unit = AbstractDeploymentClassLoaderPolicyModule.class.cast(module).getDeploymentUnit();
+         ClassLoader parentUnitLoader = unit.isTopLevel() ? null : unit.getParent().getClassLoader();
+         domainRegistry.initMapsForLoader(cl, module, parentUnitLoader);
+      }
    }
 }

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolDomain.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolDomain.java	2009-11-06 18:33:52 UTC (rev 96117)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolDomain.java	2009-11-06 18:58:16 UTC (rev 96118)
@@ -59,6 +59,15 @@
    
    DomainRegistry registry;
    
+   public JBossClClassPoolDomain(String domainName, ParentPolicy parentPolicy, DomainRegistry registry)
+   {
+      super(domainName, 
+            new JBossClParentDelegationStrategy(parentPolicy, 
+                  JBossClClassPoolToClassPoolDomainAdaptorFactory.getInstance())
+      );
+      this.registry = registry;
+   }
+   
    public JBossClClassPoolDomain(String domainName, ClassPoolDomain parent, ParentPolicy parentPolicy, DomainRegistry registry)
    {
       super(domainName, 

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPoolFactory.java	2009-11-06 18:33:52 UTC (rev 96117)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPoolFactory.java	2009-11-06 18:58:16 UTC (rev 96118)
@@ -101,7 +101,6 @@
       if (poolDomain == null)
       {
          String parentDomainName = domain.getParentDomainName();
-         ClassPoolDomain parentPoolDomain = null;
          if (parentDomainName != null)
          {
             ClassLoaderDomain parentDomain = sys.getDomain(parentDomainName);
@@ -109,44 +108,22 @@
             {
                throw new RuntimeException("No domain found, domain name: " + parentDomainName);
             }
-            parentPoolDomain = ClassPoolDomainRegistry.getInstance().getDomain(parentDomain);
+            ClassPoolDomain parentPoolDomain = ClassPoolDomainRegistry.getInstance().getDomain(parentDomain);
+            poolDomain = new JBossClClassPoolDomain(domain.getName(), parentPoolDomain, domain.getParentPolicy(), registry);
          }
          else
          {
             ClassLoader parentUnitLoader = registry.getParentUnitLoader(cl);
-            if (parentUnitLoader != null)
+            ClassPool parentUnitPool = parentUnitLoader == null? null: ClassPoolRepository.getInstance().registerClassLoader(parentUnitLoader);
+            if (parentUnitPool== null)
             {
-               ClassPool parentUnitPool = ClassPoolRepository.getInstance().registerClassLoader(parentUnitLoader);
-               parentPoolDomain = new ClassPoolToClassPoolDomainAdapter(parentUnitPool);
+               poolDomain = new JBossClClassPoolDomain(domain.getName(), domain.getParentPolicy(), registry);
             }
-         }
-         if (domain.getParent() instanceof ClassLoaderToLoaderAdapter)
-         {
-            // JBREFLECT-65 fix hack
-            try
+            else
             {
-               ClassLoaderToLoaderAdapter cp2la = (ClassLoaderToLoaderAdapter)domain.getParent();
-               ClassLoader loader = SecurityActions.getClassLoader(cp2la);
-               ClassPool parentPool = ClassPoolRepository.getInstance().registerClassLoader(loader);
-               if (parentPool == null)
-               {
-                  poolDomain = new JBossClClassPoolDomain(domain.getName(), parentPoolDomain, domain.getParentPolicy(), registry);
-               }
-               else
-               {
-                  poolDomain = new JBossClClassPoolDomain(domain.getName(), parentPool, domain.getParentPolicy(), registry);
-               }
+               poolDomain = new JBossClClassPoolDomain(domain.getName(), parentUnitPool, domain.getParentPolicy(), registry);
             }
-            catch(NullPointerException npe) // FIXME - ugh, since when are we handling code by catching NPEs?
-            {
-               poolDomain = new JBossClClassPoolDomain(domain.getName(), parentPoolDomain, domain.getParentPolicy(), registry);
-            }
          }
-         else
-         {
-            poolDomain = new JBossClClassPoolDomain(domain.getName(), parentPoolDomain, domain.getParentPolicy(), registry);
-         }
-         
          ClassPoolDomainRegistry.getInstance().addClassPoolDomain(domain, poolDomain);
       }
       return poolDomain;

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClParentDelegationStrategy.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClParentDelegationStrategy.java	2009-11-06 18:33:52 UTC (rev 96117)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClParentDelegationStrategy.java	2009-11-06 18:58:16 UTC (rev 96118)
@@ -40,6 +40,16 @@
 {
    ParentPolicy parentPolicy;
    
+   JBossClParentDelegationStrategy(ParentPolicy parentPolicy, ClassPoolToClassPoolDomainAdaptorFactory adaptorFactory)
+   {
+      super((ClassPoolDomain) null, adaptorFactory);
+      if (parentPolicy == null)
+      {
+         throw new IllegalStateException("Null parent policy");
+      }
+      this.parentPolicy = parentPolicy;
+   }
+   
    JBossClParentDelegationStrategy(ClassPoolDomain parent, ParentPolicy parentPolicy, ClassPoolToClassPoolDomainAdaptorFactory adaptorFactory)
    {
       super(parent, adaptorFactory);

Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/SecurityActions.java	2009-11-06 18:33:52 UTC (rev 96117)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/SecurityActions.java	2009-11-06 18:58:16 UTC (rev 96118)
@@ -37,40 +37,6 @@
  */
 class SecurityActions
 {
-   private static final Method getClassLoader;
-
-   static
-   {
-      getClassLoader = AccessController.doPrivileged(new PrivilegedAction<Method>()
-      {
-         public Method run()
-         {
-            try
-            {
-               Method method = BaseClassLoaderSource.class.getDeclaredMethod("getClassLoader");
-               method.setAccessible(true);
-               return method;
-            }
-            catch (NoSuchMethodException e)
-            {
-               throw new RuntimeException("Cannot get classloader from " + BaseClassLoaderSource.class.getName(), e);
-            }
-         }
-      });
-   }
-
-   static ClassLoader getClassLoader(BaseClassLoaderSource clSource)
-   {
-      try
-      {
-         return (ClassLoader)getClassLoader.invoke(clSource);
-      }
-      catch (Exception e)
-      {
-         throw new RuntimeException(e);
-      }
-   }
-
    interface GetClassLoaderAction
    {
       ClassLoader getClassLoader(Class<?> clazz);

Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassLoaderWithHierarchicalDomainSanityTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassLoaderWithHierarchicalDomainSanityTestCase.java	2009-11-06 18:33:52 UTC (rev 96117)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassLoaderWithHierarchicalDomainSanityTestCase.java	2009-11-06 18:58:16 UTC (rev 96118)
@@ -382,6 +382,43 @@
       }
    }
    
+   // JBREFLECT-65
+   public void testParentOtherDomainClassloader() throws Exception
+   {
+      ClassLoader clParentA = null;
+      Result resultParentA = new Result();
+      final String parentDomainName = "ParentDomain";
+      try
+      {
+         clParentA = createChildDomainParentFirstClassLoader(resultParentA, "aParent", parentDomainName, true, JAR_A_1);
+         assertLoadClass(CLASS_A, clParentA);
+         assertCannotLoadClass(CLASS_B, clParentA);
+         
+         ClassLoader clB = null;
+         Result resultB = new Result();
+         final String childDomainName = "ChildDomain";
+         try
+         {
+            BundleInfoBuilder builderB = BundleInfoBuilder.getBuilder().
+               createRequirePackage(PACKAGE_A);
+            clB = createChildDomainParentFirstClassLoader(resultB, "b", childDomainName, parentDomainName, builderB, JAR_B_1);
+            assertLoadClass(CLASS_A, clParentA);
+            assertLoadClass(CLASS_B, clB);
+            assertLoadClass(CLASS_A, clB, clParentA);
+         }
+         finally
+         {
+            unregisterClassLoader(clB);
+            unregisterDomain(childDomainName);
+         }
+      }
+      finally
+      {
+         unregisterClassLoader(clParentA);
+         unregisterDomain(parentDomainName);
+      }
+   }
+   
    public void testParentOtherDomainLazy() throws Exception
    {
       ClassLoader clB = null;
@@ -430,7 +467,6 @@
       assertNoClassLoader(resultB);
    }
 
-   // TODO: FLAVIA eu não entendo este teste
    public void testParentRedeployOtherDomain() throws Exception
    {
       ClassLoader clB = null;

Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassLoaderWithRepositorySanityTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassLoaderWithRepositorySanityTestCase.java	2009-11-06 18:33:52 UTC (rev 96117)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassLoaderWithRepositorySanityTestCase.java	2009-11-06 18:58:16 UTC (rev 96118)
@@ -1,29 +1,33 @@
 /*
-* 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.
-*/ 
+ * 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.classpool.jbosscl.test;
 
 import static org.jboss.test.classpool.support.SupportClasses.CLASS_A;
 import static org.jboss.test.classpool.support.SupportClasses.CLASS_B;
 import static org.jboss.test.classpool.support.SupportClasses.CLASS_C;
+import static org.jboss.test.classpool.support.SupportClasses.CLASS_D;
+
+import java.lang.reflect.Method;
+
 import junit.framework.Test;
 
 import org.jboss.classloader.spi.ClassLoaderDomain;
@@ -32,6 +36,7 @@
  * Tests the behaviour of the new classloaders
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @author <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
  * @version $Revision$
  */
 public class ClassLoaderWithRepositorySanityTestCase extends JBossClClassPoolTest
@@ -350,6 +355,7 @@
          assertSame(parent, bFromGlobal.getClassLoader());
          Class<?> bFromParent = parent.loadClass(CLASS_B);
          assertSame(bFromGlobal, bFromParent);
+         assertCannotLoadClass(parent, CLASS_A);
       }
       finally
       {
@@ -358,6 +364,35 @@
          unregisterDomain(global);
       }
    }
+   
+   // TODO JBREFLECT-65 undeploy e parent last
+   
+   public void testClassLoaderWithParentClassLoaderAndCrossReference() throws Exception
+   {
+      ClassLoader parent = createChildURLClassLoader(null, JAR_B_1);
+      ClassLoader global = null;
+      try
+      {
+         global = createChildDomainParentLastClassLoader("D", "D", true, parent, JAR_D);
+         Class<?> dFromGlobal = global.loadClass(CLASS_D);
+         assertSame(global, dFromGlobal.getClassLoader());
+         Class<?> bFromGlobal = global.loadClass(CLASS_B);
+         assertSame(parent, bFromGlobal.getClassLoader());
+         Class<?> bFromParent = parent.loadClass(CLASS_B);
+         assertSame(bFromGlobal, bFromParent);
+         assertCannotLoadClass(parent, CLASS_D);
+         
+         Method method = dFromGlobal.getDeclaredMethod("getB");
+         assertSame(method.getReturnType(), bFromParent);
+         
+      }
+      finally
+      {
+         unregisterClassLoader(global);
+         unregisterClassLoader(parent);
+         unregisterDomain(global);
+      }
+   }
 
    
    public void testClassLoaderWithParentClassLoaderAndSameClassInDomain() throws Exception

Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassPoolWithHierarchicalDomainTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassPoolWithHierarchicalDomainTestCase.java	2009-11-06 18:33:52 UTC (rev 96117)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassPoolWithHierarchicalDomainTestCase.java	2009-11-06 18:58:16 UTC (rev 96118)
@@ -383,6 +383,42 @@
       }
    }
    
+   public void testParentOtherDomainWithClassLoaderAdapter() throws Exception
+   {
+      ClassPool clParentA = null;
+      Result resultParentA = new Result();
+      final String parentDomainName = "ParentDomain";
+      try
+      {
+         clParentA = createChildDomainParentFirstClassPool(resultParentA, "aParent", parentDomainName, true, JAR_A_1);
+         assertLoadCtClass(CLASS_A, clParentA);
+         assertCannotLoadCtClass(CLASS_B, clParentA);
+         
+         ClassPool poolB = null;
+         Result resultB = new Result();
+         final String childDomainName = "ChildDomain";
+         try
+         {
+            BundleInfoBuilder builderB = BundleInfoBuilder.getBuilder().
+               createRequirePackage(PACKAGE_A);
+            poolB = createChildDomainParentFirstClassPool(resultB, "b", childDomainName, parentDomainName, builderB, JAR_B_1);
+            assertLoadCtClass(CLASS_A, clParentA);
+            assertLoadCtClass(CLASS_B, poolB);
+            assertLoadCtClass(CLASS_A, poolB, clParentA);
+         }
+         finally
+         {
+            unregisterClassPool(poolB);
+            unregisterDomain(childDomainName);
+         }
+      }
+      finally
+      {
+         unregisterClassPool(clParentA);
+         unregisterDomain(parentDomainName);
+      }
+   }
+   
    public void testParentOtherDomainLazy() throws Exception
    {
       ClassPool poolB = null;

Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassPoolWithRepositoryTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassPoolWithRepositoryTestCase.java	2009-11-06 18:33:52 UTC (rev 96117)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassPoolWithRepositoryTestCase.java	2009-11-06 18:58:16 UTC (rev 96118)
@@ -24,6 +24,7 @@
 import static org.jboss.test.classpool.support.SupportClasses.CLASS_A;
 import static org.jboss.test.classpool.support.SupportClasses.CLASS_B;
 import static org.jboss.test.classpool.support.SupportClasses.CLASS_C;
+import static org.jboss.test.classpool.support.SupportClasses.CLASS_D;
 import static org.jboss.test.classpool.support.SupportClasses.PACKAGE_A;
 import static org.jboss.test.classpool.support.SupportClasses.PACKAGE_B;
 import static org.jboss.test.classpool.support.SupportClasses.PACKAGE_C;
@@ -32,6 +33,7 @@
 
 import javassist.ClassPool;
 import javassist.CtClass;
+import javassist.CtMethod;
 import javassist.NotFoundException;
 import junit.framework.Test;
 
@@ -779,6 +781,7 @@
          assertSame(parent, bFromGlobal.getClassPool());
          CtClass bFromParent = parent.get(CLASS_B);
          assertSame(bFromGlobal, bFromParent);
+         assertCannotLoadCtClass(parent, CLASS_A);
       }
       finally
       {
@@ -788,6 +791,33 @@
       }
    }
 
+   public void testClassLoaderWithParentClassLoaderAndCrossReference() throws Exception
+   {
+      ClassPool parent = createChildURLClassPool(null, JAR_B_1);
+      ClassPool global = null;
+      try
+      {
+         global = createChildDomainParentLastClassPool("D", "D", true, parent, JAR_D);
+         CtClass dFromGlobal = global.get(CLASS_D);
+         assertSame(global, dFromGlobal.getClassPool());
+         CtClass bFromGlobal = global.get(CLASS_B);
+         assertSame(parent, bFromGlobal.getClassPool());
+         CtClass bFromParent = parent.get(CLASS_B);
+         assertSame(bFromGlobal, bFromParent);
+         assertCannotLoadCtClass(parent, CLASS_D);
+         
+         CtMethod method = dFromGlobal.getDeclaredMethod("getB");
+         assertSame(method.getReturnType(), bFromParent);
+         
+      }
+      finally
+      {
+         unregisterClassPool(global);
+         unregisterClassPool(parent);
+         unregisterDomain(global);
+      }
+   }
+   
    public void testClassLoaderWithParentClassLoaderAndSameClassInDomain() throws Exception
    {
       ClassPool parent = createChildURLClassPool(null, JAR_B_1);

Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/JBossClClassPoolTest.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/JBossClClassPoolTest.java	2009-11-06 18:33:52 UTC (rev 96117)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/JBossClClassPoolTest.java	2009-11-06 18:58:16 UTC (rev 96118)
@@ -78,6 +78,7 @@
    public final static URL JAR_B_2 = getURLRelativeToProjectRoot(SupportClasses.JAR_B_2);
    public final static URL JAR_C_1 = getURLRelativeToProjectRoot(SupportClasses.JAR_C_1);
    public final static URL JAR_C_2 = getURLRelativeToProjectRoot(SupportClasses.JAR_C_2);
+   public final static URL JAR_D = getURLRelativeToProjectRoot(SupportClasses.JAR_D);
 
    //Keep a strong reference to the URL classloaders so that they are not garbage collected
    final static Set<URLClassLoader> registeredURLClassLoaders = new HashSet<URLClassLoader>();
@@ -126,7 +127,7 @@
       // Notice that AspectManager.instance() is invoked by AOPDependencyBuilder, so
       // we have no way of avoiding AspectManager creation
       AspectManager.instance();
-      ClassPoolRepository.getInstance().setClassPoolFactory(new JBossClDelegatingClassPoolFactory(domainRegistry, new RegisterModuleCallback()));
+      ClassPoolRepository.getInstance().setClassPoolFactory(new JBossClDelegatingClassPoolFactory(domainRegistry, new RegisterModuleCallback(domainRegistry)));
       VFS.init();
    }
 

Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/support/SupportClasses.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/support/SupportClasses.java	2009-11-06 18:33:52 UTC (rev 96117)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/support/SupportClasses.java	2009-11-06 18:58:16 UTC (rev 96118)
@@ -36,13 +36,16 @@
    public final static String JAR_B_2 = "b2.jar";
    public final static String JAR_C_1 = "c1.jar";
    public final static String JAR_C_2 = "c2.jar";
+   public final static String JAR_D = "d.jar";
    
    public static final String PACKAGE_ROOT = SupportClasses.class.getPackage().getName() + ".excluded";
    public final static String PACKAGE_A = PACKAGE_ROOT + ".a";
    public final static String PACKAGE_B = PACKAGE_ROOT + ".b";
    public final static String PACKAGE_C = PACKAGE_ROOT + ".c";
+   public final static String PACKAGE_D = PACKAGE_ROOT + ".d";
    
    public final static String CLASS_A = PACKAGE_A + ".A";
    public final static String CLASS_B = PACKAGE_B + ".B";
    public final static String CLASS_C = PACKAGE_C + ".C";
+   public final static String CLASS_D = PACKAGE_D + ".D";
 }
\ No newline at end of file

Added: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/support/excluded/d/D.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/support/excluded/d/D.java	                        (rev 0)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/support/excluded/d/D.java	2009-11-06 18:58:16 UTC (rev 96118)
@@ -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.test.classpool.support.excluded.d;
+
+import org.jboss.test.classpool.support.excluded.b.B;
+
+
+
+/**
+ * 
+ * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
+ *
+ * @version $Revision$
+ */
+public class D
+{
+   public B getB()
+   {
+      return new B();
+   }
+}


Property changes on: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/support/excluded/d/D.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native




More information about the jboss-cvs-commits mailing list