[jboss-cvs] JBossAS SVN: r93738 - in projects/jboss-cl/trunk/classloading/src: test/java/org/jboss/test/classloading/dependency/test and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Sep 18 10:43:47 EDT 2009


Author: thomas.diesler at jboss.com
Date: 2009-09-18 10:43:47 -0400 (Fri, 18 Sep 2009)
New Revision: 93738

Modified:
   projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
   projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/DependencyUnitTestCase.java
Log:
[JBCL-119] DependencyInfo.removeDependsOnMe never called

Modified: projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java	2009-09-18 14:40:54 UTC (rev 93737)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java	2009-09-18 14:43:47 UTC (rev 93738)
@@ -57,6 +57,7 @@
 import org.jboss.classloading.spi.visitor.ResourceVisitor;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyInfo;
 
 /**
  * Module.
@@ -944,7 +945,28 @@
    {
       if (context == null)
          throw new IllegalStateException("No controller context");
-      context.getDependencyInfo().removeIDependOn(item);
+      
+      // Remove the DependsOnMe part of this item
+      Object iDependOn = item.getIDependOn();
+      if (iDependOn != null)
+      {
+         // TODO - we need a better way to cleanup
+         Module otherModule = domain.getModule(iDependOn.toString());
+         if (otherModule != null)
+         {
+            ControllerContext otherContext = otherModule.getControllerContext();
+            if (otherContext != null)
+            {
+               DependencyInfo otherDependencyInfo = otherContext.getDependencyInfo();
+               if (otherDependencyInfo != null)
+                  otherDependencyInfo.removeDependsOnMe(item);
+            }
+         }
+      }
+      
+      // Remove the IDependOn part of this item
+      DependencyInfo dependencyInfo = context.getDependencyInfo();
+      dependencyInfo.removeIDependOn(item);
    }
    
    /**

Modified: projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/DependencyUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/DependencyUnitTestCase.java	2009-09-18 14:40:54 UTC (rev 93737)
+++ projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/DependencyUnitTestCase.java	2009-09-18 14:43:47 UTC (rev 93738)
@@ -22,12 +22,14 @@
 package org.jboss.test.classloading.dependency.test;
 
 import java.util.Collections;
+import java.util.Set;
 
 import junit.framework.Test;
-
 import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
 import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
 import org.jboss.classloading.spi.metadata.Requirement;
+import org.jboss.dependency.spi.DependencyInfo;
+import org.jboss.dependency.spi.DependencyItem;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.test.classloading.dependency.support.a.A;
 import org.jboss.test.classloading.dependency.support.b.B;
@@ -36,6 +38,7 @@
  * DependencyUnitTestCase.
  * 
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
  * @version $Revision: 1.1 $
  */
 public class DependencyUnitTestCase extends AbstractMockClassLoaderUnitTest
@@ -258,4 +261,45 @@
       }
       assertNoClassLoader(contextA);
    }
+
+   /**
+    * This checks if Module::removeIDependOn cleans up properly.
+    * If/when the cleanup algorithm changes, this test could be changed as well.
+    *
+    * @throws Exception for any error
+    */
+   public void testDependencyRemoval() throws Exception
+   {
+      MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
+      a.setPathsAndPackageNames(A.class);
+      KernelControllerContext contextA = install(a);
+      try
+      {
+         DependencyInfo infoA = contextA.getDependencyInfo();
+
+         MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+         b.setPathsAndPackageNames(B.class);
+         ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+         Requirement requirement = factory.createRequirePackage(A.class.getPackage().getName());
+         b.setRequirements(Collections.singletonList(requirement));
+
+         KernelControllerContext contextB = install(b);
+         try
+         {
+            Set<DependencyItem> items = infoA.getDependsOnMe(null);
+            assertEquals(1, items.size());
+         }
+         finally
+         {
+            uninstall(contextB);
+            Set<DependencyItem> items = infoA.getDependsOnMe(null);
+            assertEquals(0, items.size());
+         }
+      }
+      finally
+      {
+         uninstall(contextA);
+      }
+      assertNoClassLoader(contextA);
+   }
 }




More information about the jboss-cvs-commits mailing list