[jboss-cvs] JBossAS SVN: r107107 - in projects/jboss-cl/trunk/classloader/src: test/java/org/jboss/test/classloader/delegate/test and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Jul 27 08:58:45 EDT 2010
Author: alesj
Date: 2010-07-27 08:58:44 -0400 (Tue, 27 Jul 2010)
New Revision: 107107
Modified:
projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderInformation.java
projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/delegate/test/DelegateUnitTestCase.java
projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/resources/tests/ResourceUnitTestCase.java
Log:
Index in advance, fall back to old list.
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-27 10:20:44 UTC (rev 107106)
+++ projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderInformation.java 2010-07-27 12:58:44 UTC (rev 107107)
@@ -65,8 +65,8 @@
/** The # of delegates who cant blacklist */
private int cantBlacklist;
- /** The package to delegate mapping */
- private Map<ImportType, Map<String, List<Loader>>> mapping;
+ /** The package to delegate index */
+ private Map<ImportType, Map<String, List<Loader>>> index;
/**
* Create a new ClassLoaderInformation.
@@ -90,6 +90,9 @@
boolean canCache = policy.isCacheable();
boolean canBlackList = policy.isBlackListable();
+ // package to delegate index
+ index = new ConcurrentHashMap<ImportType, Map<String, List<Loader>>>();
+
List<? extends DelegateLoader> delegates = policy.getDelegates();
if (delegates != null && delegates.isEmpty() == false)
{
@@ -125,6 +128,9 @@
canBlackList = false;
cantBlacklist++;
}
+
+ addLoaderToIndex(baseDelegate, delegatePolicy, importType);
+ addLoaderToIndex(baseDelegate, delegatePolicy, ImportType.ALL);
}
this.delegates = Collections.synchronizedMap(temp);
@@ -139,9 +145,6 @@
{
restoreBlackList();
}
-
- // package to delegate index
- mapping = new ConcurrentHashMap<ImportType, Map<String, List<Loader>>>();
}
/**
@@ -265,6 +268,9 @@
cantBlacklist++;
}
+
+ addLoaderToIndex(loader, policy, type);
+ addLoaderToIndex(loader, policy, ImportType.ALL);
}
}
@@ -328,25 +334,75 @@
restoreBlackList();
}
- // remove loader from mapping / index
- Map<String, List<Loader>> map = mapping.get(type);
- if (map != null)
+ removeLoaderFromIndex(loader, policy, type);
+ removeLoaderFromIndex(loader, policy, ImportType.ALL);
+ }
+ }
+ }
+
+ /**
+ * Add loader to index.
+ *
+ * @param loader the loader
+ * @param policy the policy
+ * @param type the type
+ */
+ private void addLoaderToIndex(Loader loader, BaseClassLoaderPolicy policy, ImportType type)
+ {
+ if (policy == null)
+ return;
+
+ String[] packageNames = policy.getPackageNames();
+ if (packageNames != null && packageNames.length > 0)
+ {
+ Map<String, List<Loader>> map = index.get(type);
+ if (map == null)
+ {
+ map = new ConcurrentHashMap<String, List<Loader>>();
+ index.put(type, map);
+ }
+ for (String pn : packageNames)
+ {
+ List<Loader> loaders = map.get(pn);
+ if (loaders == null)
{
- String[] packageNames = policy.getPackageNames();
- if (packageNames != null)
- {
- for (String pn : packageNames)
- {
- List<Loader> loaders = map.get(pn);
- if (loaders != null)
- loaders.remove(loader);
- }
- }
+ loaders = new CopyOnWriteArrayList<Loader>();
+ map.put(pn, loaders);
}
+ loaders.add(loader);
}
}
}
+ /**
+ * Remove loader from index.
+ *
+ * @param loader the loader
+ * @param policy the policy
+ * @param type the type
+ */
+ private void removeLoaderFromIndex(Loader loader, BaseClassLoaderPolicy policy, ImportType type)
+ {
+ if (policy == null)
+ return;
+
+ // remove loader from mapping / index
+ Map<String, List<Loader>> map = index.get(type);
+ if (map != null)
+ {
+ String[] packageNames = policy.getPackageNames();
+ if (packageNames != null)
+ {
+ for (String pn : packageNames)
+ {
+ List<Loader> loaders = map.get(pn);
+ if (loaders != null)
+ loaders.remove(loader);
+ }
+ }
+ }
+ }
+
public boolean isRelevant(ImportType type)
{
List<? extends DelegateLoader> loaders = getDelegates(type);
@@ -369,37 +425,7 @@
public Loader findLoader(ImportType type, String name)
{
- String pckg = getResourcePackageName(name);
- Map<String, List<Loader>> map = mapping.get(type);
- List<Loader> loaders = null;
- if (map != null && map.isEmpty() == false)
- {
- loaders = map.get(pckg);
- if (loaders != null && loaders.isEmpty() == false)
- {
- for (Loader loader : loaders)
- {
- if (loader.getResource(name) != null)
- return loader;
- }
- }
- }
- Loader loader = findLoaderInternal(type, name, new URL[1]);
- if (loader != null)
- {
- if (map == null)
- {
- map = new ConcurrentHashMap<String, List<Loader>>();
- mapping.put(type, map);
- }
- if (loaders == null)
- {
- loaders = new CopyOnWriteArrayList<Loader>();
- map.put(pckg, loaders);
- }
- loaders.add(loader);
- }
- return loader;
+ return findLoaderInternal(type, name, new URL[1]);
}
public URL findResource(ImportType type, String name)
@@ -419,20 +445,45 @@
*/
private Loader findLoaderInternal(ImportType type, String name, URL[] result)
{
+ // try index first
+ Map<String, List<Loader>> map = index.get(type);
+ if (map != null && map.isEmpty() == false)
+ {
+ String pckg = getResourcePackageName(name);
+ List<Loader> loaders = map.get(pckg);
+ if (loaders != null && loaders.isEmpty() == false)
+ {
+ for (Loader loader : loaders)
+ {
+ URL url = loader.getResource(name);
+ if (url != null)
+ {
+ result[0] = url;
+ cacheLoader(name, loader);
+ cacheResource(name, url);
+ return loader;
+ }
+ }
+ }
+ }
+
+ // fall back to old all delegates list, some policies don't expose packages
List<? extends DelegateLoader> delegates = getDelegates(type);
- if (delegates == null || delegates.isEmpty())
- return null;
-
- for (DelegateLoader delegate : delegates)
+ if (delegates != null && delegates.isEmpty() == false)
{
- URL url = delegate.getResource(name);
- if (url != null)
+ for (DelegateLoader loader : delegates)
{
- result[0] = url; // hacky way of returning a temp result?
- cacheLoader(name, delegate);
- return delegate;
+ URL url = loader.getResource(name);
+ if (url != null)
+ {
+ result[0] = url;
+ cacheLoader(name, loader);
+ cacheResource(name, url);
+ return loader;
+ }
}
}
+
return null;
}
Modified: projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/delegate/test/DelegateUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/delegate/test/DelegateUnitTestCase.java 2010-07-27 10:20:44 UTC (rev 107106)
+++ projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/delegate/test/DelegateUnitTestCase.java 2010-07-27 12:58:44 UTC (rev 107107)
@@ -28,8 +28,6 @@
import java.util.List;
import java.util.concurrent.CountDownLatch;
-import junit.framework.Test;
-
import org.jboss.classloader.plugins.ClassLoaderUtils;
import org.jboss.classloader.spi.ClassLoaderDomain;
import org.jboss.classloader.spi.ClassLoaderSystem;
@@ -47,6 +45,8 @@
import org.jboss.test.classloader.delegate.support.b.TestFactoryImplementation;
import org.jboss.test.thread.TestThread;
+import junit.framework.Test;
+
/**
* DelegateUnitTestCase
*
@@ -86,7 +86,7 @@
ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
MockClassLoaderPolicy pb = createMockClassLoaderPolicy("B");
- pb.setPaths(TestB1.class);
+ pb.setPathsAndPackageNames(TestB1.class);
ClassLoader b = system.registerClassLoaderPolicy(pb);
MockClassLoaderPolicy pa = createMockClassLoaderPolicy("A");
@@ -140,12 +140,12 @@
ClassLoader a = system.registerClassLoaderPolicy(pa);
Class<?> fromB = assertLoadClass(ClassLoaderDomain.class, b, false);
- Class<?> fromA = assertLoadClass(ClassLoaderDomain.class, a, b, false);
+ assertLoadClass(ClassLoaderDomain.class, a, b, false);
Class<?> delegate = assertLoadClass(TestADelegateClassLoaderDomain.class, a, false);
Method method = delegate.getMethod("getSomething", (Class[]) null);
- fromA = method.getReturnType();
+ Class<? >fromA = method.getReturnType();
assertNotNull(fromA);
assertClassLoader(fromA, b);
@@ -183,7 +183,7 @@
ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPath("");
- policy.setPackageNames(new String[] { "" });
+ policy.setPackageNames("");
ClassLoader classLoader = system.registerClassLoaderPolicy(policy);
assertLoadClass("TestDefaultPackage", classLoader);
@@ -194,7 +194,7 @@
ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPath("");
- policy.setPackageNames(new String[] { "" });
+ policy.setPackageNames("");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setDelegates(Collections.singletonList(new FilteredDelegateLoader(policy)));
ClassLoader classLoader = system.registerClassLoaderPolicy(policy);
@@ -208,7 +208,7 @@
ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPath("");
- policy.setPackageNames(new String[] { "" });
+ policy.setPackageNames("");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setImportAll(true);
ClassLoader classLoader = system.registerClassLoaderPolicy(policy);
@@ -223,7 +223,7 @@
ClassLoaderDomain parent = system.createAndRegisterDomain("parent", ParentPolicy.BEFORE_BUT_JAVA_ONLY);
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPath("");
- policy.setPackageNames(new String[] { "" });
+ policy.setPackageNames("");
ClassLoaderDomain child = system.createAndRegisterDomain("child", ParentPolicy.BEFORE, parent);
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
ClassLoader classLoader = system.registerClassLoaderPolicy(parent, policy);
@@ -256,7 +256,7 @@
Class<?> testSleep = assertLoadClass(TestSleep.class, a);
Field field = testSleep.getField("sleep");
- field.set(null, new Long(1));
+ field.set(null, 1l);
final CountDownLatch startALatch = new CountDownLatch(1);
final CountDownLatch startBLatch = new CountDownLatch(1);
Modified: projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/resources/tests/ResourceUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/resources/tests/ResourceUnitTestCase.java 2010-07-27 10:20:44 UTC (rev 107106)
+++ projects/jboss-cl/trunk/classloader/src/test/java/org/jboss/test/classloader/resources/tests/ResourceUnitTestCase.java 2010-07-27 12:58:44 UTC (rev 107107)
@@ -28,8 +28,6 @@
import java.util.Enumeration;
import java.util.HashSet;
-import junit.framework.Test;
-
import org.jboss.classloader.spi.ClassLoaderDomain;
import org.jboss.classloader.spi.ClassLoaderSystem;
import org.jboss.classloader.spi.ParentPolicy;
@@ -37,10 +35,13 @@
import org.jboss.classloader.test.support.MockClassLoaderPolicy;
import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
+import junit.framework.Test;
+
/**
* ClassLoaderSystemUnitTestCase.
*
* @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 ResourceUnitTestCase extends AbstractClassLoaderTestWithSecurity
@@ -83,6 +84,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
+ policy.setPackageNames("com.acme.p1");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setDelegates(Collections.singletonList(new FilteredDelegateLoader(policy)));
@@ -99,6 +101,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("");
+ policy.setPackageNames("");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setDelegates(Collections.singletonList(new FilteredDelegateLoader(policy)));
@@ -115,7 +118,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
- policy.setPackageNames(new String[] { "com.acme.p1" } );
+ policy.setPackageNames("com.acme.p1");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setDelegates(Collections.singletonList(new FilteredDelegateLoader(policy)));
@@ -132,7 +135,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
- policy.setPackageNames(new String[] { "com.acme.p1" } );
+ policy.setPackageNames("com.acme.p1");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setDelegates(Collections.singletonList(new FilteredDelegateLoader(policy)));
@@ -149,7 +152,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
- policy.setPackageNames(new String[] { "com.acme.p1" } );
+ policy.setPackageNames("com.acme.p1");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setImportAll(true);
@@ -166,7 +169,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("");
- policy.setPackageNames(new String[] { "" } );
+ policy.setPackageNames("");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setImportAll(true);
@@ -183,7 +186,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
- policy.setPackageNames(new String[] { "com.acme.p1" } );
+ policy.setPackageNames("com.acme.p1");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
@@ -200,7 +203,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
- policy.setPackageNames(new String[] { "com.acme.p1" } );
+ policy.setPackageNames("com.acme.p1");
system.registerClassLoaderPolicy(parent, policy);
ClassLoaderDomain child = system.createAndRegisterDomain("child", ParentPolicy.BEFORE, parent);
@@ -219,7 +222,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
- policy.setPackageNames(new String[] { "com.acme.p1" } );
+ policy.setPackageNames("com.acme.p1");
system.registerClassLoaderPolicy(parent, policy);
ClassLoaderDomain child = system.createAndRegisterDomain("child", ParentPolicy.AFTER, parent);
@@ -236,7 +239,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
- policy.setPackageNames(new String[] { "com.acme.p1" } );
+ policy.setPackageNames("com.acme.p1");
system.registerClassLoaderPolicy(parent, policy);
ClassLoaderDomain child = system.createAndRegisterDomain("child", ParentPolicy.AFTER, parent);
@@ -255,7 +258,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("");
- policy.setPackageNames(new String[] { "" } );
+ policy.setPackageNames("");
system.registerClassLoaderPolicy(parent, policy);
ClassLoaderDomain child = system.createAndRegisterDomain("child", ParentPolicy.BEFORE, parent);
@@ -299,7 +302,7 @@
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setPrefix("b/");
policy2.setPath("com/acme/p1");
- policy2.setPackageNames(new String[] { "com.acme.p1" });
+ policy2.setPackageNames("com.acme.p1");
ClassLoader classLoader = system.registerClassLoaderPolicy(policy);
system.registerClassLoaderPolicy(policy2);
@@ -316,7 +319,7 @@
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setPrefix("b/");
policy2.setPath("");
- policy2.setPackageNames(new String[] { "" });
+ policy2.setPackageNames("");
ClassLoader classLoader = system.registerClassLoaderPolicy(policy);
system.registerClassLoaderPolicy(policy2);
@@ -329,6 +332,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
+ policy.setPackageNames("com.acme.p1");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setDelegates(Collections.singletonList(new FilteredDelegateLoader(policy)));
@@ -361,7 +365,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
- policy.setPackageNames(new String[] { "com.acme.p1" } );
+ policy.setPackageNames("com.acme.p1");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setDelegates(Collections.singletonList(new FilteredDelegateLoader(policy)));
@@ -378,7 +382,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
- policy.setPackageNames(new String[] { "com.acme.p1" } );
+ policy.setPackageNames("com.acme.p1");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setDelegates(Collections.singletonList(new FilteredDelegateLoader(policy)));
@@ -395,7 +399,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
- policy.setPackageNames(new String[] { "com.acme.p1" } );
+ policy.setPackageNames("com.acme.p1");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setImportAll(true);
@@ -412,7 +416,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("");
- policy.setPackageNames(new String[] { "" } );
+ policy.setPackageNames("");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
policy2.setImportAll(true);
@@ -429,7 +433,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
- policy.setPackageNames(new String[] { "com.acme.p1" } );
+ policy.setPackageNames("com.acme.p1");
MockClassLoaderPolicy policy2 = createMockClassLoaderPolicy();
@@ -446,7 +450,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
- policy.setPackageNames(new String[] { "com.acme.p1" } );
+ policy.setPackageNames("com.acme.p1");
system.registerClassLoaderPolicy(parent, policy);
ClassLoaderDomain child = system.createAndRegisterDomain("child", ParentPolicy.BEFORE, parent);
@@ -465,7 +469,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("com/acme/p1");
- policy.setPackageNames(new String[] { "com.acme.p1" } );
+ policy.setPackageNames("com.acme.p1");
system.registerClassLoaderPolicy(parent, policy);
ClassLoaderDomain child = system.createAndRegisterDomain("child", ParentPolicy.AFTER, parent);
@@ -484,7 +488,7 @@
MockClassLoaderPolicy policy = createMockClassLoaderPolicy();
policy.setPrefix("a/");
policy.setPath("");
- policy.setPackageNames(new String[] { "" } );
+ policy.setPackageNames("");
system.registerClassLoaderPolicy(parent, policy);
ClassLoaderDomain child = system.createAndRegisterDomain("child", ParentPolicy.BEFORE, parent);
@@ -590,7 +594,7 @@
HashSet<URL> found = new HashSet<URL>();
while (urls.hasMoreElements())
found.add(urls.nextElement());
- fail("Should NOT have got resources " + resourcePath + " from " + classLoader + " found " + urls);
+ fail("Should NOT have got resources " + resourcePath + " from " + classLoader + " found " + found);
}
}
}
More information about the jboss-cvs-commits
mailing list