[jboss-cvs] JBossAS SVN: r68811 - in projects/microcontainer/trunk/classloader/src: main/org/jboss/classloader/plugins/jdk and 13 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Jan 10 05:17:48 EST 2008
Author: adrian at jboss.org
Date: 2008-01-10 05:17:47 -0500 (Thu, 10 Jan 2008)
New Revision: 68811
Modified:
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/CombiningClassFilter.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/EverythingClassFilter.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/JavaOnlyClassFilter.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingButJavaClassFilter.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingClassFilter.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/PatternClassFilter.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/jdk/AbstractJDKChecker.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderDomain.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/Loader.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoader.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderPolicy.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseDelegateLoader.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/ClassFilter.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/FilteredDelegateLoader.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/PackageClassFilter.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/IsolatedClassLoaderTestHelper.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderPolicy.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/AbstractClassLoaderTest.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/bootstrap/support/TestClass.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/bootstrap/test/ModifiedBootstrapUnitTestCase.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MatchClassFilter.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MockLoader.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/NoMatchClassFilter.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/test/CustomParentLoaderUnitTestCase.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/test/ParentPolicyUnitTestCase.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/FilterUnitTestCase.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/PackageFilterUnitTestCase.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/junit/test/IsolatedClassLoaderUnitTestCase.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/old/test/CircularLoadUnitTestCase.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/old/test/CircularityErrorUnitTestCase.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/old/test/ConcurrentLoaderUnitTestCase.java
Log:
[JBMICROCONT-223] - Package handling fixes
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/CombiningClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/CombiningClassFilter.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/CombiningClassFilter.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -78,6 +78,16 @@
}
return false;
}
+
+ public boolean matchesPackageName(String packageName)
+ {
+ for (ClassFilter filter : filters)
+ {
+ if (filter.matchesPackageName(packageName))
+ return true;
+ }
+ return false;
+ }
@Override
public String toString()
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/EverythingClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/EverythingClassFilter.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/EverythingClassFilter.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -52,6 +52,11 @@
return true;
}
+ public boolean matchesPackageName(String packageName)
+ {
+ return true;
+ }
+
@Override
public String toString()
{
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/JavaOnlyClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/JavaOnlyClassFilter.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/JavaOnlyClassFilter.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -37,7 +37,9 @@
*/
private JavaOnlyClassFilter()
{
- super(new String[] { "java\\..+", "javax\\..+" }, new String[] { "java/.+", "javax/.+" } );
+ super(new String[] { "java\\..+", "javax\\..+" },
+ new String[] { "java/.+", "javax/.+" },
+ new String[] { "java", "java\\..*", "javax", "javax\\..*" });
}
public String toString()
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingButJavaClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingButJavaClassFilter.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingButJavaClassFilter.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -37,7 +37,9 @@
*/
private NothingButJavaClassFilter()
{
- super(new String[] { "java\\..+" }, new String[] { "java/.+" });
+ super(new String[] { "java\\..+" },
+ new String[] { "java/.+" },
+ new String[] { "java", "java\\..*" });
}
public String toString()
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingClassFilter.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/NothingClassFilter.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -52,6 +52,11 @@
return false;
}
+ public boolean matchesPackageName(String packageName)
+ {
+ return false;
+ }
+
@Override
public String toString()
{
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/PatternClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/PatternClassFilter.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/PatternClassFilter.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -40,6 +40,9 @@
/** The resource patterns as regular expressions */
private Pattern[] resourcePatterns;
+
+ /** The package patterns as regular expressions */
+ private Pattern[] packagePatterns;
/** Whether to include java */
private boolean includeJava = false;
@@ -49,9 +52,10 @@
*
* @param classPatterns the class patterns
* @param resourcePatterns the resource patterns
+ * @param packagePatterns the package patterns
* @throws IllegalArgumentException for a null pattern
*/
- public PatternClassFilter(String[] classPatterns, String[] resourcePatterns)
+ public PatternClassFilter(String[] classPatterns, String[] resourcePatterns, String[] packagePatterns)
{
if (classPatterns == null)
throw new IllegalArgumentException("Null patterns");
@@ -77,6 +81,20 @@
throw new IllegalArgumentException("Null pattern in " + Arrays.asList(resourcePatterns));
this.resourcePatterns[i] = Pattern.compile(resourcePatterns[i]);
}
+
+ if (packagePatterns == null)
+ {
+ this.packagePatterns = this.classPatterns;
+ return;
+ }
+
+ this.packagePatterns = new Pattern[packagePatterns.length];
+ for (int i = 0; i < packagePatterns.length; ++i)
+ {
+ if (packagePatterns[i] == null)
+ throw new IllegalArgumentException("Null pattern in " + Arrays.asList(packagePatterns));
+ this.packagePatterns[i] = Pattern.compile(packagePatterns[i]);
+ }
}
/**
@@ -131,6 +149,22 @@
return JavaOnlyClassFilter.INSTANCE.matchesResourcePath(resourcePath);
}
+ public boolean matchesPackageName(String packageName)
+ {
+ if (packageName == null)
+ return false;
+
+ for (int i = 0; i < packagePatterns.length; ++i)
+ {
+ Matcher matcher = packagePatterns[i].matcher(packageName);
+ if (matcher.matches())
+ return true;
+ }
+ if (includeJava == false)
+ return false;
+ return JavaOnlyClassFilter.INSTANCE.matchesPackageName(packageName);
+ }
+
@Override
public String toString()
{
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/jdk/AbstractJDKChecker.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/jdk/AbstractJDKChecker.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/jdk/AbstractJDKChecker.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -103,9 +103,9 @@
* @param stack the class stack
* @return the requesting class
*/
- protected Class<?> getRequestingClass(Class[] stack)
+ protected Class<?> getRequestingClass(Class<?>[] stack)
{
- for (Class clazz : stack)
+ for (Class<?> clazz : stack)
{
if (Hack.class.isAssignableFrom(clazz) == false &&
JDKChecker.class.isAssignableFrom(clazz) == false &&
@@ -146,7 +146,7 @@
private static class Hack extends SecurityManager
{
@Override
- public Class[] getClassContext()
+ public Class<?>[] getClassContext()
{
return super.getClassContext();
}
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/loader/ClassLoaderToLoaderAdapter.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -22,6 +22,7 @@
package org.jboss.classloader.plugins.loader;
import java.io.IOException;
+import java.lang.reflect.Method;
import java.net.URL;
import java.security.AccessControlContext;
import java.security.AccessController;
@@ -47,10 +48,45 @@
/** The classloader */
private ClassLoader classLoader;
-
+
/** The access control context of the creator of this adapter */
private AccessControlContext accessControlContext;
+ /** The get package method */
+ private static Method getPackage;
+
+ /** The get packages method */
+ private static Method getPackages;
+
+ static
+ {
+ AccessController.doPrivileged(new PrivilegedAction<Object>()
+ {
+ public Object run()
+ {
+ try
+ {
+ getPackage = ClassLoader.class.getDeclaredMethod("getPackage", String.class);
+ getPackage.setAccessible(true);
+ }
+ catch (Exception e)
+ {
+ log.warn("Unable to set accessible on ClassLoader.getPackage()", e);
+ }
+ try
+ {
+ getPackages = ClassLoader.class.getDeclaredMethod("getPackages");
+ getPackages.setAccessible(true);
+ }
+ catch (Exception e)
+ {
+ log.warn("Unable to set accessible on ClassLoader.getPackages()", e);
+ }
+ return null;
+ }
+ });
+ }
+
/**
* Create a new ClassLoaderToLoaderAdapter.
*
@@ -142,6 +178,37 @@
}
}
+ public Package getPackage(String name)
+ {
+ if (getPackage == null)
+ return null;
+
+ try
+ {
+ return (Package) getPackage.invoke(classLoader, new Object[] { name });
+ }
+ catch (Exception e)
+ {
+ log.warn("Unexpected error retrieving package " + name + " from classloader " + classLoader, e);
+ return null;
+ }
+ }
+
+ public void getPackages(Set<Package> packages)
+ {
+ if (getPackages == null)
+ return;
+
+ try
+ {
+ getPackages.invoke(classLoader);
+ }
+ catch (Exception e)
+ {
+ log.warn("Unexpected error retrieving packages from classloader " + classLoader, e);
+ }
+ }
+
@Override
public String toString()
{
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderDomain.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderDomain.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderDomain.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -25,6 +25,7 @@
import java.net.URL;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.util.HashSet;
import java.util.Set;
import org.jboss.classloader.plugins.loader.ClassLoaderToLoaderAdapter;
@@ -334,8 +335,124 @@
parentLoader.getResources(name, urls);
}
+
+ @Override
+ protected Package beforeGetPackage(String name)
+ {
+ boolean trace = log.isTraceEnabled();
+ ClassFilter filter = getParentPolicy().getBeforeFilter();
+ if (filter.matchesPackageName(name))
+ {
+ if (trace)
+ log.trace(this + " " + name + " matches parent beforeFilter=" + filter);
+ return getPackageFromParent(name);
+ }
+ if (trace)
+ log.trace(this + " " + name + " does NOT match parent beforeFilter=" + filter);
+ return null;
+ }
+ @Override
+ protected Package afterGetPackage(String name)
+ {
+ boolean trace = log.isTraceEnabled();
+ ClassFilter filter = getParentPolicy().getAfterFilter();
+ if (filter.matchesPackageName(name))
+ {
+ if (trace)
+ log.trace(this + " " + name + " matches parent afterFilter=" + filter);
+ return getPackageFromParent(name);
+ }
+ if (trace)
+ log.trace(this + " " + name + " does NOT match parent afterFilter=" + filter);
+ return null;
+ }
+
/**
+ * Try to get a package from the parent
+ *
+ * @param name the name
+ * @return the package if found
+ */
+ protected Package getPackageFromParent(String name)
+ {
+ Loader parentLoader = getParent();
+
+ boolean trace = log.isTraceEnabled();
+ if (parentLoader == null)
+ {
+ if (trace)
+ log.trace(this + " not getting package from non-existant parent");
+ return null;
+ }
+
+ if (trace)
+ log.trace(this + " get package from parent " + name + " parent=" + parentLoader);
+
+ Package result = parentLoader.getPackage(name);
+
+ if (trace)
+ {
+ if (result != null)
+ log.trace(this + " got package from parent " + name + " parent=" + parentLoader + " " + result);
+ else
+ log.trace(this + " package not found in parent " + name + " parent=" + parentLoader);
+ }
+
+ return result;
+ }
+
+ @Override
+ protected void beforeGetPackages(Set<Package> packages)
+ {
+ ClassFilter filter = getParentPolicy().getBeforeFilter();
+ getPackagesFromParent(packages, filter);
+ }
+
+ @Override
+ protected void afterGetPackages(Set<Package> packages)
+ {
+ ClassFilter filter = getParentPolicy().getAfterFilter();
+ getPackagesFromParent(packages, filter);
+ }
+
+ /**
+ * Try to get packages from the parent
+ *
+ * @param packages the packages to add to
+ * @param filter the filter
+ */
+ protected void getPackagesFromParent(Set<Package> packages, ClassFilter filter)
+ {
+ Loader parentLoader = getParent();
+
+ boolean trace = log.isTraceEnabled();
+ if (parentLoader == null)
+ {
+ if (trace)
+ log.trace(this + " not getting packages from non-existant parent");
+ return;
+ }
+
+ if (trace)
+ log.trace(this + " get packages from parent=" + parentLoader + " filter=" + filter);
+
+ Set<Package> parentPackages = new HashSet<Package>();
+ parentLoader.getPackages(parentPackages);
+ for (Package parentPackage : parentPackages)
+ {
+ if (filter.matchesPackageName(parentPackage.getName()))
+ {
+ if (trace)
+ log.trace(this + " parentPackage=" + parentPackage + " matches filter=" + filter);
+ packages.add(parentPackage);
+ }
+ else if (trace)
+ log.trace(this + " parentPackage=" + parentPackage + " does NOT match filter=" + filter);
+ }
+ }
+
+ /**
* Fixup the parent to the our classloader as parent if we don't have an explicit one
*/
private void fixUpParent()
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/Loader.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/Loader.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/Loader.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -57,4 +57,19 @@
* @throws IOException for any error
*/
void getResources(String name, Set<URL> urls) throws IOException;
+
+ /**
+ * Get a package
+ *
+ * @param name the package name
+ * @return the package
+ */
+ Package getPackage(String name);
+
+ /**
+ * Get all the packages visible from this loader
+ *
+ * @param packages the packages
+ */
+ void getPackages(Set<Package> packages);
}
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoader.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoader.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoader.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -25,6 +25,7 @@
import java.io.InputStream;
import java.net.URL;
import java.security.AccessController;
+import java.security.CodeSource;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
@@ -129,6 +130,83 @@
}
@Override
+ protected Package getPackage(String name)
+ {
+ boolean trace = log.isTraceEnabled();
+ if (trace)
+ log.trace(this + " getPackage " + name);
+
+ if (name == null)
+ return null;
+
+ // Did we already load this package?
+ Package result = super.getPackage(name);
+ if (result != null && trace)
+ log.trace(this + " already loaded package " + name + " " + result.getName());
+
+ // Not already loaded use the domain
+ if (result == null)
+ {
+ BaseClassLoaderPolicy basePolicy = policy;
+ BaseClassLoaderDomain domain = basePolicy.getClassLoaderDomain();
+ if (domain == null)
+ return null;
+ if (trace)
+ log.trace(this + " getPackage " + name + " domain=" + domain);
+ result = domain.getPackage(this, name);
+ }
+
+ // Still not found
+ if (result == null)
+ {
+ if (trace)
+ log.trace(this + " package not found " + name);
+ }
+
+ return result;
+ }
+
+ @Override
+ protected Package[] getPackages()
+ {
+ BaseClassLoaderPolicy basePolicy = policy;
+ BaseClassLoaderDomain domain = basePolicy.getClassLoaderDomain();
+ if (domain == null)
+ return super.getPackages();
+ boolean trace = log.isTraceEnabled();
+ if (trace)
+ log.trace(this + " getPackages domain=" + domain);
+
+ Set<Package> packages = new HashSet<Package>();
+ if (domain != null)
+ domain.getPackages(this, packages);
+ return packages.toArray(new Package[packages.size()]);
+ }
+
+ /**
+ * Get a package locally
+ *
+ * @param name the package name
+ * @return the package
+ */
+ Package getPackageLocally(String name)
+ {
+ return super.getPackage(name);
+ }
+
+ /**
+ * Get the packages locally
+ *
+ * @param packages the packages
+ */
+ void getPackagesLocally(Set<Package> packages)
+ {
+ Package[] pkgs = super.getPackages();
+ for (Package pkg : pkgs)
+ packages.add(pkg);
+ }
+
+ @Override
protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
{
boolean trace = log.isTraceEnabled();
@@ -241,7 +319,7 @@
// Look for the resource
final String resourcePath = ClassLoaderUtils.classNameToPath(name);
- return AccessController.doPrivileged(new PrivilegedAction<Class>()
+ return AccessController.doPrivileged(new PrivilegedAction<Class<?>>()
{
public Class<?> run()
{
@@ -271,7 +349,14 @@
}
// Create the package if necessary
- definePackage(name);
+ URL codeSourceURL = null;
+ if (protectionDomain != null)
+ {
+ CodeSource codeSource = protectionDomain.getCodeSource();
+ if (codeSource != null)
+ codeSourceURL = codeSource.getLocation();
+ }
+ definePackage(name, codeSourceURL);
// Finally we can define the class
Class<?> result;
@@ -413,26 +498,44 @@
* Define the package for the class if not already done
*
* @param className the class name
+ * @param codeSourceURL the code source url
*/
- protected void definePackage(String className)
+ protected void definePackage(String className, URL codeSourceURL)
{
String packageName = ClassLoaderUtils.getClassPackageName(className);
if (packageName.length() == 0)
return;
+ // Ask the policy for the information
+ PackageInformation pi = policy.getPackageInformation(packageName);
+
// Already defined?
Package pkge = getPackage(packageName);
if (pkge != null)
+ {
+ // Check sealing
+ if (pkge.isSealed())
+ {
+ // Are we trying to add outside the seal?
+ if (codeSourceURL == null || pkge.isSealed(codeSourceURL) == false)
+ throw new SecurityException("Sealing violation for package " + packageName);
+ }
+ // Can we seal now?
+ else if (pi != null && pi.sealBase != null)
+ {
+ throw new SecurityException("Can't seal package " + packageName +" it is already loaded");
+ }
return;
-
- // Ask the policy for the information
- PackageInformation pi = policy.getPackageInformation(packageName);
+ }
+
try
{
if (pi != null)
definePackage(packageName, pi.specTitle, pi.specVersion, pi.specVendor, pi.implTitle, pi.implVersion, pi.implVendor, pi.sealBase);
else
definePackage(packageName, null, null, null, null, null, null, null);
+ if (log.isTraceEnabled())
+ log.trace(this + " defined package: " + packageName);
}
catch (IllegalArgumentException alreadyDone)
{
@@ -564,6 +667,7 @@
StringBuilder builder = new StringBuilder();
builder.append(getClass().getSimpleName());
builder.append('@').append(Integer.toHexString(System.identityHashCode(this)));
+ builder.append("{").append(policy.getName()).append("}");
return builder.toString();
}
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -415,6 +415,129 @@
}
/**
+ * Load a package from the domain
+ *
+ * @param classLoader the classloader
+ * @param name the resource name
+ * @param allExports whether we should look at all exports
+ * @return the package
+ */
+ Package getPackage(BaseClassLoader classLoader, String name, boolean allExports)
+ {
+ boolean trace = log.isTraceEnabled();
+
+ if (getClassLoaderSystem() == null)
+ throw new IllegalStateException("Domain is not registered with a classloader system: " + toLongString());
+
+ // Try the before attempt
+ Package result = beforeGetPackage(name);
+ if (result != null)
+ return result;
+
+ // Work out the rules
+ ClassLoaderInformation info = null;
+ BaseClassLoaderPolicy policy = null;
+ if (classLoader != null)
+ {
+ policy = classLoader.getPolicy();
+ info = infos.get(classLoader);
+ if (policy.isImportAll())
+ allExports = true;
+ }
+
+ // Next we try the old "big ball of mud" model
+ if (allExports)
+ {
+ result = getPackageFromExports(classLoader, name, trace);
+ if (result != null)
+ return result;
+ }
+ else if (trace)
+ log.trace(this + " not getting package " + name + " from all exports");
+
+ // Next we try the imports
+ if (info != null)
+ {
+ result = getPackageFromImports(info, name, trace);
+ if (result != null)
+ return result;
+ }
+
+ // Finally use any requesting classloader
+ if (classLoader != null)
+ {
+ if (trace)
+ log.trace(this + " trying to get package " + name + " from requesting " + classLoader);
+ result = classLoader.getPackageLocally(name);
+ if (result != null)
+ {
+ if (trace)
+ log.trace(this + " got package from requesting " + classLoader + " " + result);
+ return result;
+ }
+ }
+
+ // Try the after attempt
+ result = afterGetPackage(name);
+ if (result != null)
+ return result;
+
+ // Didn't find it
+ return null;
+ }
+
+ /**
+ * Load packages from the domain
+ *
+ * @param classLoader the classloader
+ * @param name the package name
+ * @param allExports whether we should look at all exports
+ * @param packages the packages to add to
+ */
+ void getPackages(BaseClassLoader classLoader, Set<Package> packages, boolean allExports)
+ {
+ boolean trace = log.isTraceEnabled();
+
+ if (getClassLoaderSystem() == null)
+ throw new IllegalStateException("Domain is not registered with a classloader system: " + toLongString());
+
+ // Try the before attempt
+ beforeGetPackages(packages);
+
+ // Work out the rules
+ ClassLoaderInformation info = null;
+ BaseClassLoaderPolicy policy = null;
+ if (classLoader != null)
+ {
+ policy = classLoader.getPolicy();
+ info = infos.get(classLoader);
+ if (policy.isImportAll())
+ allExports = true;
+ }
+
+ // Next we try the old "big ball of mud" model
+ if (allExports)
+ getPackagesFromExports(classLoader, packages, trace);
+ else if (trace)
+ log.trace(this + " not getting packages from all exports");
+
+ // Next we try the imports
+ if (info != null)
+ getPackagesFromImports(info, packages, trace);
+
+ // Finally use any requesting classloader
+ if (classLoader != null)
+ {
+ if (trace)
+ log.trace(this + " trying to get packages from requesting " + classLoader);
+ classLoader.getPackagesLocally(packages);
+ }
+
+ // Try the after attempt
+ afterGetPackages(packages);
+ }
+
+ /**
* Find a loader for class in exports
*
* @param classLoader the classloader
@@ -556,8 +679,57 @@
}
}
}
+
+ /**
+ * Load a package from the exports
+ *
+ * @param classLoader the classloader
+ * @param name the package name
+ * @param trace whether trace is enabled
+ * @return the package
+ */
+ private Package getPackageFromExports(BaseClassLoader classLoader, String name, boolean trace)
+ {
+ List<ClassLoaderInformation> list = classLoadersByPackageName.get(name);
+ if (trace)
+ log.trace(this + " trying to get package " + name + " from all exports " + list);
+ if (list != null && list.isEmpty() == false)
+ {
+ for (ClassLoaderInformation info : list)
+ {
+ BaseDelegateLoader loader = info.getExported();
+ Package result = loader.getPackage(name);
+ if (result != null)
+ return result;
+ }
+ }
+ return null;
+ }
+
/**
+ * Load packages from the exports
+ *
+ * @param classLoader the classloader
+ * @param packages the packages to add to
+ * @param trace whether trace is enabled
+ */
+ void getPackagesFromExports(BaseClassLoader classLoader, Set<Package> packages, boolean trace)
+ {
+ List<ClassLoaderInformation> list = classLoaders;
+ if (trace)
+ log.trace(this + " trying to get all packages from all exports " + list);
+ if (list != null && list.isEmpty() == false)
+ {
+ for (ClassLoaderInformation info : list)
+ {
+ BaseDelegateLoader loader = info.getExported();
+ loader.getPackages(packages);
+ }
+ }
+ }
+
+ /**
* Find a loader for a class in imports
*
* @param info the classloader information
@@ -676,8 +848,60 @@
for (DelegateLoader delegate : delegates)
delegate.getResources(name, urls);
}
+
+ /**
+ * Load a package from the imports
+ *
+ * @param info the classloader information
+ * @param name the pacakge name
+ * @param trace whether trace is enabled
+ * @return the package
+ */
+ private Package getPackageFromImports(ClassLoaderInformation info, String name, boolean trace)
+ {
+ List<? extends DelegateLoader> delegates = info.getDelegates();
+ if (delegates == null || delegates.isEmpty())
+ {
+ if (trace)
+ log.trace(this + " not getting package " + name + " from imports it has no delegates");
+ return null;
+ }
+ if (trace)
+ log.trace(this + " trying to get package " + name + " from imports " + delegates + " for " + info.getClassLoader());
+
+ for (DelegateLoader delegate : delegates)
+ {
+ Package result = delegate.getPackage(name);
+ if (result != null)
+ return result;
+ }
+ return null;
+ }
+
/**
+ * Load packages from the imports
+ *
+ * @param info the classloader info
+ * @param packages the packages to add to
+ * @param trace whether trace is enabled
+ */
+ void getPackagesFromImports(ClassLoaderInformation info, Set<Package> packages, boolean trace)
+ {
+ List<? extends DelegateLoader> delegates = info.getDelegates();
+ if (delegates == null || delegates.isEmpty())
+ {
+ if (trace)
+ log.trace(this + " not getting all packages from imports it has no delegates");
+ return;
+ }
+ if (trace)
+ log.trace(this + " trying to get all pacakges from imports " + delegates + " for " + info.getClassLoader());
+ for (DelegateLoader delegate : delegates)
+ delegate.getPackages(packages);
+ }
+
+ /**
* Invoked before classloading is attempted to allow a preload attempt, e.g. from the parent
*
* @param name the class resource name
@@ -722,11 +946,41 @@
/**
* Invoked after getResource is attempted to allow a postload attempt, e.g. from the parent
*
- * @param name the class name
+ * @param name the resource name
* @return the url if found or null otherwise
*/
protected abstract URL afterGetResource(String name);
+ /**
+ * Invoked before getPackages is attempted to allow a preload attempt, e.g. from the parent
+ *
+ * @param packages the packages to add to
+ */
+ protected abstract void beforeGetPackages(Set<Package> packages);
+
+ /**
+ * Invoked after getPackages is attempted to allow a postload attempt, e.g. from the parent
+ *
+ * @param packages the packages to add to
+ */
+ protected abstract void afterGetPackages(Set<Package> packages);
+
+ /**
+ * Invoked before getPackage is attempted to allow a preload attempt, e.g. from the parent
+ *
+ * @param name the package name
+ * @return the package if found or null otherwise
+ */
+ protected abstract Package beforeGetPackage(String name);
+
+ /**
+ * Invoked after getPackage is attempted to allow a postload attempt, e.g. from the parent
+ *
+ * @param name the package name
+ * @return the url if found or null otherwise
+ */
+ protected abstract Package afterGetPackage(String name);
+
public Class<?> loadClass(String name)
{
try
@@ -786,6 +1040,39 @@
{
getResources(classLoader, name, urls, false);
}
+
+ public Package getPackage(String name)
+ {
+ return getPackage(null, name, true);
+ }
+
+ /**
+ * Get a package from the specified classloader
+ *
+ * @param classLoader the classloader
+ * @param name the package name
+ * @return the package
+ */
+ Package getPackage(BaseClassLoader classLoader, String name)
+ {
+ return getPackage(classLoader, name, false);
+ }
+
+ public void getPackages(Set<Package> packages)
+ {
+ getPackages(null, packages, true);
+ }
+
+ /**
+ * Get the packages from a specified classloader
+ *
+ * @param classLoader the classloader
+ * @param packages the packages
+ */
+ void getPackages(BaseClassLoader classLoader, Set<Package> packages)
+ {
+ getPackages(classLoader, packages, false);
+ }
/**
* A long version of toString()
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderPolicy.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderPolicy.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderPolicy.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -87,6 +87,16 @@
protected abstract DelegateLoader getExported();
/**
+ * Get a simple name for the classloader
+ *
+ * @return the name
+ */
+ protected String getName()
+ {
+ return "";
+ }
+
+ /**
* Get the exported packages<p>
*
* Provides a hint for indexing
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseDelegateLoader.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseDelegateLoader.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseDelegateLoader.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -105,6 +105,36 @@
classLoader.getResourcesLocally(name, urls);
}
+ public Package getPackage(String name)
+ {
+ BaseClassLoader classLoader;
+ try
+ {
+ classLoader = delegate.getClassLoader();
+ }
+ catch (IllegalStateException e)
+ {
+ log.warn("Not getting package from policy that has no classLoader: " + toLongString());
+ return null;
+ }
+ return classLoader.getPackageLocally(name);
+ }
+
+ public void getPackages(Set<Package> packages)
+ {
+ BaseClassLoader classLoader;
+ try
+ {
+ classLoader = delegate.getClassLoader();
+ }
+ catch (IllegalStateException e)
+ {
+ log.warn("Not getting packages from policy that has no classLoader: " + toLongString());
+ return;
+ }
+ classLoader.getPackagesLocally(packages);
+ }
+
/**
* A long version of toString()
*
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/ClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/ClassFilter.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/ClassFilter.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -61,4 +61,12 @@
* @return true when it matches the filter
*/
boolean matchesResourcePath(String resourcePath);
+
+ /**
+ * Whether the package name matches the filter
+ *
+ * @param packageName the package path
+ * @return true when it matches the filter
+ */
+ boolean matchesPackageName(String packageName);
}
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/FilteredDelegateLoader.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/FilteredDelegateLoader.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/FilteredDelegateLoader.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -23,6 +23,7 @@
import java.io.IOException;
import java.net.URL;
+import java.util.HashSet;
import java.util.Set;
import org.jboss.classloader.spi.ClassLoaderPolicy;
@@ -121,6 +122,39 @@
log.trace(this + " " + name + " does NOT match filter=" + filter);
}
+ public Package getPackage(String name)
+ {
+ boolean trace = log.isTraceEnabled();
+ if (filter.matchesPackageName(name))
+ {
+ if (trace)
+ log.trace(this + " " + name + " matches package filter=" + filter);
+ return super.getPackage(name);
+ }
+ if (trace)
+ log.trace(this + " " + name + " does NOT match package filter=" + filter);
+ return null;
+ }
+
+ public void getPackages(Set<Package> packages)
+ {
+ boolean trace = log.isTraceEnabled();
+
+ Set<Package> allPackages = new HashSet<Package>();
+ super.getPackages(allPackages);
+ for (Package pkge : allPackages)
+ {
+ if (filter.matchesPackageName(pkge.getName()))
+ {
+ if (trace)
+ log.trace(this + " " + pkge + " matches package filter=" + filter);
+ packages.add(pkge);
+ }
+ else if (trace)
+ log.trace(this + " pkge=" + pkge + " does NOT match package filter=" + filter);
+ }
+ }
+
@Override
protected void toLongString(StringBuilder builder)
{
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/PackageClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/PackageClassFilter.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/filter/PackageClassFilter.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -110,7 +110,9 @@
*/
public PackageClassFilter(String[] packageNames)
{
- super(convertPackageNamesToClassPatterns(packageNames), convertPackageNamesToResourcePatterns(packageNames));
+ super(convertPackageNamesToClassPatterns(packageNames),
+ convertPackageNamesToResourcePatterns(packageNames),
+ packageNames);
this.packageNames = packageNames;
}
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/IsolatedClassLoaderTestHelper.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/IsolatedClassLoaderTestHelper.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/IsolatedClassLoaderTestHelper.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -162,7 +162,7 @@
public Class<?> initializeClassLoader(Class<?> clazz, boolean importAll, Class<?>... packages)
{
MockClassLoaderPolicy policy = new MockClassLoaderPolicy();
- Set<Class> classes = new HashSet<Class>();
+ Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(clazz);
for (Class<?> c : packages)
classes.add(c);
@@ -242,7 +242,7 @@
public Class<?> initializeClassLoader(Class<?> clazz, ClassFilter parentFilter, boolean importAll, Class<?>... packages)
{
MockClassLoaderPolicy policy = new MockClassLoaderPolicy();
- Set<Class> classes = new HashSet<Class>();
+ Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(clazz);
for (Class<?> c : packages)
classes.add(c);
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderPolicy.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderPolicy.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderPolicy.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -39,6 +39,7 @@
import org.jboss.classloader.plugins.filter.PatternClassFilter;
import org.jboss.classloader.spi.ClassLoaderPolicy;
import org.jboss.classloader.spi.DelegateLoader;
+import org.jboss.classloader.spi.PackageInformation;
import org.jboss.classloader.spi.filter.ClassFilter;
/**
@@ -92,7 +93,9 @@
*/
public MockClassLoaderPolicy(String name)
{
- this(name, new String[] { "org\\.jboss\\..+" }, new String[] { "org/jboss/.+" });
+ this(name, new String[] { "org\\.jboss\\..+" },
+ new String[] { "org/jboss/.+" },
+ new String[] { "org\\.jboss", "org\\.jboss\\..*" });
}
/**
@@ -101,10 +104,11 @@
* @param name the name
* @param classPatterns the class patterns
* @param resourcePatterns the resourcePatterns
+ * @param packagePatterns the packagePatterns
*/
- public MockClassLoaderPolicy(String name, String[] classPatterns, String[] resourcePatterns)
+ public MockClassLoaderPolicy(String name, String[] classPatterns, String[] resourcePatterns, String[] packagePatterns)
{
- this(name, new PatternClassFilter(classPatterns, resourcePatterns));
+ this(name, new PatternClassFilter(classPatterns, resourcePatterns, packagePatterns));
}
/**
@@ -124,6 +128,11 @@
this.nonJDKFilter = nonJDKFilter;
}
+ public String getName()
+ {
+ return name;
+ }
+
@Override
public List<? extends DelegateLoader> getDelegates()
{
@@ -195,7 +204,7 @@
*
* @param classes the classes to reference to determine the package paths
*/
- public void setPaths(Class... classes)
+ public void setPaths(Class<?>... classes)
{
if (classes == null)
{
@@ -228,7 +237,7 @@
*
* @param classes the classes to reference to determine the package names
*/
- public void setPackageNames(Class... classes)
+ public void setPackageNames(Class<?>... classes)
{
if (classes == null)
{
@@ -245,7 +254,7 @@
*
* @param classes the classes to include from the paths
*/
- public void setIncluded(Class... classes)
+ public void setIncluded(Class<?>... classes)
{
if (classes == null)
{
@@ -262,7 +271,7 @@
*
* @param classes the classes to exclude from the paths
*/
- public void setExcluded(Class... classes)
+ public void setExcluded(Class<?>... classes)
{
if (classes == null)
{
@@ -279,7 +288,7 @@
*
* @param classes the classes to reference
*/
- public void setPathsAndPackageNames(Class... classes)
+ public void setPathsAndPackageNames(Class<?>... classes)
{
setPaths(classes);
setPackageNames(classes);
@@ -404,7 +413,7 @@
@Override
protected ProtectionDomain getProtectionDomain(String className, String path)
{
- final Class clazz;
+ final Class<?> clazz;
try
{
clazz = getClass().getClassLoader().loadClass(className);
@@ -422,6 +431,14 @@
}, getAccessControlContext());
}
+ @Override
+ public PackageInformation getPackageInformation(String packageName)
+ {
+ PackageInformation pi = new PackageInformation(packageName);
+ pi.implTitle = name;
+ return pi;
+ }
+
/*
* Overridden to not expose classes in the nonJDKFilter
* this is so we don't expose classes from the classpath
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/AbstractClassLoaderTest.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/AbstractClassLoaderTest.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/AbstractClassLoaderTest.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -265,6 +265,21 @@
}
}
+ protected void assertPackage(Class<?> reference, ClassLoader classLoader) throws Exception
+ {
+ Class<?> clazz = classLoader.loadClass(reference.getName());
+ Package pkge = Package.getPackage(ClassLoaderUtils.getClassPackageName(clazz.getName()));
+ assertEquals(pkge,clazz.getPackage());
+ }
+
+ protected void assertPackage(Class<?> reference, ClassLoader classLoader, MockClassLoaderPolicy policy) throws Exception
+ {
+ Class<?> clazz = classLoader.loadClass(reference.getName());
+ Package pkge = clazz.getPackage();
+ assertNotNull("Expected a package for " + clazz.getName(), pkge);
+ assertEquals(policy.getName(), pkge.getImplementationTitle());
+ }
+
protected void assertFilterMatchesClassName(String test, ClassFilter filter)
{
getLog().debug("Checking " + test + " expect it to match filter=" + filter);
@@ -296,6 +311,22 @@
getLog().debug("Checked " + test + " result was " + result + " for filter=" + filter);
assertFalse("Expected " + test + " NOT to match " + filter, result);
}
+
+ protected void assertFilterMatchesPackageName(String test, ClassFilter filter)
+ {
+ getLog().debug("Checking " + test + " expect it to match filter=" + filter);
+ boolean result = filter.matchesPackageName(test);
+ getLog().debug("Checked " + test + " result was " + result + " for filter=" + filter);
+ assertTrue("Expected " + test + " to match " + filter, result);
+ }
+
+ protected void assertFilterNoMatchPackageName(String test, ClassFilter filter)
+ {
+ getLog().debug("Checking " + test + " expect it NOT to match filter=" + filter);
+ boolean result = filter.matchesPackageName(test);
+ getLog().debug("Checked " + test + " result was " + result + " for filter=" + filter);
+ assertFalse("Expected " + test + " NOT to match " + filter, result);
+ }
protected void configureLogging()
{
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/bootstrap/support/TestClass.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/bootstrap/support/TestClass.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/bootstrap/support/TestClass.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -34,7 +34,7 @@
{
public Object doSomething() throws Exception
{
- Constructor constructor = getClass().getConstructor((Class[]) null);
+ Constructor<?> constructor = getClass().getConstructor((Class[]) null);
Object object = constructor.newInstance((Object[]) null);
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/bootstrap/test/ModifiedBootstrapUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/bootstrap/test/ModifiedBootstrapUnitTestCase.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/bootstrap/test/ModifiedBootstrapUnitTestCase.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -80,8 +80,8 @@
policy.setPathsAndPackageNames(TestClass.class);
ClassLoader classLoader = system.registerClassLoaderPolicy(policy);
- Class clazz = assertLoadClass(TestClass.class, classLoader);
- Constructor constructor = clazz.getConstructor((Class[]) null);
+ Class<?> clazz = assertLoadClass(TestClass.class, classLoader);
+ Constructor<?> constructor = clazz.getConstructor((Class[]) null);
Object object = constructor.newInstance((Object[]) null);
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MatchClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MatchClassFilter.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MatchClassFilter.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -36,7 +36,7 @@
public boolean filtered = false;
- public MatchClassFilter(Class clazz)
+ public MatchClassFilter(Class<?> clazz)
{
this.className = clazz.getName();
}
@@ -54,4 +54,11 @@
filtered = true;
return true;
}
+
+ public boolean matchesPackageName(String packageName)
+ {
+ if (ClassLoaderUtils.getClassPackageName(this.className).equals(packageName))
+ filtered = true;
+ return true;
+ }
}
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MockLoader.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MockLoader.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/MockLoader.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -63,4 +63,14 @@
return null;
}
}
+
+ public Package getPackage(String name)
+ {
+ return null;
+ }
+
+ public void getPackages(Set<Package> packages)
+ {
+ // Nothing
+ }
}
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/NoMatchClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/NoMatchClassFilter.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/support/NoMatchClassFilter.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -36,7 +36,7 @@
public boolean filtered = false;
- public NoMatchClassFilter(Class clazz)
+ public NoMatchClassFilter(Class<?> clazz)
{
this.className = clazz.getName();
}
@@ -60,4 +60,11 @@
}
return true;
}
+
+ public boolean matchesPackageName(String packageName)
+ {
+ if (ClassLoaderUtils.getClassPackageName(this.className).equals(packageName))
+ return false;
+ return true;
+ }
}
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/test/CustomParentLoaderUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/test/CustomParentLoaderUnitTestCase.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/test/CustomParentLoaderUnitTestCase.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -133,7 +133,7 @@
assertTrue("Should have been filtered", filter.filtered);
}
- protected void checkGetResource(MockLoader loader, Class... classes)
+ protected void checkGetResource(MockLoader loader, Class<?>... classes)
{
if (classes == null || classes.length == 0)
{
@@ -141,12 +141,12 @@
return;
}
Set<String> resourcePaths = new HashSet<String>();
- for (Class clazz : classes)
+ for (Class<?> clazz : classes)
resourcePaths.add(ClassLoaderUtils.classNameToPath(clazz.getName()));
assertEquals(resourcePaths, loader.getResource);
}
- protected void checkLoadClass(MockLoader loader, Class... classes)
+ protected void checkLoadClass(MockLoader loader, Class<?>... classes)
{
if (classes == null || classes.length == 0)
{
@@ -154,7 +154,7 @@
return;
}
Set<String> classNames = new HashSet<String>();
- for (Class clazz : classes)
+ for (Class<?> clazz : classes)
classNames.add(clazz.getName());
assertEquals(classNames, loader.loadClass);
}
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/test/ParentPolicyUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/test/ParentPolicyUnitTestCase.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/domain/test/ParentPolicyUnitTestCase.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -60,7 +60,9 @@
ClassLoader classLoader = system.registerClassLoaderPolicy(domain, policy);
assertLoadClass(Object.class, classLoader, null, true);
+ assertPackage(ClassLoaderDomain.class, classLoader);
assertLoadClass(ClassLoaderDomain.class, classLoader, null, true);
+ assertPackage(ClassLoaderDomain.class, classLoader);
}
public void testBefore() throws Exception
@@ -74,6 +76,7 @@
assertLoadClass(Object.class, classLoader, null, true);
assertLoadClass(ClassLoaderDomain.class, classLoader, null, true);
+ assertPackage(ClassLoaderDomain.class, classLoader);
}
public void testBeforeButJavaOnly() throws Exception
@@ -87,6 +90,7 @@
assertLoadClass(Object.class, classLoader, null, true);
assertLoadClass(ClassLoaderDomain.class, classLoader);
+ assertPackage(ClassLoaderDomain.class, classLoader, policy);
}
public void testBeforeButJavaOnlyNotFound() throws Exception
@@ -112,6 +116,7 @@
assertLoadClass(Object.class, classLoader, null, true);
assertLoadClass(ClassLoaderDomain.class, classLoader);
+ assertPackage(ClassLoaderDomain.class, classLoader);
}
public void testAfterReached() throws Exception
@@ -124,6 +129,7 @@
assertLoadClass(Object.class, classLoader, null, true);
assertLoadClass(ClassLoaderDomain.class, classLoader, null, true);
+ assertPackage(ClassLoaderDomain.class, classLoader);
}
public void testAfterButJavaBeforeNotReached() throws Exception
@@ -137,6 +143,7 @@
assertLoadClass(Object.class, classLoader, null, true);
assertLoadClass(ClassLoaderDomain.class, classLoader);
+ assertPackage(ClassLoaderDomain.class, classLoader);
}
public void testAfterButJavaBeforeReached() throws Exception
@@ -149,6 +156,7 @@
assertLoadClass(Object.class, classLoader, null, true);
assertLoadClass(ClassLoaderDomain.class, classLoader, null, true);
+ assertPackage(ClassLoaderDomain.class, classLoader);
}
public void testBeforeFilteredNotMatched() throws Exception
@@ -165,6 +173,7 @@
assertLoadClass(Object.class, classLoader, null, true);
assertLoadClass(ClassLoaderDomain.class, classLoader);
assertTrue("Should have been filtered", filter.filtered);
+ assertPackage(ClassLoaderDomain.class, classLoader, policy);
}
public void testBeforeFilteredMatched() throws Exception
@@ -181,6 +190,7 @@
assertLoadClass(Object.class, classLoader, null, true);
assertLoadClass(ClassLoaderDomain.class, classLoader, null, true);
assertTrue("Should have been filtered", filter.filtered);
+ assertPackage(ClassLoaderDomain.class, classLoader);
}
public void testAfterFilteredNotReached() throws Exception
@@ -197,6 +207,7 @@
assertLoadClass(Object.class, classLoader, null, true);
assertLoadClass(ClassLoaderDomain.class, classLoader);
assertFalse("Should NOT have been filtered", filter.filtered);
+ assertPackage(ClassLoaderDomain.class, classLoader, policy);
}
public void testAfterFilteredReachedNotMatched() throws Exception
@@ -227,6 +238,7 @@
assertLoadClass(Object.class, classLoader, null, true);
assertLoadClass(ClassLoaderDomain.class, classLoader, null, true);
assertTrue("Should have been filtered", filter.filtered);
+ assertPackage(ClassLoaderDomain.class, classLoader);
}
public void testNoMatchBeforeAndAfter() throws Exception
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/FilterUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/FilterUnitTestCase.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/FilterUnitTestCase.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -50,6 +50,12 @@
assertFilterMatchesClassName("gibberish", filter);
assertFilterMatchesClassName("", filter);
assertFilterMatchesClassName(null, filter);
+ assertFilterMatchesResourcePath("gibberish", filter);
+ assertFilterMatchesResourcePath("", filter);
+ assertFilterMatchesResourcePath(null, filter);
+ assertFilterMatchesPackageName("gibberish", filter);
+ assertFilterMatchesPackageName("", filter);
+ assertFilterMatchesPackageName(null, filter);
}
public void testNothing() throws Exception
@@ -58,6 +64,12 @@
assertFilterNoMatchClassName("gibberish", filter);
assertFilterNoMatchClassName("", filter);
assertFilterNoMatchClassName(null, filter);
+ assertFilterNoMatchResourcePath("gibberish", filter);
+ assertFilterNoMatchResourcePath("", filter);
+ assertFilterNoMatchResourcePath(null, filter);
+ assertFilterNoMatchPackageName("gibberish", filter);
+ assertFilterNoMatchPackageName("", filter);
+ assertFilterNoMatchPackageName(null, filter);
}
public void testJavaOnly() throws Exception
@@ -80,5 +92,35 @@
assertFilterNoMatchClassName("gibberish", filter);
assertFilterNoMatchClassName("", filter);
assertFilterNoMatchClassName(null, filter);
+ assertFilterMatchesResourcePath("java/x", filter);
+ assertFilterMatchesResourcePath("java/lang/Object", filter);
+ assertFilterMatchesResourcePath("java/lang/ref/Method", filter);
+ assertFilterMatchesResourcePath("java/util/Collection", filter);
+ assertFilterMatchesResourcePath("javax/x", filter);
+ assertFilterMatchesResourcePath("javax/naming/Context", filter);
+ assertFilterNoMatchResourcePath("java/", filter);
+ assertFilterNoMatchResourcePath("java", filter);
+ assertFilterNoMatchResourcePath("javaa.", filter);
+ assertFilterNoMatchResourcePath("javaa/whatever", filter);
+ assertFilterNoMatchResourcePath("javax", filter);
+ assertFilterNoMatchResourcePath("javax/", filter);
+ assertFilterNoMatchResourcePath("javaxa/", filter);
+ assertFilterNoMatchResourcePath("javaxa/whatever", filter);
+ assertFilterNoMatchResourcePath("gibberish", filter);
+ assertFilterNoMatchResourcePath("", filter);
+ assertFilterNoMatchResourcePath(null, filter);
+ assertFilterMatchesPackageName("java", filter);
+ assertFilterMatchesPackageName("java.lang", filter);
+ assertFilterMatchesPackageName("java.lang.ref", filter);
+ assertFilterMatchesPackageName("java.util", filter);
+ assertFilterMatchesPackageName("javax", filter);
+ assertFilterMatchesPackageName("javax.naming", filter);
+ assertFilterNoMatchPackageName("javaa.", filter);
+ assertFilterNoMatchPackageName("javaa.whatever", filter);
+ assertFilterNoMatchPackageName("javaxa.", filter);
+ assertFilterNoMatchPackageName("javaxa.whatever", filter);
+ assertFilterNoMatchPackageName("gibberish", filter);
+ assertFilterNoMatchPackageName("", filter);
+ assertFilterNoMatchPackageName(null, filter);
}
}
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/PackageFilterUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/PackageFilterUnitTestCase.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/PackageFilterUnitTestCase.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -52,6 +52,9 @@
assertFilterNoMatchClassName("", filter);
assertFilterNoMatchClassName(null, filter);
assertFilterNoMatchResourcePath("x.xml", filter);
+ assertFilterNoMatchPackageName("gibberish", filter);
+ assertFilterNoMatchPackageName("", filter);
+ assertFilterNoMatchPackageName(null, filter);
}
public void testJavaLang() throws Exception
@@ -66,6 +69,12 @@
assertFilterNoMatchClassName("", filter);
assertFilterNoMatchClassName(null, filter);
assertFilterMatchesResourcePath("java/lang/something.xml", filter);
+ assertFilterMatchesPackageName("java.lang", filter);
+ assertFilterNoMatchPackageName("java.langx", filter);
+ assertFilterNoMatchPackageName("java.lang.X.", filter);
+ assertFilterNoMatchPackageName("gibberish", filter);
+ assertFilterNoMatchPackageName("", filter);
+ assertFilterNoMatchPackageName(null, filter);
}
public void testJavaLangAndJavaLangReflect() throws Exception
@@ -83,5 +92,14 @@
assertFilterNoMatchClassName("gibberish", filter);
assertFilterNoMatchClassName("", filter);
assertFilterNoMatchClassName(null, filter);
+ assertFilterMatchesPackageName("java.lang", filter);
+ assertFilterNoMatchPackageName("java.langx", filter);
+ assertFilterNoMatchPackageName("java.lang.X.", filter);
+ assertFilterMatchesPackageName("java.lang.reflect", filter);
+ assertFilterNoMatchPackageName("java.lang.reflectx", filter);
+ assertFilterNoMatchPackageName("java.lang.reflect.X", filter);
+ assertFilterNoMatchPackageName("gibberish", filter);
+ assertFilterNoMatchPackageName("", filter);
+ assertFilterNoMatchPackageName(null, filter);
}
}
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/junit/test/IsolatedClassLoaderUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/junit/test/IsolatedClassLoaderUnitTestCase.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/junit/test/IsolatedClassLoaderUnitTestCase.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -129,7 +129,7 @@
public void testJavaClass() throws Exception
{
- Class clazz = getClass().getClassLoader().loadClass("java.util.Set");
+ Class<?> clazz = getClass().getClassLoader().loadClass("java.util.Set");
assertEquals(Set.class, clazz);
clazz = getClass().getClassLoader().loadClass("javax.naming.InitialContext");
assertEquals(InitialContext.class, clazz);
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/old/test/CircularLoadUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/old/test/CircularLoadUnitTestCase.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/old/test/CircularLoadUnitTestCase.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -89,16 +89,16 @@
// Load and create an instance of the UserOfBase class
Class<?> userOfBaseClass = assertLoadClass(UserOfBase.class, cl0);
- Constructor ctor0 = userOfBaseClass.getConstructor((Class[]) null);
+ Constructor<?> ctor0 = userOfBaseClass.getConstructor((Class[]) null);
Object userOfBase = ctor0.newInstance((Object[]) null);
// Load and create an instance of the Support class
Class<?> supportClass = assertLoadClass(Support.class, cl1);
- Constructor ctor1 = supportClass.getConstructor((Class[]) null);
+ Constructor<?> ctor1 = supportClass.getConstructor((Class[]) null);
Object support = ctor1.newInstance((Object[]) null);
// Now invoke UserOfBase.testBase(Support)
- Class[] sig = { supportClass };
+ Class<?>[] sig = { supportClass };
Method testBase = userOfBaseClass.getMethod("testBase", sig);
getLog().info(testBase.toString());
Object[] args = { support };
@@ -124,21 +124,21 @@
{
// Load and create an instance of the UserOfLoginInfo class
Class<?> c0 = assertLoadClass(UserOfLoginInfo.class, cl);
- Class[] ctorsig0 = {String.class, String.class};
- Constructor ctor0 = c0.getConstructor(ctorsig0);
+ Class<?>[] ctorsig0 = {String.class, String.class};
+ Constructor<?> ctor0 = c0.getConstructor(ctorsig0);
Object[] args0 = {"jduke", "theduke"};
ctor0.newInstance(args0);
// Load and create an instance of the UserOfUsrMgr class
Class<?> c1 = assertLoadClass(UserOfUsrMgr.class, cl);
- Class[] ctorsig1 = {String.class, String.class};
- Constructor ctor1 = c1.getConstructor(ctorsig1);
+ Class<?>[] ctorsig1 = {String.class, String.class};
+ Constructor<?> ctor1 = c1.getConstructor(ctorsig1);
Object[] args1 = {"jduke", "theduke"};
Object o1 = ctor1.newInstance(args1);
// Now invoke UserOfUsrMgr.changePassword(char[] password)
char[] password = "theduke2".toCharArray();
- Class[] sig = {password.getClass()};
+ Class<?>[] sig = {password.getClass()};
Method changePassword = c1.getMethod("changePassword", sig);
getLog().info(changePassword.toString());
Object[] args = {password};
@@ -282,7 +282,7 @@
String classname;
ClassLoader loader;
ClassLoader expected;
- Class loadedClass;
+ Class<?> loadedClass;
Throwable loadError;
boolean fails;
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/old/test/CircularityErrorUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/old/test/CircularityErrorUnitTestCase.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/old/test/CircularityErrorUnitTestCase.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -68,7 +68,7 @@
ClassLoaderSystem system = createClassLoaderSystemWithModifiedBootstrap();
final ClassLoader cl = system.registerClassLoaderPolicy(new TestClassLoaderPolicy());
- Class cls = assertLoadClass(Support.class, cl);
+ Class<?> cls = assertLoadClass(Support.class, cl);
Thread thread1 = new Thread(new Runnable()
{
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/old/test/ConcurrentLoaderUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/old/test/ConcurrentLoaderUnitTestCase.java 2008-01-10 09:54:42 UTC (rev 68810)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/old/test/ConcurrentLoaderUnitTestCase.java 2008-01-10 10:17:47 UTC (rev 68811)
@@ -47,7 +47,7 @@
public final static int MAX_CLASSES = 10;
public final static int NUMBER_OF_LOADING = 10;
public final static int NUMBER_OF_THREADS = 20;
- private HashSet<Class> classes = new HashSet<Class>();
+ private HashSet<Class<?>> classes = new HashSet<Class<?>>();
private Vector<Loader> loaders = new Vector<Loader>();
private Timer newInstanceTimer;
private int doneCount;
@@ -114,14 +114,14 @@
public void run()
{
int size = classes.size();
- Class[] theClasses = new Class[size];
+ Class<?>[] theClasses = new Class<?>[size];
classes.toArray(theClasses);
getLog().trace("NewInstanceTask, creating " + size + " instances");
for (int c = 0; c < theClasses.length; ++c)
{
try
{
- Class clazz = theClasses[c];
+ Class<?> clazz = theClasses[c];
Object obj = clazz.newInstance();
getLog().trace("Created instance=" + obj);
}
@@ -170,7 +170,7 @@
getLog().trace("before load...");
long sleep = (long) (500 * Math.random());
Thread.sleep(sleep);
- Class clazz = cl.loadClass (className);
+ Class<?> clazz = cl.loadClass(className);
classes.add(clazz);
Object obj = clazz.newInstance();
getLog().trace("Class " + className + " loaded, obj=" + obj);
More information about the jboss-cvs-commits
mailing list