[jboss-cvs] JBossAS SVN: r73804 - in projects/jboss-deployers/trunk/deployers-impl/src: tests/org/jboss/test/deployers/classloading/test and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu May 29 11:03:02 EDT 2008
Author: adrian at jboss.org
Date: 2008-05-29 11:03:02 -0400 (Thu, 29 May 2008)
New Revision: 73804
Modified:
projects/jboss-deployers/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/AbstractClassLoaderDescribeDeployer.java
projects/jboss-deployers/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/AbstractLevelClassLoaderSystemDeployer.java
projects/jboss-deployers/trunk/deployers-impl/src/tests/org/jboss/test/deployers/classloading/test/SubDeploymentMockClassLoaderUnitTestCase.java
Log:
[JBDEPLOY-40] - Allow a subdeployment classloader to become a top level classloader
Modified: projects/jboss-deployers/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/AbstractClassLoaderDescribeDeployer.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/AbstractClassLoaderDescribeDeployer.java 2008-05-29 14:48:33 UTC (rev 73803)
+++ projects/jboss-deployers/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/AbstractClassLoaderDescribeDeployer.java 2008-05-29 15:03:02 UTC (rev 73804)
@@ -91,7 +91,16 @@
// For non top level classloaders, we need to control the domain
// since the parent is the deployment classloader
- deployment.setDomain(unit.getName());
+ String unitName = unit.getName();
+ if (deployment.getParentDomain() == null)
+ {
+ deployment.setDomain(unitName);
+ log.debug("Will use synthetic domain for classloader of subdeployment: " + unitName);
+ }
+ else
+ {
+ log.debug("Will create top level classloader for subdeployment: " + unitName);
+ }
}
// Create the module
Modified: projects/jboss-deployers/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/AbstractLevelClassLoaderSystemDeployer.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/AbstractLevelClassLoaderSystemDeployer.java 2008-05-29 14:48:33 UTC (rev 73803)
+++ projects/jboss-deployers/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/AbstractLevelClassLoaderSystemDeployer.java 2008-05-29 15:03:02 UTC (rev 73804)
@@ -114,7 +114,7 @@
throw new IllegalStateException("Module is not an instance of " + ClassLoaderPolicyModule.class.getName() + " actual=" + module.getClass().getName());
ClassLoaderPolicyModule classLoaderPolicyModule = (ClassLoaderPolicyModule) module;
- if (unit.isTopLevel())
+ if (unit.isTopLevel() || module.getParentDomainName() != null)
{
// Top level, just create the classloader
return classLoaderPolicyModule.registerClassLoaderPolicy(system);
Modified: projects/jboss-deployers/trunk/deployers-impl/src/tests/org/jboss/test/deployers/classloading/test/SubDeploymentMockClassLoaderUnitTestCase.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-impl/src/tests/org/jboss/test/deployers/classloading/test/SubDeploymentMockClassLoaderUnitTestCase.java 2008-05-29 14:48:33 UTC (rev 73803)
+++ projects/jboss-deployers/trunk/deployers-impl/src/tests/org/jboss/test/deployers/classloading/test/SubDeploymentMockClassLoaderUnitTestCase.java 2008-05-29 15:03:02 UTC (rev 73804)
@@ -28,6 +28,7 @@
import junit.framework.Test;
import junit.framework.TestSuite;
+import org.jboss.classloader.spi.ClassLoaderSystem;
import org.jboss.classloading.spi.metadata.ClassLoadingMetaData;
import org.jboss.deployers.client.spi.DeployerClient;
import org.jboss.deployers.client.spi.Deployment;
@@ -78,7 +79,7 @@
assertNoDomain("top/sub");
}
- public void testSubDeploymentClassLoader() throws Exception
+ public void testSubDeploymentClassLoaderSynthetic() throws Exception
{
DeployerClient deployer = getMainDeployer();
@@ -110,6 +111,78 @@
assertEquals(Arrays.asList("top/sub", "top"), deployer2.undeployed);
}
+ public void testSubDeploymentClassLoaderSpecifiedDefaultDomain() throws Exception
+ {
+ DeployerClient deployer = getMainDeployer();
+
+ Deployment deployment = createSimpleDeployment("top");
+ ClassLoadingMetaData top = addClassLoadingMetaData(deployment, "top", null, A.class);
+ top.setImportAll(true);
+
+ ContextInfo sub = addChild(deployment, "sub");
+ ClassLoadingMetaData topSub = addClassLoadingMetaData(sub, "top/sub", null, false, B.class);
+ topSub.setDomain(ClassLoaderSystem.DEFAULT_DOMAIN_NAME);
+ topSub.setParentDomain(ClassLoaderSystem.DEFAULT_DOMAIN_NAME);
+ topSub.setImportAll(true);
+
+ DeploymentUnit unit = assertDeploy(deployer, deployment);
+
+ assertEquals(Arrays.asList("top", "top/sub"), deployer2.deployed);
+ assertEquals(NONE, deployer2.undeployed);
+
+ ClassLoader cl = unit.getClassLoader();
+
+ DeploymentUnit subDeployment = assertChild(unit, "top/sub");
+ ClassLoader clSub = subDeployment.getClassLoader();
+
+ assertLoadClass(cl, A.class);
+ assertLoadClass(cl, B.class, clSub);
+ assertLoadClass(clSub, A.class, cl);
+ assertLoadClass(clSub, B.class);
+
+ assertUndeploy(deployer, deployment);
+ assertNoDomain("top/sub");
+
+ assertEquals(Arrays.asList("top", "top/sub"), deployer2.deployed);
+ assertEquals(Arrays.asList("top/sub", "top"), deployer2.undeployed);
+ }
+
+ public void testSubDeploymentClassLoaderSpecifiedOtherDomain() throws Exception
+ {
+ DeployerClient deployer = getMainDeployer();
+
+ Deployment deployment = createSimpleDeployment("top");
+ ClassLoadingMetaData top = addClassLoadingMetaData(deployment, "top", null, A.class);
+ top.setImportAll(true);
+
+ ContextInfo sub = addChild(deployment, "sub");
+ ClassLoadingMetaData topSub = addClassLoadingMetaData(sub, "top/sub", null, false, B.class);
+ topSub.setDomain("TestDomain");
+ topSub.setParentDomain(ClassLoaderSystem.DEFAULT_DOMAIN_NAME);
+ topSub.setImportAll(true);
+
+ DeploymentUnit unit = assertDeploy(deployer, deployment);
+ assertDomain("TestDomain");
+
+ assertEquals(Arrays.asList("top", "top/sub"), deployer2.deployed);
+ assertEquals(NONE, deployer2.undeployed);
+
+ ClassLoader cl = unit.getClassLoader();
+ assertLoadClass(cl, A.class);
+ assertLoadClassFail(cl, B.class);
+
+ DeploymentUnit subDeployment = assertChild(unit, "top/sub");
+ ClassLoader clSub = subDeployment.getClassLoader();
+ assertLoadClass(clSub, A.class, cl);
+ assertLoadClass(clSub, B.class);
+
+ assertUndeploy(deployer, deployment);
+ assertNoDomain("top/sub");
+
+ assertEquals(Arrays.asList("top", "top/sub"), deployer2.deployed);
+ assertEquals(Arrays.asList("top/sub", "top"), deployer2.undeployed);
+ }
+
public void testMultipleSubDeploymentClassLoader() throws Exception
{
DeployerClient deployer = getMainDeployer();
@@ -178,6 +251,51 @@
assertEquals(Arrays.asList("top", "top/sub"), deployer2.deployed);
assertEquals(Arrays.asList("top/sub", "top"), deployer2.undeployed);
}
+
+ public void testMultipleSubDeploymentClassLoaderSpecifiedDomain() throws Exception
+ {
+ DeployerClient deployer = getMainDeployer();
+
+ Deployment deployment = createSimpleDeployment("top");
+ addClassLoadingMetaData(deployment, "top", null);
+
+ ContextInfo sub1 = addChild(deployment, "sub1");
+ ClassLoadingMetaData topSub1 = addClassLoadingMetaData(sub1, "top/sub1", null, A.class);
+ topSub1.setDomain("TestDomain");
+ topSub1.setParentDomain(ClassLoaderSystem.DEFAULT_DOMAIN_NAME);
+ topSub1.setImportAll(true);
+
+ ContextInfo sub2 = addChild(deployment, "sub2");
+ ClassLoadingMetaData topSub2 = addClassLoadingMetaData(sub2, "top/sub2", null, B.class);
+ topSub2.setDomain("TestDomain");
+ topSub2.setParentDomain(ClassLoaderSystem.DEFAULT_DOMAIN_NAME);
+ topSub2.setImportAll(true);
+
+ DeploymentUnit unit = assertDeploy(deployer, deployment);
+ assertDomain("TestDomain");
+
+ ClassLoader cl = unit.getClassLoader();
+ assertLoadClassFail(cl, A.class);
+ assertLoadClassFail(cl, B.class);
+
+ DeploymentUnit subDeployment1 = assertChild(unit, "top/sub1");
+ ClassLoader clSub1 = subDeployment1.getClassLoader();
+ DeploymentUnit subDeployment2 = assertChild(unit, "top/sub2");
+ ClassLoader clSub2 = subDeployment2.getClassLoader();
+
+ Class<?> aFrom1 = assertLoadClass(clSub1, A.class);
+ Class<?> bFrom1 = assertLoadClass(clSub1, B.class, clSub2);
+
+ Class<?> aFrom2 = assertLoadClass(clSub2, A.class, clSub1);
+ Class<?> bFrom2 = assertLoadClass(clSub2, B.class);
+
+ assertNotSame(clSub1, clSub2);
+ assertSame(aFrom1, aFrom2);
+ assertSame(bFrom1, bFrom2);
+
+ assertUndeploy(deployer, deployment);
+ assertNoDomain("TopDomain");
+ }
protected DeploymentUnit assertChild(DeploymentUnit parent, String name)
{
More information about the jboss-cvs-commits
mailing list