Author: pier Date: Tue Nov 2 18:26:54 2004 New Revision: 56455 Modified: cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/Main.java cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/ServletLoader.java Log: Have kernel classpath in configuration rather than on command line
Modified: cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/Main.java ============================================================================== --- cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/Main.java (original) +++ cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/Main.java Tue Nov 2 18:26:54 2004 @@ -12,8 +12,10 @@ * =============================================================================== */ package org.apache.cocoon.kernel.startup; -import java.io.File; import java.net.URL; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; import javax.sql.DataSource; @@ -68,14 +70,13 @@ */ public static void main(String args[]) throws Throwable { - if ((args.length < 2) || (args.length > 3)) { + if ((args.length < 1) || (args.length > 2)) { String name = Main.class.getName(); System.err.println("Usage:"); - System.err.println(" " + name + " <jar-file> <conf-file>"); + System.err.println(" " + name + " <conf-file>"); System.err.println("or"); - System.err.println(" " + name + " <jar-file> <desc-file> <inst-file>"); + System.err.println(" " + name + " <desc-file> <inst-file>"); System.err.println(); - System.err.println(" <conf-file> The JAR of the kernel"); System.err.println(" <conf-file> Combined descriptor/instances XML"); System.err.println(" <desc-file> Descriptors locator XML"); System.err.println(" <inst-file> Instances deployment XML"); @@ -87,13 +88,28 @@ ConsoleLogger logger = new ConsoleLogger(); try { /* Parse the (possibly two) configurations */ - Configuration descriptors = ConfigurationBuilder.parse(args[1]); - Configuration instances = (args.length == 2 ? descriptors : - ConfigurationBuilder.parse(args[2])); + Configuration descriptors = ConfigurationBuilder.parse(args[0]); + Configuration instances = (args.length < 2 ? descriptors : + ConfigurationBuilder.parse(args[1])); + + /* Resolve the kernel class path */ + Set classpath = new HashSet(); + Iterator iterator = descriptors.child("classpath").children("library"); + while (iterator.hasNext()) { + Configuration current = (Configuration) iterator.next(); + String location = current.getStringAttribute("href"); + classpath.add(new URL(current.locationURL(), location)); + } - /* Create and initialize a new deployer */ - URL library = new File(args[0]).toURL(); - StartupKernel kernel = KernelLoader.load(library); + URL libraries[] = new URL[classpath.size()]; + libraries = (URL []) classpath.toArray(libraries); + logger.debug("Kernel class path:"); + for (int x = 0 ; x < libraries.length; x ++) { + logger.debug(" - " + libraries[x].toString()); + } + + /* Create and initialize a new kernel loader and kernel */ + StartupKernel kernel = KernelLoader.load(libraries); kernel.setLogger(logger); kernel.initialize(descriptors, instances); Modified: cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/ServletLoader.java ============================================================================== --- cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/ServletLoader.java (original) +++ cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/ServletLoader.java Tue Nov 2 18:26:54 2004 @@ -13,6 +13,9 @@ package org.apache.cocoon.kernel.startup; import java.net.URL; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; import javax.servlet.Servlet; import javax.servlet.ServletContext; @@ -82,42 +85,50 @@ public void contextInitialized(ServletContextEvent event) { ServletContext context = event.getServletContext(); - String library = context.getInitParameter("kernel-library"); - if (library == null) { - String message = "Context parameter \"kernel-library\" not specified"; - context.log(message); - throw new RuntimeException(message); - } - /* Retrieve the "descriptors" configuration */ String configuration = context.getInitParameter("kernel-configuration"); - String descriptors = context.getInitParameter("kernel-descriptors"); - String instances = context.getInitParameter("kernel-instances"); /* Load and initialize the kernel */ ServletLogger logger = new ServletLogger(context); try { - URL library_url = context.getResource(library); - if (library_url == null) { - String message = "Unable to resolve library \"" + library + "\""; - context.log(message); - throw new RuntimeException(message); - } - this.kernel = KernelLoader.load(library_url); - this.kernel.setLogger(logger); - /* Parse the (possibly two) configurations and initialize the deployer */ + Configuration descriptors = null; + Configuration instances = null; + if (configuration != null) { URL configuration_url = context.getResource(configuration); Configuration conf = ConfigurationBuilder.parse(configuration_url); - this.kernel.initialize(conf); + descriptors = instances = conf; } else { - URL descriptors_url = context.getResource(descriptors); - URL instances_url = context.getResource(instances); - Configuration desc = ConfigurationBuilder.parse(descriptors_url); - Configuration inst = ConfigurationBuilder.parse(instances_url); - this.kernel.initialize(desc, inst); + String desc_par = context.getInitParameter("kernel-descriptors"); + String inst_par = context.getInitParameter("kernel-instances"); + URL desc_url = context.getResource(desc_par); + URL inst_url = context.getResource(inst_par); + descriptors = ConfigurationBuilder.parse(desc_url); + instances = ConfigurationBuilder.parse(inst_url); + } + + /* Resolve the kernel class path */ + Set classpath = new HashSet(); + Iterator iterator = descriptors.child("classpath").children("library"); + while (iterator.hasNext()) { + Configuration current = (Configuration) iterator.next(); + String location = current.getStringAttribute("href"); + classpath.add(new URL(current.locationURL(), location)); } + + URL libraries[] = new URL[classpath.size()]; + libraries = (URL []) classpath.toArray(libraries); + logger.debug("Kernel class path:"); + for (int x = 0 ; x < libraries.length; x ++) { + logger.debug(" - " + libraries[x].toString()); + } + + /* Create and initialize a new kernel loader and kernel */ + this.kernel = KernelLoader.load(libraries); + this.kernel.setLogger(logger); + this.kernel.initialize(descriptors, instances); + } catch (Throwable t) { logger.error("Unable to intialize kernel", t); throw new RuntimeException("Unable to initialize kernel", t);