[jboss-cvs] JBossAS SVN: r107238 - in projects/jboss-cl/trunk: classloading/src/main/java/org/jboss/classloading/spi/dependency and 4 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Jul 30 10:32:09 EDT 2010
Author: alesj
Date: 2010-07-30 10:32:08 -0400 (Fri, 30 Jul 2010)
New Revision: 107238
Added:
projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ClassLoadingSpaceUnitTestCase.java
Modified:
projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderCacheWrapper.java
projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderInformation.java
projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoadingSpaceCache.java
projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/policy/ClassLoaderPolicyModule.java
projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/policy/mock/MockClassLoaderPolicyModule.java
projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/DependencyTestSuite.java
projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/WildcardPackageUnitTestCase.java
Log:
Fix cache lookup, more tests.
Modified: projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java 2010-07-30 14:08:05 UTC (rev 107237)
+++ projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java 2010-07-30 14:32:08 UTC (rev 107238)
@@ -57,7 +57,7 @@
/** The classloaders by package name */
private Map<String, List<ClassLoaderInformation>> classLoadersByPackageName = new ConcurrentHashMap<String, List<ClassLoaderInformation>>();
-
+
/** The global class cache */
private Map<String, ClassCacheItem> globalClassCache = new ConcurrentHashMap<String, ClassCacheItem>();
@@ -1375,6 +1375,10 @@
flushCaches();
}
+ ClassLoaderCache cache = policy.getCache();
+ if (cache != null)
+ cache.flushCaches();
+
try
{
afterRegisterClassLoader(classLoader, classLoader.getPolicy());
@@ -1439,6 +1443,10 @@
flushCaches();
}
+ ClassLoaderCache cache = policy.getCache();
+ if (cache != null)
+ cache.flushCaches();
+
try
{
afterUnregisterClassLoader(classLoader, classLoader.getPolicy());
Modified: projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderCacheWrapper.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderCacheWrapper.java 2010-07-30 14:08:05 UTC (rev 107237)
+++ projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderCacheWrapper.java 2010-07-30 14:32:08 UTC (rev 107238)
@@ -23,6 +23,7 @@
package org.jboss.classloader.spi.base;
import java.net.URL;
+import java.util.Set;
import org.jboss.classloader.spi.ClassLoaderCache;
import org.jboss.classloader.spi.ImportType;
@@ -44,9 +45,33 @@
this.info = info;
}
+ /**
+ * Is the resource imported by our classloader.
+ *
+ * @param type the type
+ * @param name the resource name
+ * @return true if it's imported, false otherwise
+ */
+ protected boolean isImported(ImportType type, String name)
+ {
+ if (info != null)
+ {
+ Set<String> imports = info.getImportedPackages(type);
+ if (imports.isEmpty() == false)
+ {
+ String pckg = ClassLoaderInformation.getResourcePackageName(name);
+ return imports.contains(pckg);
+ }
+ }
+ return false;
+ }
+
public Loader getCachedLoader(String name)
{
- return delegate.getCachedLoader(name);
+ if (isImported(ImportType.ALL, name))
+ return delegate.getCachedLoader(name);
+ else
+ return null;
}
public Loader findLoader(ImportType type, String name)
@@ -79,12 +104,16 @@
public void blackListClass(String name)
{
- delegate.blackListClass(name);
+ if (isImported(ImportType.ALL, name))
+ delegate.blackListClass(name);
}
public URL getCachedResource(String name)
{
- return delegate.getCachedResource(name);
+ if (isImported(ImportType.ALL, name))
+ return delegate.getCachedResource(name);
+ else
+ return null;
}
public URL findResource(ImportType type, String name)
@@ -117,7 +146,8 @@
public void blackListResource(String name)
{
- delegate.blackListResource(name);
+ if (isImported(ImportType.ALL, name))
+ delegate.blackListResource(name);
}
public void flushCaches()
Modified: projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderInformation.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderInformation.java 2010-07-30 14:08:05 UTC (rev 107237)
+++ projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderInformation.java 2010-07-30 14:32:08 UTC (rev 107238)
@@ -26,6 +26,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -339,6 +340,18 @@
}
/**
+ * Get imported packages.
+ *
+ * @param type the type
+ * @return the imported packages
+ */
+ Set<String> getImportedPackages(ImportType type)
+ {
+ Map<String, List<Loader>> map = index.get(type);
+ return (map != null) ? map.keySet() : Collections.<String>emptySet();
+ }
+
+ /**
* Add loader to index.
*
* @param loader the loader
@@ -433,7 +446,7 @@
* @param resource the resource name
* @return the package name or the empty string if there is no package
*/
- private static String getResourcePackageName(final String resource)
+ static String getResourcePackageName(final String resource)
{
int i = resource.lastIndexOf('/');
if (i == -1)
Modified: projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoadingSpaceCache.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoadingSpaceCache.java 2010-07-30 14:08:05 UTC (rev 107237)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/ClassLoadingSpaceCache.java 2010-07-30 14:32:08 UTC (rev 107238)
@@ -39,6 +39,8 @@
ClassLoadingSpaceCache(ClassLoadingSpace space)
{
this.space = space;
+ restoreCache();
+ restoreBlackList();
}
public Loader findLoader(ImportType type, String name)
@@ -58,7 +60,7 @@
public String getInfo(ImportType type)
{
- return space.toString();
+ return String.valueOf(space);
}
void merge(ClassLoadingSpaceCache other)
Modified: projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/policy/ClassLoaderPolicyModule.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/policy/ClassLoaderPolicyModule.java 2010-07-30 14:08:05 UTC (rev 107237)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/policy/ClassLoaderPolicyModule.java 2010-07-30 14:32:08 UTC (rev 107238)
@@ -239,10 +239,6 @@
if (classLoader != null)
unregisterModuleClassLoader(this, classLoader);
- ClassLoaderCache cache = getCache();
- if (cache != null)
- cache.flushCaches(); // flush just in case
-
classLoader = null;
system = null;
policy = null;
@@ -291,6 +287,7 @@
return getPolicy();
}
};
+ // in this case it's actually the right policy, since we need it to add additional delegates
return resolveWildcard(controller, factory, filter, item);
}
else
Modified: projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/policy/mock/MockClassLoaderPolicyModule.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/policy/mock/MockClassLoaderPolicyModule.java 2010-07-30 14:08:05 UTC (rev 107237)
+++ projects/jboss-cl/trunk/classloading/src/main/java/org/jboss/classloading/spi/dependency/policy/mock/MockClassLoaderPolicyModule.java 2010-07-30 14:32:08 UTC (rev 107238)
@@ -22,8 +22,8 @@
package org.jboss.classloading.spi.dependency.policy.mock;
import java.io.File;
+import java.net.URISyntaxException;
import java.net.URL;
-import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -45,9 +45,10 @@
import org.jboss.kernel.spi.dependency.KernelControllerContextAware;
/**
- * VFSClassLoaderPolicyModule.
+ * MockClassLoaderPolicyModule.
*
* @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.org">Ales Justin</a>
* @version $Revision: 1.1 $
*/
public class MockClassLoaderPolicyModule extends ClassLoaderPolicyModule implements KernelControllerContextAware
Modified: projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/DependencyTestSuite.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/DependencyTestSuite.java 2010-07-30 14:08:05 UTC (rev 107237)
+++ projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/DependencyTestSuite.java 2010-07-30 14:32:08 UTC (rev 107238)
@@ -21,32 +21,17 @@
*/
package org.jboss.test.classloading.dependency;
+import org.jboss.test.classloading.dependency.test.*;
+
import junit.framework.Test;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
-import org.jboss.test.classloading.dependency.test.ClassLoadingAdminLazyShutdownUnitTestCase;
-import org.jboss.test.classloading.dependency.test.ClassLoadingAdminUnitTestCase;
-import org.jboss.test.classloading.dependency.test.ConflictingPackageUnitTestCase;
-import org.jboss.test.classloading.dependency.test.ConflictingRequirementUnitTestCase;
-import org.jboss.test.classloading.dependency.test.DependencyUnitTestCase;
-import org.jboss.test.classloading.dependency.test.DomainUnitTestCase;
-import org.jboss.test.classloading.dependency.test.HierarchicalDomainUnitTestCase;
-import org.jboss.test.classloading.dependency.test.ImportAllUnitTestCase;
-import org.jboss.test.classloading.dependency.test.MockClassLoadingMetaDataUnitTestCase;
-import org.jboss.test.classloading.dependency.test.ModuleDependencyUnitTestCase;
-import org.jboss.test.classloading.dependency.test.PackageDependencyUnitTestCase;
-import org.jboss.test.classloading.dependency.test.ReExportModuleUnitTestCase;
-import org.jboss.test.classloading.dependency.test.ReExportPackageUnitTestCase;
-import org.jboss.test.classloading.dependency.test.SelfImportPackageDependencyUnitTestCase;
-import org.jboss.test.classloading.dependency.test.SplitPackageDependencyUnitTestCase;
-import org.jboss.test.classloading.dependency.test.UsesPackageUnitTestCase;
-import org.jboss.test.classloading.dependency.test.MockResourceVisitorUnitTestCase;
-
/**
* Dependency Test Suite.
*
* @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.org">Ales Justin</a>
* @version $Revision: 37459 $
*/
public class DependencyTestSuite extends TestSuite
@@ -87,6 +72,7 @@
suite.addTest(SelfImportPackageDependencyUnitTestCase.suite());
suite.addTest(ClassLoadingAdminUnitTestCase.suite());
suite.addTest(ClassLoadingAdminLazyShutdownUnitTestCase.suite());
+ suite.addTest(ClassLoadingSpaceUnitTestCase.suite());
return suite;
}
Copied: projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ClassLoadingSpaceUnitTestCase.java (from rev 106760, projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/PackageDependencyUnitTestCase.java)
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ClassLoadingSpaceUnitTestCase.java (rev 0)
+++ projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/ClassLoadingSpaceUnitTestCase.java 2010-07-30 14:32:08 UTC (rev 107238)
@@ -0,0 +1,209 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classloading.dependency.test;
+
+import java.lang.reflect.Method;
+
+import org.jboss.classloader.plugins.ClassLoaderUtils;
+import org.jboss.classloader.spi.ClassLoaderCache;
+import org.jboss.classloading.spi.dependency.ClassLoading;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classloading.spi.dependency.policy.mock.MockClassLoadingMetaData;
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+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;
+import org.jboss.test.classloading.dependency.support.c.C;
+
+import junit.framework.Test;
+
+/**
+ * ClassLoadingSpaceUnitTestCase.
+ *
+ * @author <a href="ales.justin at jboss.org">Ales Justin</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassLoadingSpaceUnitTestCase extends AbstractMockClassLoaderUnitTest
+{
+ private Method getCache;
+
+ public static Test suite()
+ {
+ return suite(ClassLoadingSpaceUnitTestCase.class);
+ }
+
+ public ClassLoadingSpaceUnitTestCase(String name)
+ {
+ super(name);
+ }
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ getCache = Module.class.getDeclaredMethod("getCache");
+ getCache.setAccessible(true);
+ }
+
+ @Override
+ protected void tearDown() throws Exception
+ {
+ if (getCache != null)
+ {
+ getCache.setAccessible(false);
+ getCache = null;
+ }
+
+ super.tearDown();
+ }
+
+ protected ClassLoaderCache getCache(ClassLoader cl)
+ {
+ try
+ {
+ Module module = ClassLoading.getModuleForClassLoader(cl);
+ getCache.setAccessible(true);
+ return (ClassLoaderCache) getCache.invoke(module);
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void testCacheViaPackages() throws Exception
+ {
+ MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
+ ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+ a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+ a.setPathsAndPackageNames(A.class);
+ KernelControllerContext contextA = install(a);
+ try
+ {
+ MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+ b.getRequirements().addRequirement(factory.createRequirePackage(A.class.getPackage().getName()));
+ b.getCapabilities().addCapability(factory.createPackage(B.class.getPackage().getName()));
+ b.setPathsAndPackageNames(B.class);
+ KernelControllerContext contextB = install(b);
+ try
+ {
+ MockClassLoadingMetaData c = new MockClassLoadingMetaData("c");
+ c.getRequirements().addRequirement(factory.createRequirePackage(A.class.getPackage().getName()));
+ c.getRequirements().addRequirement(factory.createRequirePackage(B.class.getPackage().getName()));
+ c.getCapabilities().addCapability(factory.createPackage(C.class.getPackage().getName()));
+ c.setPathsAndPackageNames(C.class);
+ KernelControllerContext contextC = install(c);
+ try
+ {
+ ClassLoader clA = assertClassLoader(contextA);
+ ClassLoader clB = assertClassLoader(contextB);
+ ClassLoader clC = assertClassLoader(contextC);
+
+ ClassLoaderCache clcA = getCache(clA);
+ ClassLoaderCache clcB = getCache(clB);
+ ClassLoaderCache clcC = getCache(clC);
+
+ assertSame(clcA, clcB);
+ assertSame(clcB, clcC);
+
+ String pathA = ClassLoaderUtils.classNameToPath(A.class);
+ assertNull(clcA.getCachedLoader(pathA));
+ assertLoadClass(A.class, clB, clA);
+ assertNotNull(clcA.getCachedLoader(pathA));
+ assertLoadClass(A.class, clC, clA);
+ }
+ finally
+ {
+ uninstall(contextC);
+ }
+ }
+ finally
+ {
+ uninstall(contextB);
+ }
+ }
+ finally
+ {
+ uninstall(contextA);
+ }
+ assertNoClassLoader(contextA);
+ }
+
+ public void testCacheViaModules() throws Exception
+ {
+ MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
+ ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+ a.setPathsAndPackageNames(A.class);
+ a.setExportedPackages(A.class);
+ KernelControllerContext contextA = install(a);
+ try
+ {
+ MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+ b.getRequirements().addRequirement(factory.createRequireModule("a"));
+ b.setPathsAndPackageNames(B.class);
+ b.setExportedPackages(B.class);
+ KernelControllerContext contextB = install(b);
+ try
+ {
+ MockClassLoadingMetaData c = new MockClassLoadingMetaData("c");
+ c.getRequirements().addRequirement(factory.createRequireModule("a"));
+ c.getRequirements().addRequirement(factory.createRequireModule("b"));
+ c.setPathsAndPackageNames(C.class);
+ c.setExportedPackages(C.class);
+ KernelControllerContext contextC = install(c);
+ try
+ {
+ ClassLoader clA = assertClassLoader(contextA);
+ ClassLoader clB = assertClassLoader(contextB);
+ ClassLoader clC = assertClassLoader(contextC);
+
+ ClassLoaderCache clcA = getCache(clA);
+ ClassLoaderCache clcB = getCache(clB);
+ ClassLoaderCache clcC = getCache(clC);
+
+ assertSame(clcA, clcB);
+ assertSame(clcB, clcC);
+
+ String pathA = ClassLoaderUtils.classNameToPath(A.class);
+ assertNull(clcA.getCachedLoader(pathA));
+ assertLoadClass(A.class, clB, clA);
+ assertNotNull(clcA.getCachedLoader(pathA));
+ assertLoadClass(A.class, clC, clA);
+ }
+ finally
+ {
+ uninstall(contextC);
+ }
+ }
+ finally
+ {
+ uninstall(contextB);
+ }
+ }
+ finally
+ {
+ uninstall(contextA);
+ }
+ assertNoClassLoader(contextA);
+ }
+}
Modified: projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/WildcardPackageUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/WildcardPackageUnitTestCase.java 2010-07-30 14:08:05 UTC (rev 107237)
+++ projects/jboss-cl/trunk/classloading/src/test/java/org/jboss/test/classloading/dependency/test/WildcardPackageUnitTestCase.java 2010-07-30 14:32:08 UTC (rev 107238)
@@ -53,35 +53,35 @@
{
ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
- MockClassLoadingMetaData a1 = new MockClassLoadingMetaData("a1");
- a1.getRequirements().addRequirement(factory.createWildcardPackage(A.class.getPackage().getName()));
- KernelControllerContext contextA1 = install(a1);
+ MockClassLoadingMetaData b = new MockClassLoadingMetaData("b");
+ b.getRequirements().addRequirement(factory.createWildcardPackage(A.class.getPackage().getName()));
+ KernelControllerContext contextB = install(b);
try
{
- ClassLoader clA1 = assertClassLoader(contextA1);
- assertLoadClassFail(A.class, clA1);
+ ClassLoader clB = assertClassLoader(contextB);
+ assertLoadClassFail(A.class, clB);
- MockClassLoadingMetaData a2 = new MockClassLoadingMetaData("a2");
- a2.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
- a2.setPathsAndPackageNames(A.class);
- KernelControllerContext contextA2 = install(a2);
+ MockClassLoadingMetaData a = new MockClassLoadingMetaData("a");
+ a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+ a.setPathsAndPackageNames(A.class);
+ KernelControllerContext contextA = install(a);
try
{
- ClassLoader clA2 = assertClassLoader(contextA2);
- assertLoadClass(A.class, clA2);
- assertLoadClass(A.class, clA1, clA2);
+ ClassLoader clA = assertClassLoader(contextA);
+ //assertLoadClass(A.class, clA);
+ assertLoadClass(A.class, clB, clA);
}
finally
{
- uninstall(contextA2);
+ uninstall(contextA);
}
- assertNoClassLoader(contextA2);
+ assertNoClassLoader(contextA);
}
finally
{
- uninstall(contextA1);
+ uninstall(contextB);
}
- assertNoClassLoader(contextA1);
+ assertNoClassLoader(contextB);
}
// deploy B first, then A
More information about the jboss-cvs-commits
mailing list