Author: pier
Date: Tue Nov  2 19:10:14 2004
New Revision: 56461

Modified:
   
cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Deployer.java
   
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/KernelLoader.java
Log:
Reverse loading order of the KernelLoader and log libraries

Modified: 
cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Deployer.java
==============================================================================
--- 
cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Deployer.java
  (original)
+++ 
cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Deployer.java
  Tue Nov  2 19:10:14 2004
@@ -145,6 +145,9 @@
                 this.logger.log(" - [" + Descriptor.NAMES[descriptor.getType()]
                         + "] " + descriptor.toString());
             }
+            this.logger.log("Shared libraries:");
+            iterator = this.loader.getURLs(this);
+            while (iterator.hasNext()) this.logger.log(" - " + 
iterator.next());
 
             /* Configure all instances and be done with it */
             Factory.configure(this, instances);

Modified: 
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/KernelLoader.java
==============================================================================
--- 
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/KernelLoader.java
 (original)
+++ 
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/KernelLoader.java
 Tue Nov  2 19:10:14 2004
@@ -16,6 +16,7 @@
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Set;
 
 /**
@@ -37,6 +38,7 @@
     /** <p>Deny public construction.</p> */
     private KernelLoader(ClassLoader loader, URL libraries[]) {
         super(libraries, loader);
+        for (int x = 0; x < libraries.length; x ++) 
this.urls.add(libraries[x]);
     }
 
     /**
@@ -91,9 +93,19 @@
      * <p>Add a [EMAIL PROTECTED] URL} to the class path handled by this 
[EMAIL PROTECTED] KernelLoader}
      * instance.</p>
      */
+    public Iterator getURLs(StartupKernel kernel) {
+        if (this.kernel != kernel) throw new SecurityException("Invalid 
instance");
+        return(this.urls.iterator());
+    }
+
+    /**
+     * <p>Add a [EMAIL PROTECTED] URL} to the class path handled by this 
[EMAIL PROTECTED] KernelLoader}
+     * instance.</p>
+     */
     public void addURL(StartupKernel kernel, URL url) {
         if (this.kernel != kernel) throw new SecurityException("Invalid 
instance");
         if ((url == null) || (this.urls.contains(url))) return;
+        this.urls.add(url);
         super.addURL(url);
     }
 
@@ -106,4 +118,50 @@
         if (urls == null) return;
         for (int x = 0; x < urls.length; x ++) this.addURL(kernel, urls[x]);
     }
+
+    /**
+     * <p>Invert the [EMAIL PROTECTED] Class} load order of this [EMAIL 
PROTECTED] ClassLoader}.</p>
+     */
+    public synchronized Class loadClass(String name)
+    throws ClassNotFoundException {
+        return this.loadClass(name, false);
+    }
+
+    /**
+     * <p>Invert the [EMAIL PROTECTED] Class} load order of this [EMAIL 
PROTECTED] ClassLoader}.</p>
+     */
+    protected synchronized Class loadClass(String name, boolean resolve)
+    throws ClassNotFoundException { 
+        Class clazz = findLoadedClass(name);
+        if (clazz != null) return(clazz);
+        
+        /* Just in case some dummy put the kernel implementation in the path */
+        if ((name.equals("org.apache.cocoon.kernel.Kernel")) ||
+            (name.equals("org.apache.cocoon.kernel.KernelException")) ||
+            (name.startsWith("org.apache.cocoon.kernel.configuration.")) ||
+            (name.startsWith("org.apache.cocoon.kernel.startup"))) {
+            return super.loadClass(name, resolve);
+        }
+
+        try {
+            clazz= this.findClass(name);
+        } catch (ClassNotFoundException e) {
+            clazz = this.getParent().loadClass(name);
+        }
+
+        if (resolve) resolveClass(clazz);
+        return clazz;
+    }
+
+    /**
+     * <p>Invert the resource resolution order of this [EMAIL PROTECTED] 
ClassLoader}.</p>
+     */
+    public synchronized URL getResource(String name) {
+        URL url= null;
+
+        url= this.findResource(name);
+        if (url == null) url= this.getParent().getResource(name);
+
+        return url;
+    }    
 }

Reply via email to