You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2008/10/20 10:19:03 UTC

svn commit: r706145 - in /geronimo/gshell/trunk: gshell-assembly/src/main/assembly/ gshell-bootstrap/ gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/ gshell-bootstrap/src/main/resources/org/apache/geronimo/gshell/bootstrap/

Author: jdillon
Date: Mon Oct 20 01:19:02 2008
New Revision: 706145

URL: http://svn.apache.org/viewvc?rev=706145&view=rev
Log:
Completely ripped out ClassWorlds, using a smaller/faster custom Launcher

Added:
    geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Configuration.java   (contents, props changed)
      - copied, changed from r706134, geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java
    geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Log.java   (contents, props changed)
      - copied, changed from r706134, geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java
    geronimo/gshell/trunk/gshell-bootstrap/src/main/resources/org/apache/geronimo/gshell/bootstrap/default-log4j.xml   (props changed)
      - copied unchanged from r706134, geronimo/gshell/trunk/gshell-bootstrap/src/main/resources/org/apache/geronimo/gshell/bootstrap/log4j.xml
Removed:
    geronimo/gshell/trunk/gshell-bootstrap/src/main/resources/org/apache/geronimo/gshell/bootstrap/classworlds.conf
    geronimo/gshell/trunk/gshell-bootstrap/src/main/resources/org/apache/geronimo/gshell/bootstrap/log4j.xml
Modified:
    geronimo/gshell/trunk/gshell-assembly/src/main/assembly/bin.xml
    geronimo/gshell/trunk/gshell-bootstrap/pom.xml
    geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java

Modified: geronimo/gshell/trunk/gshell-assembly/src/main/assembly/bin.xml
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-assembly/src/main/assembly/bin.xml?rev=706145&r1=706144&r2=706145&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-assembly/src/main/assembly/bin.xml (original)
+++ geronimo/gshell/trunk/gshell-assembly/src/main/assembly/bin.xml Mon Oct 20 01:19:02 2008
@@ -67,18 +67,9 @@
             <outputDirectory>lib</outputDirectory>
             <useStrictFiltering>true</useStrictFiltering>
             <excludes>
-                <exclude>org.codehaus.plexus:plexus-classworlds</exclude>
                 <exclude>org.apache.geronimo.gshell:gshell-bootstrap</exclude>
             </excludes>
         </dependencySet>
-
-        <dependencySet>
-            <outputDirectory>lib/boot</outputDirectory>
-            <useStrictFiltering>true</useStrictFiltering>
-            <includes>
-                <include>org.codehaus.plexus:plexus-classworlds</include>
-            </includes>
-        </dependencySet>
         
         <dependencySet>
             <outputDirectory>lib/boot</outputDirectory>

Modified: geronimo/gshell/trunk/gshell-bootstrap/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-bootstrap/pom.xml?rev=706145&r1=706144&r2=706145&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-bootstrap/pom.xml (original)
+++ geronimo/gshell/trunk/gshell-bootstrap/pom.xml Mon Oct 20 01:19:02 2008
@@ -37,20 +37,6 @@
         Provides the tiny GShell bootstrap jar to keep platform scripts as simple as possible.
     </description>
     
-    <dependencies>
-        <dependency>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-classworlds</artifactId>
-            <version>1.2-alpha-13</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>junit</groupId>
-                    <artifactId>junit</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-    </dependencies>
-    
     <build>
         <plugins>
             <plugin>

Copied: geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Configuration.java (from r706134, geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java)
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Configuration.java?p2=geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Configuration.java&p1=geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java&r1=706134&r2=706145&rev=706145&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java (original)
+++ geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Configuration.java Mon Oct 20 01:19:02 2008
@@ -20,91 +20,78 @@
 package org.apache.geronimo.gshell.bootstrap;
 
 import java.io.File;
-import java.lang.reflect.InvocationTargetException;
+import java.io.IOException;
+import java.io.FileFilter;
 import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
- * Platform independent launcher to setup common configuration and launch the application.
+ * Bootstrap configuration.
  *
  * @version $Rev$ $Date$
  */
