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; + } }