[jboss-cvs] JBossAS SVN: r71769 - 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
Mon Apr 7 11:53:50 EDT 2008


Author: adrian at jboss.org
Date: 2008-04-07 11:53:50 -0400 (Mon, 07 Apr 2008)
New Revision: 71769

Modified:
   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/ClassLoaderDependenciesTest.java
   projects/jboss-deployers/trunk/deployers-impl/src/tests/org/jboss/test/deployers/classloading/test/SubDeploymentMockClassLoaderUnitTestCase.java
Log:
[JBDEPLOY-31] - Remove domains when they become empty during undeployment of classloaders

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-04-07 15:25:08 UTC (rev 71768)
+++ projects/jboss-deployers/trunk/deployers-impl/src/main/org/jboss/deployers/plugins/classloading/AbstractLevelClassLoaderSystemDeployer.java	2008-04-07 15:53:50 UTC (rev 71769)
@@ -21,6 +21,7 @@
  */
 package org.jboss.deployers.plugins.classloading;
 
+import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloading.spi.dependency.ClassLoading;
 import org.jboss.classloading.spi.dependency.Module;
@@ -136,8 +137,22 @@
       ClassLoader classLoader = unit.getClassLoader();
       try
       {
-         // Remove the classloader
-         system.unregisterClassLoader(classLoader);
+         try
+         {
+            // Remove the classloader
+            system.unregisterClassLoader(classLoader);
+         }
+         finally
+         {
+            // Try to tidy up empty domains
+            String domainName = module.getDeterminedDomainName();
+            if (ClassLoaderSystem.DEFAULT_DOMAIN_NAME.equals(domainName) == false)
+            {
+               ClassLoaderDomain domain = system.getDomain(domainName);
+               if (domain.hasClassLoaders() == false)
+                  system.unregisterDomain(domain);
+            }
+         }
       }
       finally
       {

Modified: projects/jboss-deployers/trunk/deployers-impl/src/tests/org/jboss/test/deployers/classloading/test/ClassLoaderDependenciesTest.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-impl/src/tests/org/jboss/test/deployers/classloading/test/ClassLoaderDependenciesTest.java	2008-04-07 15:25:08 UTC (rev 71768)
+++ projects/jboss-deployers/trunk/deployers-impl/src/tests/org/jboss/test/deployers/classloading/test/ClassLoaderDependenciesTest.java	2008-04-07 15:53:50 UTC (rev 71769)
@@ -26,6 +26,7 @@
 import java.util.List;
 
 import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem;
+import org.jboss.classloader.spi.ClassLoaderDomain;
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloader.spi.ParentPolicy;
 import org.jboss.classloading.spi.dependency.ClassLoading;
@@ -57,6 +58,8 @@
 {
    private static ClassLoadingMetaDataFactory classLoadingMetaDataFactory = ClassLoadingMetaDataFactory.getInstance();
    
+   private ClassLoaderSystem system;
+   
    public static final String NameA = "A";
    public static final String NameB = "B";
 
@@ -201,11 +204,23 @@
       MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects();
       mutable.addAttachment(ClassLoadingMetaData.class, md);
    }
+   
+   protected ClassLoaderDomain assertDomain(String name) throws Exception
+   {
+      ClassLoaderDomain result = system.getDomain(name);
+      assertNotNull("Expected domain " + name, result);
+      return result;
+   }
+   
+   protected void assertNoDomain(String name) throws Exception
+   {
+      assertNull("Did not expect domain " + name, system.getDomain(name));
+   }
 
    protected DeployerClient getMainDeployer()
    {
       ClassLoading classLoading = new ClassLoading();
-      ClassLoaderSystem system = new DefaultClassLoaderSystem();
+      system = new DefaultClassLoaderSystem();
       system.getDefaultDomain().setParentPolicy(ParentPolicy.BEFORE_BUT_JAVA_ONLY);
 
       deployer1 = new MockClassLoaderDescribeDeployer();

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-04-07 15:25:08 UTC (rev 71768)
+++ projects/jboss-deployers/trunk/deployers-impl/src/tests/org/jboss/test/deployers/classloading/test/SubDeploymentMockClassLoaderUnitTestCase.java	2008-04-07 15:53:50 UTC (rev 71769)
@@ -64,6 +64,7 @@
       addChild(deployment, "sub");
       
       DeploymentUnit unit = assertDeploy(deployer, deployment);
+      assertNoDomain("top/sub");
       
       ClassLoader cl = unit.getClassLoader();
       assertLoadClass(cl, A.class);
@@ -74,6 +75,7 @@
       assertLoadClass(clSub, A.class, cl);
       
       assertUndeploy(deployer, deployment);
+      assertNoDomain("top/sub");
    }
 
    public void testSubDeploymentClassLoader() throws Exception
@@ -87,6 +89,7 @@
       addClassLoadingMetaData(sub, "top/sub", null, A.class, B.class);
       
       DeploymentUnit unit = assertDeploy(deployer, deployment);
+      assertDomain("top/sub");
       
       assertEquals(Arrays.asList("top", "top/sub"), deployer2.deployed);
       assertEquals(NONE, deployer2.undeployed);
@@ -101,6 +104,7 @@
       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);
@@ -120,7 +124,9 @@
       addClassLoadingMetaData(sub2, "top/sub2", null, B.class);
       
       DeploymentUnit unit = assertDeploy(deployer, deployment);
-      
+      assertDomain("top/sub1");
+      assertDomain("top/sub2");
+
       ClassLoader cl = unit.getClassLoader();
       assertLoadClass(cl, A.class);
       assertLoadClassFail(cl, B.class);
@@ -139,6 +145,8 @@
       assertNotSame(bFrom1, bFrom2);
       
       assertUndeploy(deployer, deployment);
+      assertNoDomain("top/sub1");
+      assertNoDomain("top/sub2");
    }
 
    public void testSubDeploymentClassLoaderParentLast() throws Exception
@@ -153,7 +161,8 @@
       clmd.setJ2seClassLoadingCompliance(false);
       
       DeploymentUnit unit = assertDeploy(deployer, deployment);
-      
+      assertDomain("top/sub");
+
       ClassLoader cl = unit.getClassLoader();
       assertLoadClass(cl, A.class);
       assertLoadClassFail(cl, B.class);
@@ -164,6 +173,7 @@
       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);




More information about the jboss-cvs-commits mailing list