-public class Launcher
-    extends org.codehaus.plexus.classworlds.launcher.Launcher
+public class Configuration
 {
+    private static final String GSHELL_HOME = "gshell.home";
+
     private static final String PROGRAM_NAME = "program.name";
 
-    private static final String GSHELL_HOME = "gshell.home";
+    private static final String DEFAULT_PROGRAM_NAME = "gsh";
 
     private static final String LOG4J_CONF = "log4j.configuration";
 
-    private static final String DEFAULT_LOG4J_CONF = "org/apache/geronimo/gshell/bootstrap/log4j.xml";
+    private static final String DEFAULT_LOG4J_CONF = "org/apache/geronimo/gshell/bootstrap/default-log4j.xml";
 
-    private static final String DEFAULT_CLASSWORLDS_CONF = "org/apache/geronimo/gshell/bootstrap/classworlds.conf";
+    private File homeDir;
 
-    private static boolean debug = Boolean.getBoolean(Launcher.class.getName() + ".debug");
+    private String programName;
 
-    private static String programName;
-    
-    private static File homeDir;
+    private String log4jConfig;
 
-    private static void debug(final String message) {
-        if (debug) {
-            System.err.println("[DEBUG] " + message);
-        }
-    }
+    private ClassLoader classLoader;
 
-    private static void warn(final String message) {
-        System.err.println("[WARN] " + message);
-    }
+    public File getHomeDir() throws IOException {
+        if (homeDir == null) {
+            String path = System.getProperty(GSHELL_HOME);
+            File dir;
 
-    private static void error(final String message) {
-        System.err.println("[ERROR] " + message);
-        throw new Error(message);
-    }
+            if (path == null) {
+                String jarPath = Launcher.class.getProtectionDomain().getCodeSource().getLocation().getFile();
+                jarPath = java.net.URLDecoder.decode(jarPath, "UTF-8");
 
-    private static void setProperty(final String name, final String value) {
-        System.setProperty(name, value);
-        debug("Setting property: " + name + "=" + value);
-    }
+                // The jar containing this class is expected to be in <gshell.home>/lib/boot
+                File bootJar = new File(jarPath);
+                dir = bootJar.getParentFile().getParentFile().getParentFile().getCanonicalFile();
+            }
+            else {
+                dir = new File(path).getCanonicalFile();
+            }
 
-    private static String getProgramName() {
-        String name = System.getProperty(PROGRAM_NAME);
-        if (name == null) {
-            name = "gsh";
+            homeDir = dir;
         }
 
-        return name;
+        return homeDir;
     }
 
-    private static File getHomeDir() throws Exception {
-        String path = System.getProperty(GSHELL_HOME);
-        File dir;
-
-        if (path == null) {
-            String jarPath = Launcher.class.getProtectionDomain().getCodeSource().getLocation().getFile();
-            jarPath = java.net.URLDecoder.decode(jarPath, "UTF-8");
-
-            // The jar containing this class is expected to be in <gshell.home>/lib/boot
-            File bootJar = new File(jarPath);
-            dir = bootJar.getParentFile().getParentFile().getParentFile().getCanonicalFile();
-        }
-        else {
-            dir = new File(path).getCanonicalFile();
+    public String getProgramName() {
+        if (programName == null) {
+            programName = System.getProperty(PROGRAM_NAME, DEFAULT_PROGRAM_NAME);
         }
 
-        return dir;
+        return programName;
     }
 
-    private static File getProgramConfigurationFile(final String filename) {
+    public File getProgramConfigurationFile(final String filename) throws IOException {
         assert filename != null;
 
-        File etcDir = new File(homeDir, "etc");
-
-        File file = new File(etcDir, programName + "-" + filename);
+        File etcDir = new File(getHomeDir(), "etc");
+        File file = new File(etcDir, getProgramName() + "-" + filename);
 
         if (!file.exists()) {
             File unprefixedFile = new File(etcDir, filename);
-            
+
             if (unprefixedFile.exists()) {
                 file = unprefixedFile;
             }
@@ -113,138 +100,69 @@
         return file;
     }
 
-    private static String getClassworldsConf() throws Exception {
-        String path = System.getProperty(CLASSWORLDS_CONF);
-        File file;
-
-        if (path == null) {
-            file = getProgramConfigurationFile("classworlds.conf");
-        }
-        else {
-            file = new File(path).getCanonicalFile();
-        }
-
-        if (file.exists()) {
-            return file.getCanonicalPath();
-        }
-
-        return DEFAULT_CLASSWORLDS_CONF;
-    }
-
-    private static String getLog4jConf() throws Exception {
-        String path = System.getProperty(LOG4J_CONF);
-        File file;
-
-        if (path == null) {
-            file = getProgramConfigurationFile("log4j.xml");
-        }
-        else {
-            file = new File(path).getCanonicalFile();
-        }
-
-        if (file.exists()) {
-            return file.toURI().toURL().toExternalForm();
-        }
-
-        return DEFAULT_LOG4J_CONF;
-    }
-
-    private static void configure() throws Exception {
-        // Branding information is not available here, so we must use the basic GShell properties to configure the bootstrap loader.
-
-        programName = getProgramName();
-        setProperty(PROGRAM_NAME, programName);
-
-        homeDir = getHomeDir();
-        setProperty(GSHELL_HOME, homeDir.getCanonicalPath());
-
-        String classworldsConf = getClassworldsConf();
-        if (classworldsConf != null) {
-            setProperty(CLASSWORLDS_CONF, classworldsConf);
-        }
-
-        String log4jConf = getLog4jConf();
-        if (log4jConf != null) {
-            setProperty(LOG4J_CONF, log4jConf);
-        }
-        else {
-            warn("Missing Log4j configuration! Logging may not properly initialize;  Please set the '" +
-                    LOG4J_CONF + "' property to a valid configuration file or resource name.");
-        }
-    }
-
-    public static int mainWithExitCode(final String[] args) throws Exception {
-        assert args != null;
-
-        Launcher launcher = new Launcher();
+    public String getLog4jConfig() throws IOException {
+        if (log4jConfig == null) {
+            String path = System.getProperty(LOG4J_CONF);
+            File file;
 
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        launcher.setSystemClassLoader(cl);
-
-        String classworldsConf = System.getProperty(CLASSWORLDS_CONF);
-        URL configUrl = null;
+            if (path == null) {
+                file = getProgramConfigurationFile("log4j.xml");
+            }
+            else {
+                file = new File(path).getCanonicalFile();
+            }
 
-        if (classworldsConf != null) {
-            File file = new File(classworldsConf);
             if (file.exists()) {
-                configUrl = file.toURI().toURL();
+                log4jConfig = file.toURI().toURL().toExternalForm();
             }
             else {
-                configUrl = cl.getResource(classworldsConf);
+                log4jConfig = DEFAULT_LOG4J_CONF;
             }
         }
 
-        if (configUrl == null) {
-            error("Failed to locate ClassWorlds configuration!  Please set the '" +
-                    CLASSWORLDS_CONF + "' property to a valid configuration file or resource name.");
-            // Unreachable statement, ^^^ throws Error w/message
-            throw new Error();
-        }
-
-        debug("Resolved " + CLASSWORLDS_CONF + ": " + configUrl);
-
-        launcher.configure(configUrl.openStream());
+        return log4jConfig;
+    }
 
-        try {
-            launcher.launch(args);
-        }
-        catch (InvocationTargetException e) {
-            throw new LaunchFailedError(e.getTargetException());
-        }
+    private void setProperty(final String name, final String value) {
+        System.setProperty(name, value);
+        Log.debug("Property: " + name + "=" + value);
+    }
 
-        return launcher.getExitCode();
+    public void configure() throws Exception {
+        setProperty(PROGRAM_NAME, getProgramName());
+        setProperty(GSHELL_HOME, getHomeDir().getAbsolutePath());
+        setProperty(LOG4J_CONF, getLog4jConfig());
     }
 
-    public static void main(final String[] args) {
-        assert args != null;
+    public ClassLoader getClassLoader() throws Exception {
+        if (classLoader == null) {
+            List<URL> classPath = new ArrayList<URL>();
 
-        try {
-            configure();
+            // Add ${gshell.home}/etc
+            classPath.add(new File(getHomeDir(), "etc").toURI().toURL());
 
-            int exitCode = mainWithExitCode(args);
+            // Add ${gshell.home}/lib/*.jar
+            File libDir = new File(getHomeDir(), "lib");
+            File[] files = libDir.listFiles(new FileFilter() {
+                public boolean accept(final File file) {
+                    return file.isFile();
+                }
+            });
 
-            System.exit(exitCode);
-        }
-        catch (Throwable t) {
-            t.printStackTrace(System.err);
-            System.err.flush();
-            System.exit(100);
-        }
-    }
+            for (File file : files) {
+                classPath.add(file.toURI().toURL());
+            }
 
-    //
-    // LaunchFailedError
-    //
-    
-    private static class LaunchFailedError
-        extends Error
-    {
-        public LaunchFailedError(final Throwable cause) {
-            super(cause);
-        }
+            if (Log.DEBUG) {
+                Log.debug("Classpath:");
+                for (URL url : classPath) {
+                    Log.debug("    " + url);
+                }
+            }
 
-        public LaunchFailedError(final String msg) {
-            super(msg);
+            classLoader = new URLClassLoader(classPath.toArray(new URL[classPath.size()]), getClass().getClassLoader());
         }
+
+        return classLoader;
     }
-}
+}
\ No newline at end of file

Propchange: geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Configuration.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Configuration.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Configuration.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Propchange: geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Configuration.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java?rev=706145&r1=706144&r2=706145&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java (original)
+++ geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java Mon Oct 20 01:19:02 2008
@@ -19,232 +19,66 @@
 
 package org.apache.geronimo.gshell.bootstrap;
 
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.net.URL;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
 
 /**
- * Platform independent launcher to setup common configuration and launch the application.
+ * Bootstrap launcher.
  *
  * @version $Rev$ $Date$
  */
 public class Launcher
-    extends org.codehaus.plexus.classworlds.launcher.Launcher
 {
-    private static final String PROGRAM_NAME = "program.name";
+    private static final int SUCCESS_EXIT_CODE = 0;
 
-    private static final String GSHELL_HOME = "gshell.home";
+    private static final int FAILURE_EXIT_CODE = 100;
 
-    private static final String LOG4J_CONF = "log4j.configuration";
+    private static final String MAIN_CLASS = "org.apache.geronimo.gshell.cli.Main";
 
-    private static final String DEFAULT_LOG4J_CONF = "org/apache/geronimo/gshell/bootstrap/log4j.xml";
-
-    private static final String DEFAULT_CLASSWORLDS_CONF = "org/apache/geronimo/gshell/bootstrap/classworlds.conf";
-
-    private static boolean debug = Boolean.getBoolean(Launcher.class.getName() + ".debug");
-
-    private static String programName;
-    
-    private static File homeDir;
-
-    private static void debug(final String message) {
-        if (debug) {
-            System.err.println("[DEBUG] " + message);
-        }
-    }
-
-    private static void warn(final String message) {
-        System.err.println("[WARN] " + message);
-    }
-
-    private static void error(final String message) {
-        System.err.println("[ERROR] " + message);
-        throw new Error(message);
-    }
-
-    private static void setProperty(final String name, final String value) {
-        System.setProperty(name, value);
-        debug("Setting property: " + name + "=" + value);
-    }
-
-    private static String getProgramName() {
-        String name = System.getProperty(PROGRAM_NAME);
-        if (name == null) {
-            name = "gsh";
-        }
-
-        return name;
-    }
-
-    private static File getHomeDir() throws Exception {
-        String path = System.getProperty(GSHELL_HOME);
-        File dir;
-
-        if (path == null) {
-            String jarPath = Launcher.class.getProtectionDomain().getCodeSource().getLocation().getFile();
-            jarPath = java.net.URLDecoder.decode(jarPath, "UTF-8");
-
-            // The jar containing this class is expected to be in <gshell.home>/lib/boot
-            File bootJar = new File(jarPath);
-            dir = bootJar.getParentFile().getParentFile().getParentFile().getCanonicalFile();
-        }
-        else {
-            dir = new File(path).getCanonicalFile();
-        }
-
-        return dir;
-    }
-
-    private static File getProgramConfigurationFile(final String filename) {
-        assert filename != null;
-
-        File etcDir = new File(homeDir, "etc");
+    public static void main(final String[] args) {
+        assert args != null;
 
-        File file = new File(etcDir, programName + "-" + filename);
+        Configuration config = new Configuration();
 
-        if (!file.exists()) {
-            File unprefixedFile = new File(etcDir, filename);
+        try {
+            Log.debug("Configuring");
             
-            if (unprefixedFile.exists()) {
-                file = unprefixedFile;
-            }
-        }
-
-        return file;
-    }
-
-    private static String getClassworldsConf() throws Exception {
-        String path = System.getProperty(CLASSWORLDS_CONF);
-        File file;
-
-        if (path == null) {
-            file = getProgramConfigurationFile("classworlds.conf");
-        }
-        else {
-            file = new File(path).getCanonicalFile();
-        }
-
-        if (file.exists()) {
-            return file.getCanonicalPath();
-        }
-
-        return DEFAULT_CLASSWORLDS_CONF;
-    }
-
-    private static String getLog4jConf() throws Exception {
-        String path = System.getProperty(LOG4J_CONF);
-        File file;
+            config.configure();
 
-        if (path == null) {
-            file = getProgramConfigurationFile("log4j.xml");
-        }
-        else {
-            file = new File(path).getCanonicalFile();
-        }
-
-        if (file.exists()) {
-            return file.toURI().toURL().toExternalForm();
-        }
-
-        return DEFAULT_LOG4J_CONF;
-    }
+            ClassLoader cl = config.getClassLoader();
+            Class type = cl.loadClass(MAIN_CLASS);
+            Method method = getMainMethod(type);
 
-    private static void configure() throws Exception {
-        // Branding information is not available here, so we must use the basic GShell properties to configure the bootstrap loader.
+            Thread.currentThread().setContextClassLoader(cl);
 
-        programName = getProgramName();
-        setProperty(PROGRAM_NAME, programName);
+            Log.debug("Launching: " + method);
 
-        homeDir = getHomeDir();
-        setProperty(GSHELL_HOME, homeDir.getCanonicalPath());
+            method.invoke(null, new Object[] { args });
 
-        String classworldsConf = getClassworldsConf();
-        if (classworldsConf != null) {
-            setProperty(CLASSWORLDS_CONF, classworldsConf);
-        }
+            Log.debug("Exiting");
 
-        String log4jConf = getLog4jConf();
-        if (log4jConf != null) {
-            setProperty(LOG4J_CONF, log4jConf);
+            System.exit(SUCCESS_EXIT_CODE);
         }
-        else {
-            warn("Missing Log4j configuration! Logging may not properly initialize;  Please set the '" +
-                    LOG4J_CONF + "' property to a valid configuration file or resource name.");
+        catch (Throwable t) {
+            t.printStackTrace(System.err);
+            System.err.flush();
+            System.exit(FAILURE_EXIT_CODE);
         }
     }
 
-    public static int mainWithExitCode(final String[] args) throws Exception {
-        assert args != null;
-
-        Launcher launcher = new Launcher();
+    private static Method getMainMethod(final Class type) throws Exception {
+        assert type != null;
 
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        launcher.setSystemClassLoader(cl);
+        Method m = type.getMethod("main", String[].class);
 
-        String classworldsConf = System.getProperty(CLASSWORLDS_CONF);
-        URL configUrl = null;
+        int modifiers = m.getModifiers();
 
-        if (classworldsConf != null) {
-            File file = new File(classworldsConf);
-            if (file.exists()) {
-                configUrl = file.toURI().toURL();
-            }
-            else {
-                configUrl = cl.getResource(classworldsConf);
+        if (Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers)) {
+            if (m.getReturnType() == Integer.TYPE || m.getReturnType() == Void.TYPE) {
+                return m;
             }
         }
 
-        if (configUrl == null) {
-            error("Failed to locate ClassWorlds configuration!  Please set the '" +
-                    CLASSWORLDS_CONF + "' property to a valid configuration file or resource name.");
-            // Unreachable statement, ^^^ throws Error w/message
-            throw new Error();
-        }
-
-        debug("Resolved " + CLASSWORLDS_CONF + ": " + configUrl);
-
-        launcher.configure(configUrl.openStream());
-
-        try {
-            launcher.launch(args);
-        }
-        catch (InvocationTargetException e) {
-            throw new LaunchFailedError(e.getTargetException());
-        }
-
-        return launcher.getExitCode();
-    }
-
-    public static void main(final String[] args) {
-        assert args != null;
-
-        try {
-            configure();
-
-            int exitCode = mainWithExitCode(args);
-
-            System.exit(exitCode);
-        }
-        catch (Throwable t) {
-            t.printStackTrace(System.err);
-            System.err.flush();
-            System.exit(100);
-        }
-    }
-
-    //
-    // LaunchFailedError
-    //
-    
-    private static class LaunchFailedError
-        extends Error
-    {
-        public LaunchFailedError(final Throwable cause) {
-            super(cause);
-        }
-
-        public LaunchFailedError(final String msg) {
-            super(msg);
-        }
+        throw new NoSuchMethodException("public static void main(String[] args) in " + type);
     }
 }

Copied: geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Log.java (from r706134, geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java)
URL: http://svn.apache.org/viewvc/geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Log.java?p2=geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Log.java&p1=geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java&r1=706134&r2=706145&rev=706145&view=diff
==============================================================================
--- geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Launcher.java (original)
+++ geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Log.java Mon Oct 20 01:19:02 2008
@@ -19,232 +19,18 @@
 
 package org.apache.geronimo.gshell.bootstrap;
 
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.net.URL;
-
 /**
- * Platform independent launcher to setup common configuration and launch the application.
+ * Bootstrap logger.
  *
  * @version $Rev$ $Date$
  */
-public class Launcher
-    extends org.codehaus.plexus.classworlds.launcher.Launcher
+public class Log
 {
-    private static final String PROGRAM_NAME = "program.name";
-
-    private static final String GSHELL_HOME = "gshell.home";
-
-    private static final String LOG4J_CONF = "log4j.configuration";
-
-    private static final String DEFAULT_LOG4J_CONF = "org/apache/geronimo/gshell/bootstrap/log4j.xml";
-
-    private static final String DEFAULT_CLASSWORLDS_CONF = "org/apache/geronimo/gshell/bootstrap/classworlds.conf";
-
-    private static boolean debug = Boolean.getBoolean(Launcher.class.getName() + ".debug");
+    public static final boolean DEBUG = Boolean.getBoolean(Log.class.getName() + ".debug");
 
-    private static String programName;
-    
-    private static File homeDir;
-
-    private static void debug(final String message) {
-        if (debug) {
+    public static void debug(final String message) {
+        if (DEBUG) {
             System.err.println("[DEBUG] " + message);
         }
     }
-
-    private static void warn(final String message) {
-        System.err.println("[WARN] " + message);
-    }
-
-    private static void error(final String message) {
-        System.err.println("[ERROR] " + message);
-        throw new Error(message);
-    }
-
-    private static void setProperty(final String name, final String value) {
-        System.setProperty(name, value);
-        debug("Setting property: " + name + "=" + value);
-    }
-
-    private static String getProgramName() {
-        String name = System.getProperty(PROGRAM_NAME);
-        if (name == null) {
-            name = "gsh";
-        }
-
-        return name;
-    }
-
-    private static File getHomeDir() throws Exception {
-        String path = System.getProperty(GSHELL_HOME);
-        File dir;
-
-        if (path == null) {
-            String jarPath = Launcher.class.getProtectionDomain().getCodeSource().getLocation().getFile();
-            jarPath = java.net.URLDecoder.decode(jarPath, "UTF-8");
-
-            // The jar containing this class is expected to be in <gshell.home>/lib/boot
-            File bootJar = new File(jarPath);
-            dir = bootJar.getParentFile().getParentFile().getParentFile().getCanonicalFile();
-        }
-        else {
-            dir = new File(path).getCanonicalFile();
-        }
-
-        return dir;
-    }
-
-    private static File getProgramConfigurationFile(final String filename) {
-        assert filename != null;
-
-        File etcDir = new File(homeDir, "etc");
-
-        File file = new File(etcDir, programName + "-" + filename);
-
-        if (!file.exists()) {
-            File unprefixedFile = new File(etcDir, filename);
-            
-            if (unprefixedFile.exists()) {
-                file = unprefixedFile;
-            }
-        }
-
-        return file;
-    }
-
-    private static String getClassworldsConf() throws Exception {
-        String path = System.getProperty(CLASSWORLDS_CONF);
-        File file;
-
-        if (path == null) {
-            file = getProgramConfigurationFile("classworlds.conf");
-        }
-        else {
-            file = new File(path).getCanonicalFile();
-        }
-
-        if (file.exists()) {
-            return file.getCanonicalPath();
-        }
-
-        return DEFAULT_CLASSWORLDS_CONF;
-    }
-
-    private static String getLog4jConf() throws Exception {
-        String path = System.getProperty(LOG4J_CONF);
-        File file;
-
-        if (path == null) {
-            file = getProgramConfigurationFile("log4j.xml");
-        }
-        else {
-            file = new File(path).getCanonicalFile();
-        }
-
-        if (file.exists()) {
-            return file.toURI().toURL().toExternalForm();
-        }
-
-        return DEFAULT_LOG4J_CONF;
-    }
-
-    private static void configure() throws Exception {
-        // Branding information is not available here, so we must use the basic GShell properties to configure the bootstrap loader.
-
-        programName = getProgramName();
-        setProperty(PROGRAM_NAME, programName);
-
-        homeDir = getHomeDir();
-        setProperty(GSHELL_HOME, homeDir.getCanonicalPath());
-
-        String classworldsConf = getClassworldsConf();
-        if (classworldsConf != null) {
-            setProperty(CLASSWORLDS_CONF, classworldsConf);
-        }
-
-        String log4jConf = getLog4jConf();
-        if (log4jConf != null) {
-            setProperty(LOG4J_CONF, log4jConf);
-        }
-        else {
-            warn("Missing Log4j configuration! Logging may not properly initialize;  Please set the '" +
-                    LOG4J_CONF + "' property to a valid configuration file or resource name.");
-        }
-    }
-
-    public static int mainWithExitCode(final String[] args) throws Exception {
-        assert args != null;
-
-        Launcher launcher = new Launcher();
-
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        launcher.setSystemClassLoader(cl);
-
-        String classworldsConf = System.getProperty(CLASSWORLDS_CONF);
-        URL configUrl = null;
-
-        if (classworldsConf != null) {
-            File file = new File(classworldsConf);
-            if (file.exists()) {
-                configUrl = file.toURI().toURL();
-            }
-            else {
-                configUrl = cl.getResource(classworldsConf);
-            }
-        }
-
-        if (configUrl == null) {
-            error("Failed to locate ClassWorlds configuration!  Please set the '" +
-                    CLASSWORLDS_CONF + "' property to a valid configuration file or resource name.");
-            // Unreachable statement, ^^^ throws Error w/message
-            throw new Error();
-        }
-
-        debug("Resolved " + CLASSWORLDS_CONF + ": " + configUrl);
-
-        launcher.configure(configUrl.openStream());
-
-        try {
-            launcher.launch(args);
-        }
-        catch (InvocationTargetException e) {
-            throw new LaunchFailedError(e.getTargetException());
-        }
-
-        return launcher.getExitCode();
-    }
-
-    public static void main(final String[] args) {
-        assert args != null;
-
-        try {
-            configure();
-
-            int exitCode = mainWithExitCode(args);
-
-            System.exit(exitCode);
-        }
-        catch (Throwable t) {
-            t.printStackTrace(System.err);
-            System.err.flush();
-            System.exit(100);
-        }
-    }
-
-    //
-    // LaunchFailedError
-    //
-    
-    private static class LaunchFailedError
-        extends Error
-    {
-        public LaunchFailedError(final Throwable cause) {
-            super(cause);
-        }
-
-        public LaunchFailedError(final String msg) {
-            super(msg);
-        }
-    }
-}
+}
\ No newline at end of file

Propchange: geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Log.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Log.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Log.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Propchange: geronimo/gshell/trunk/gshell-bootstrap/src/main/java/org/apache/geronimo/gshell/bootstrap/Log.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Propchange: geronimo/gshell/trunk/gshell-bootstrap/src/main/resources/org/apache/geronimo/gshell/bootstrap/default-log4j.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/gshell/trunk/gshell-bootstrap/src/main/resources/org/apache/geronimo/gshell/bootstrap/default-log4j.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/gshell/trunk/gshell-bootstrap/src/main/resources/org/apache/geronimo/gshell/bootstrap/default-log4j.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml