[jboss-cvs] JBossAS SVN: r93676 - in projects/jboss-cl/branches/Branch_2_0/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 06:50:27 EDT 2009


Author: alesj
Date: 2009-09-18 06:50:26 -0400 (Fri, 18 Sep 2009)
New Revision: 93676

Modified:
   projects/jboss-cl/branches/Branch_2_0/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
   projects/jboss-cl/branches/Branch_2_0/classloading/src/test/java/org/jboss/test/classloading/dependency/test/DependencyUnitTestCase.java
Log:
[JBCL-119]; be more careful with item removal + add simple test.

Modified: projects/jboss-cl/branches/Branch_2_0/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java
===================================================================
--- projects/jboss-cl/branches/Branch_2_0/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java	2009-09-18 10:40:41 UTC (rev 93675)
+++ projects/jboss-cl/branches/Branch_2_0/classloading/src/main/java/org/jboss/classloading/spi/dependency/Module.java	2009-09-18 10:50:26 UTC (rev 93676)
@@ -950,9 +950,18 @@
       Object iDependOn = item.getIDependOn();
       if (iDependOn != null)
       {
+         // TODO - we need a better way to cleanup
          Module otherModule = domain.getModule(iDependOn.toString());
-         DependencyInfo otherDependencyInfo = otherModule.getControllerContext().getDependencyInfo();
-         otherDependencyInfo.removeDependsOnMe(item);
+         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

Modified: projects/jboss-cl/branches/Branch_2_0/classloading/src/test/java/org/jboss/test/classloading/dependency/test/DependencyUnitTestCase.java
===================================================================
--- projects/jboss-cl/branches/Branch_2_0/classloading/src/test/java/org/jboss/test/classloading/dependency/test/DependencyUnitTestCase.java	2009-09-18 10:40:41 UTC (rev 93675)
+++ projects/jboss-cl/branches/Branch_2_0/classloading/src/test/java/org/jboss/test/classloading/dependency/test/DependencyUnitTestCase.java	2009-09-18 10:50:26 UTC (rev 93676)
@@ -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