You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2009/07/16 07:31:50 UTC

svn commit: r794537 - in /sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader: DynamicClassLoaderProvider.java impl/ClassLoaderFacade.java impl/DynamicClassLoaderManagerImpl.java

Author: cziegeler
Date: Thu Jul 16 05:31:50 2009
New Revision: 794537

URL: http://svn.apache.org/viewvc?rev=794537&view=rev
Log:
Provide parent class loader to dynamic class loader providers; check for null reference.

Modified:
    sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java
    sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
    sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java

Modified: sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java?rev=794537&r1=794536&r2=794537&view=diff
==============================================================================
--- sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java (original)
+++ sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java Thu Jul 16 05:31:50 2009
@@ -29,7 +29,12 @@
 
     /**
      * Return the class loader used for dynamic class loading.
+     * The returned class loader should use the provided parent class loader
+     * as one of its parent class loaders. This ensures that the returned
+     * class loader has access to all dynamically loaded classes that
+     * are not part of this class loader.
+     * @param parent The parent class loader for this dynamic class loader.
      * @return The class loader.
      */
-    ClassLoader getClassLoader();
+    ClassLoader getClassLoader(ClassLoader parent);
 }

Modified: sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java?rev=794537&r1=794536&r2=794537&view=diff
==============================================================================
--- sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java (original)
+++ sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java Thu Jul 16 05:31:50 2009
@@ -42,9 +42,11 @@
     public URL getResource(String name) {
         final ClassLoader[] loaders = manager.getDynamicClassLoaders();
         for(final ClassLoader cl : loaders) {
-            final URL u = cl.getResource(name);
-            if ( u != null ) {
-                return u;
+            if ( cl != null ) {
+                final URL u = cl.getResource(name);
+                if ( u != null ) {
+                    return u;
+                }
             }
         }
         return null;
@@ -56,9 +58,11 @@
     public InputStream getResourceAsStream(String name) {
         final ClassLoader[] loaders = manager.getDynamicClassLoaders();
         for(final ClassLoader cl : loaders) {
-            final InputStream i = cl.getResourceAsStream(name);
-            if ( i != null ) {
-                return i;
+            if ( cl != null ) {
+                final InputStream i = cl.getResourceAsStream(name);
+                if ( i != null ) {
+                    return i;
+                }
             }
         }
         return null;
@@ -70,9 +74,11 @@
     public Enumeration<URL> getResources(String name) throws IOException {
         final ClassLoader[] loaders = manager.getDynamicClassLoaders();
         for(final ClassLoader cl : loaders) {
-            final Enumeration<URL> e = cl.getResources(name);
-            if ( e != null && e.hasMoreElements() ) {
-                return e;
+            if ( cl != null ) {
+                final Enumeration<URL> e = cl.getResources(name);
+                if ( e != null && e.hasMoreElements() ) {
+                    return e;
+                }
             }
         }
         return null;
@@ -84,11 +90,13 @@
     public Class<?> loadClass(String name) throws ClassNotFoundException {
         final ClassLoader[] loaders = manager.getDynamicClassLoaders();
         for(final ClassLoader cl : loaders) {
-            try {
-                final Class<?> c = cl.loadClass(name);
-                return c;
-            } catch (Exception cnfe) {
-                // we just ignore this and try the next class loader
+            if ( cl != null ) {
+                try {
+                    final Class<?> c = cl.loadClass(name);
+                    return c;
+                } catch (Exception cnfe) {
+                    // we just ignore this and try the next class loader
+                }
             }
         }
         throw new ClassNotFoundException("Class not found: " + name);

Modified: sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java?rev=794537&r1=794536&r2=794537&view=diff
==============================================================================
--- sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java (original)
+++ sling/trunk/bundles/commons/classloader/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java Thu Jul 16 05:31:50 2009
@@ -89,7 +89,9 @@
             int index = 1;
             for(final ServiceReference ref : refs) {
                 final DynamicClassLoaderProvider provider = (DynamicClassLoaderProvider)this.getService(ref);
-                loaders[index] = provider.getClassLoader();
+                if ( provider != null ) {
+                    loaders[index] = provider.getClassLoader(this.pckAdminCL);
+                }
                 index++;
             }
             // and now use new array