[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