[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