[jboss-cvs] JBossAS SVN: r69859 - in projects/microcontainer/trunk/classloader/src: main/org/jboss/classloader/spi/base and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Feb 15 09:08:12 EST 2008
Author: adrian at jboss.org
Date: 2008-02-15 09:08:12 -0500 (Fri, 15 Feb 2008)
New Revision: 69859
Modified:
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderPolicy.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/ClassLoaderInformation.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderHelper.java
projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderPolicy.java
projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/policy/support/TestClassLoaderPolicy.java
Log:
Fix the classloading deadlock. Fix the spelling of cacheable. Allow getExported to be public such that places outside classloading package can wire classloader/policys together with minimal/no assumptions
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderPolicy.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderPolicy.java 2008-02-15 14:06:06 UTC (rev 69858)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderPolicy.java 2008-02-15 14:08:12 UTC (rev 69859)
@@ -58,11 +58,9 @@
*
* By default this uses {@link #getPackageNames()} to create a {@link FilteredDelegateLoader}
*
- * NOTE: Protected access for security reasons
- *
* @return the delegate loader
*/
- protected DelegateLoader getExported()
+ public DelegateLoader getExported()
{
String[] packageNames = getPackageNames();
if (packageNames == null)
@@ -121,7 +119,7 @@
*
* @return true to cache
*/
- protected boolean isCachable()
+ protected boolean isCacheable()
{
return true;
}
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-02-15 14:06:06 UTC (rev 69858)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoader.java 2008-02-15 14:08:12 UTC (rev 69859)
@@ -94,7 +94,7 @@
loader = new DelegateLoader(policy);
- if (basePolicy.isCachable())
+ if (basePolicy.isCacheable())
resourceCache = new ConcurrentHashMap<String, URL>();
if (basePolicy.isBlackListable())
@@ -821,14 +821,13 @@
if (trace)
log.trace(this + " unlock " + thread + " holding=" + lock.getHoldCount());
- lock.unlock();
-
- if (lock.getHoldCount() == 0)
+ synchronized (this)
{
- ClassLoaderManager.unregisterLoaderThread(this, thread);
-
- synchronized (this)
+ lock.unlock();
+
+ if (lock.getHoldCount() == 0)
{
+ ClassLoaderManager.unregisterLoaderThread(this, thread);
notifyAll();
}
}
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-02-15 14:06:06 UTC (rev 69858)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java 2008-02-15 14:08:12 UTC (rev 69859)
@@ -577,7 +577,7 @@
// See whether the policies allow caching/blacklisting
BaseClassLoaderPolicy loaderPolicy = exported.getPolicy();
- if (loaderPolicy.isCachable() == false)
+ if (loaderPolicy.isCacheable() == false)
canCache = false;
if (loaderPolicy.isBlackListable() == false)
canBlackList = false;
@@ -635,7 +635,7 @@
// See whether the policies allow caching/blacklisting
BaseClassLoaderPolicy loaderPolicy = loader.getPolicy();
- if (loaderPolicy.isCachable() == false)
+ if (loaderPolicy.isCacheable() == false)
canCache = false;
if (loaderPolicy.isBlackListable() == false)
canBlackList = false;
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-02-15 14:06:06 UTC (rev 69858)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderPolicy.java 2008-02-15 14:08:12 UTC (rev 69859)
@@ -156,7 +156,7 @@
*
* @return true to cache
*/
- protected abstract boolean isCachable();
+ protected abstract boolean isCacheable();
/**
* Whether to cache misses<p>
@@ -183,7 +183,11 @@
StringBuilder builder = new StringBuilder();
builder.append(getClass().getSimpleName());
builder.append("@").append(Integer.toHexString(System.identityHashCode(this)));
- builder.append("{domain=");
+ builder.append("{");
+ String name = getName();
+ if (name != null)
+ builder.append("name=").append(name).append(" ");
+ builder.append("domain=");
if (domain == null)
builder.append("null");
else
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/ClassLoaderInformation.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/ClassLoaderInformation.java 2008-02-15 14:06:06 UTC (rev 69858)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/ClassLoaderInformation.java 2008-02-15 14:08:12 UTC (rev 69859)
@@ -86,7 +86,7 @@
this.exported = policy.getExported();
this.delegates = policy.getDelegates();
- boolean canCache = policy.isCachable();
+ boolean canCache = policy.isCacheable();
boolean canBlackList = policy.isBlackListable();
if (delegates != null && delegates.isEmpty() == false)
{
@@ -94,7 +94,7 @@
{
BaseDelegateLoader baseDelegate = delegate;
BaseClassLoaderPolicy delegatePolicy = baseDelegate.getPolicy();
- if (delegatePolicy.isCachable() == false)
+ if (delegatePolicy.isCacheable() == false)
canCache = false;
if (delegatePolicy.isBlackListable() == false)
canBlackList = false;
Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderHelper.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderHelper.java 2008-02-15 14:06:06 UTC (rev 69858)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderHelper.java 2008-02-15 14:08:12 UTC (rev 69859)
@@ -27,6 +27,7 @@
import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem;
import org.jboss.classloader.spi.ClassLoaderDomain;
import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloader.spi.ParentPolicy;
/**
* MockClassLoaderHelper<p>
@@ -94,6 +95,78 @@
}
/**
+ * Create and register a mock classloader policy<p>
+ *
+ * No security problem here. The user needs access to a ClassLoaderSystem
+ * to register a classloader with it.
+ *
+ * @param system the system
+ * @param domainName the domain name
+ * @param name the name
+ * @return the classloader
+ */
+ public static ClassLoader createAndRegisterMockClassLoader(final ClassLoaderSystem system, final String domainName, final String name)
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
+ {
+ public ClassLoader run()
+ {
+ MockClassLoaderPolicy policy = new MockClassLoaderPolicy(name);
+ return system.registerClassLoaderPolicy(domainName, policy);
+ }
+ });
+ }
+
+ /**
+ * Create and register a mock classloader policy<p>
+ *
+ * No security problem here. The user needs access to a ClassLoaderSystem
+ * to register a classloader with it.
+ *
+ * @param system the system
+ * @param domainName the domain name
+ * @param parentPolicy the parent policy
+ * @param name the name
+ * @return the classloader
+ */
+ public static ClassLoader createAndRegisterMockClassLoader(final ClassLoaderSystem system, final String domainName, final ParentPolicy parentPolicy, final String name)
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
+ {
+ public ClassLoader run()
+ {
+ MockClassLoaderPolicy policy = new MockClassLoaderPolicy(name);
+ return system.registerClassLoaderPolicy(domainName, parentPolicy, policy);
+ }
+ });
+ }
+
+ /**
+ * Create and register a mock classloader policy<p>
+ *
+ * No security problem here. The user needs access to a ClassLoaderSystem
+ * to register a classloader with it.
+ *
+ * @param system the system
+ * @param domainName the domain name
+ * @param parentPolicy the parent policy
+ * @param parentDomainName the parent domain name
+ * @param name the name
+ * @return the classloader
+ */
+ public static ClassLoader createAndRegisterMockClassLoader(final ClassLoaderSystem system, final String domainName, final ParentPolicy parentPolicy, final String parentDomainName, final String name)
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
+ {
+ public ClassLoader run()
+ {
+ MockClassLoaderPolicy policy = new MockClassLoaderPolicy(name);
+ return system.registerClassLoaderPolicy(domainName, parentPolicy, parentDomainName, policy);
+ }
+ });
+ }
+
+ /**
* Register a mock classloader policy<p>
*
* No security problem here. The user needs access to a ClassLoaderSystem
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-02-15 14:06:06 UTC (rev 69858)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/test/support/MockClassLoaderPolicy.java 2008-02-15 14:08:12 UTC (rev 69859)
@@ -252,6 +252,16 @@
/**
* Set the included classes
*
+ * @param included the classes to include from the paths
+ */
+ public void setIncluded(String... included)
+ {
+ this.included = included;
+ }
+
+ /**
+ * Set the included classes
+ *
* @param classes the classes to include from the paths
*/
public void setIncluded(Class<?>... classes)
@@ -269,6 +279,16 @@
/**
* Set the excluded classes
*
+ * @param excluded the classes to include from the paths
+ */
+ public void setExcluded(String... excluded)
+ {
+ this.excluded = excluded;
+ }
+
+ /**
+ * Set the excluded classes
+ *
* @param classes the classes to exclude from the paths
*/
public void setExcluded(Class<?>... classes)
Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/policy/support/TestClassLoaderPolicy.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/policy/support/TestClassLoaderPolicy.java 2008-02-15 14:06:06 UTC (rev 69858)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/policy/support/TestClassLoaderPolicy.java 2008-02-15 14:08:12 UTC (rev 69859)
@@ -87,7 +87,7 @@
}
@Override
- protected DelegateLoader getExported()
+ public DelegateLoader getExported()
{
if (exported != null)
return exported;
More information about the jboss-cvs-commits
mailing list