[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