You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by da...@apache.org on 2005/02/09 00:23:54 UTC

svn commit: r152958 - in geronimo/trunk/modules: assembly/ deploy-tool/src/java/org/apache/geronimo/deployment/ deploy-tool/src/java/org/apache/geronimo/deployment/cli/ deployment/src/java/org/apache/geronimo/deployment/ system/src/java/org/apache/geronimo/system/main/ system/src/java/org/apache/geronimo/system/serverinfo/

Author: dain
Date: Tue Feb  8 15:23:49 2005
New Revision: 152958

URL: http://svn.apache.org/viewcvs?view=rev&rev=152958
Log:
Added support for java.endorsed.dirs to be set via a manifest entry.  The endorsed dirs property controls where the jvm looks for new versions of sax, dom and corba classes.
Set endorsed dirs in server.jar and client.jar to <geronimo-install-dir>/lib/endorsed

Added:
    geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/serverinfo/DirectoryUtils.java
Modified:
    geronimo/trunk/modules/assembly/maven.xml
    geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/Bootstrap.java
    geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/CommandPackage.java
    geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java
    geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/main/CommandLineManifest.java
    geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/main/Daemon.java
    geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/serverinfo/ServerInfo.java

Modified: geronimo/trunk/modules/assembly/maven.xml
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/assembly/maven.xml?view=diff&r1=152957&r2=152958
==============================================================================
--- geronimo/trunk/modules/assembly/maven.xml (original)
+++ geronimo/trunk/modules/assembly/maven.xml Tue Feb  8 15:23:49 2005
@@ -240,6 +240,8 @@
             <ant:arg value="${server.classpath}"/>
             <ant:arg value="--mainClass"/>
             <ant:arg value="org.apache.geronimo.system.main.Daemon"/>
+            <ant:arg value="--endorsedDirs"/>
+            <ant:arg value="${libDir}/endorsed"/>
             <ant:arg value="--install"/>
             <ant:arg value="target/plan/system-plan.xml"/>
             <ant:arg value="${distDir}/bin/server.jar"/>
@@ -278,6 +280,8 @@
             <ant:arg value="org.apache.geronimo.system.main.ClientCommandLine"/>
             <ant:arg value="--classPath"/>
             <ant:arg value="${client.classpath}"/>
+            <ant:arg value="--endorsedDirs"/>
+            <ant:arg value="${libDir}/endorsed"/>
             <ant:arg value="--install"/>
             <ant:arg value="target/plan/client-system-plan.xml"/>
             <ant:arg value="${distDir}/bin/client.jar"/>

Modified: geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/Bootstrap.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/Bootstrap.java?view=diff&r1=152957&r2=152958
==============================================================================
--- geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/Bootstrap.java (original)
+++ geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/Bootstrap.java Tue Feb  8 15:23:49 2005
@@ -42,6 +42,7 @@
     private String deployerSystemPlan;
     private String j2eeDeployerPlan;
     private String deployerClassPath;
+    private String deployerEndorsedDirs;
     private String deployerGBean;
     private String deploymentFactory;
 
@@ -93,6 +94,14 @@
         this.deployerClassPath = deployerClassPath;
     }
 
+    public String getDeployerEndorsedDirs() {
+        return deployerEndorsedDirs;
+    }
+
+    public void setDeployerEndorsedDirs(String deployerEndorsedDirs) {
+        this.deployerEndorsedDirs = deployerEndorsedDirs;
+    }
+
     public String getDeployerGBean() {
         return deployerGBean;
     }
@@ -133,6 +142,7 @@
             mainAttributes.putValue(CommandLineManifest.MAIN_GBEAN.toString(), deployerGBean);
             mainAttributes.putValue(CommandLineManifest.MAIN_METHOD.toString(), "deploy");
             mainAttributes.putValue(CommandLineManifest.CONFIGURATIONS.toString(), j2eeDeployerConfig.getConfigId());
+            mainAttributes.putValue(CommandLineManifest.ENDORSED_DIRS.toString(), deployerEndorsedDirs);
 
             // attribute that indicates to a JSR-88 tool that we have a Deployment factory
             mainAttributes.putValue("J2EE-DeploymentFactory-Implementation-Class", deploymentFactory);

Modified: geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/CommandPackage.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/CommandPackage.java?view=diff&r1=152957&r2=152958
==============================================================================
--- geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/CommandPackage.java (original)
+++ geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/CommandPackage.java Tue Feb  8 15:23:49 2005
@@ -22,6 +22,9 @@
 import java.io.PrintWriter;
 import java.io.File;
 import java.util.List;
+import java.util.LinkedList;
+import java.util.Iterator;
+import java.util.Arrays;
 
 /**
  * The CLI deployer logic to create a configuration package.  Can only be run
@@ -47,56 +50,77 @@
         return true;
     }
 
-    public void execute(PrintWriter out, ServerConnection connection, String[] args) throws DeploymentException {
+    public void execute(PrintWriter out, ServerConnection connection, String[] argArray) throws DeploymentException {
         if(connection.isOnline()) {
             throw new DeploymentException("This command cannot be run when the server is running.  Make sure the server is shut down first.");
         }
+
         String classPath = null;
         String mainClass = null;
-        File module = null;
-        File plan = null;
-        File packageFile;
+        String endorsedDirs = null;
         boolean install = false;
-        int i;
-        for(i = 0; i < args.length; i++) {
-            String arg = args[i];
+
+        // Read off the optional arguments (clasPath, mainClass, endorsedDirs, and install)
+        LinkedList args = new LinkedList(Arrays.asList(argArray));
+        for (Iterator iterator = args.iterator(); iterator.hasNext();) {
+            String arg = (String) iterator.next();
             if(arg.equals("--classPath")) {
-                classPath = args[++i];
+                iterator.remove();
+                classPath = (String) iterator.next();
+                iterator.remove();
             } else if(arg.equals("--mainClass")) {
-                mainClass = args[++i];
+                iterator.remove();
+                mainClass = (String) iterator.next();
+                iterator.remove();
+            } else if(arg.equals("--endorsedDirs")) {
+                iterator.remove();
+                endorsedDirs = (String) iterator.next();
+                iterator.remove();
             } else if(arg.equals("--install")) {
+                iterator.remove();
                 install = true;
             } else if(arg.startsWith("--")) {
-                throw new DeploymentSyntaxException("Invalid argument '"+arg+"'");
+                throw new DeploymentSyntaxException("Invalid option '" + arg + "'");
             } else {
                 break;
             }
         }
-        if(i >= args.length) {
+
+        // if we have any other options on the comman line they are invalid
+        for (Iterator iterator = args.iterator(); iterator.hasNext();) {
+            String arg = (String) iterator.next();
+            if(arg.startsWith("--")) {
+                throw new DeploymentSyntaxException("All command line options must appear before module, plan or packageFile: " + arg);
+            }
+        }
+
+        if(args.isEmpty()) {
             throw new DeploymentSyntaxException("No fileName specified for package command");
         }
-        packageFile = new File(args[args.length-1]);
+
+        // Read off packageFile which is always the last argument
+        File packageFile;
+        packageFile = new File((String) args.removeLast());
         File parent = packageFile.getAbsoluteFile().getParentFile();
         if(!parent.exists() || !parent.canWrite()) {
             throw new DeploymentSyntaxException("Cannot write to output file "+packageFile.getAbsolutePath());
         }
-        if(i < args.length-1) {
-            File test = new File(args[args.length-2]);
+
+        // Read off the plan and module
+        File module = null;
+        File plan = null;
+        if(!args.isEmpty()) {
+            // if the arg is a directory or jar file, it must be the module; otherwise it is the plan
+            File test = new File((String) args.removeLast()).getAbsoluteFile();
             if(DeployUtils.isJarFile(test) || test.isDirectory()) {
-                if(module != null) {
-                    throw new DeploymentSyntaxException("Module and plan cannot both be JAR files or directories!");
-                }
                 module = test;
             } else {
-                if(plan != null) {
-                    throw new DeploymentSyntaxException("Module or plan must be a JAR file or directory!");
-                }
                 plan = test;
             }
         }
-        if(i < args.length-2) {
-            File test = new File(args[args.length-2]);
-            if(DeployUtils.isJarFile(test)) {
+        if(!args.isEmpty()) {
+            File test = new File((String) args.removeLast()).getAbsoluteFile();
+            if(DeployUtils.isJarFile(test) || test.isDirectory()) {
                 if(module != null) {
                     throw new DeploymentSyntaxException("Module and plan cannot both be JAR files or directories!");
                 }
@@ -108,17 +132,32 @@
                 plan = test;
             }
         }
-        if(i < args.length - 3) {
-            throw new DeploymentSyntaxException("Too many arguments for deploy command");
-        }
-        if(module != null) {
-            module = module.getAbsoluteFile();
-        }
-        if(plan != null) {
-            plan = plan.getAbsoluteFile();
+
+        // are there extra left over args on the command prompt
+        if(!args.isEmpty()) {
+            throw new DeploymentSyntaxException("Too many arguments for package command");
         }
-        List list = (List)connection.invokeOfflineDeployer(new Object[]{plan, module, packageFile, install ? Boolean.TRUE : Boolean.FALSE, mainClass, classPath},
-                        new String[]{File.class.getName(), File.class.getName(), File.class.getName(), boolean.class.getName(), String.class.getName(), String.class.getName()});
+
+        // invoke the deployer
+        List list = (List) connection.invokeOfflineDeployer(
+                new Object[]{
+                    plan,
+                    module,
+                    packageFile,
+                    install ? Boolean.TRUE : Boolean.FALSE,
+                    mainClass,
+                    classPath,
+                    endorsedDirs},
+                new String[]{
+                    File.class.getName(),
+                    File.class.getName(),
+                    File.class.getName(),
+                    boolean.class.getName(),
+                    String.class.getName(),
+                    String.class.getName(),
+                    String.class.getName()});
+
+        // print the configurations created
         for (int j = 0; j < list.size(); j++) {
             out.println("Packaged configuration "+list.get(j)+" to "+packageFile);
         }

Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java?view=diff&r1=152957&r2=152958
==============================================================================
--- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java (original)
+++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java Tue Feb  8 15:23:49 2005
@@ -41,6 +41,7 @@
 import org.apache.geronimo.kernel.config.ConfigurationStore;
 import org.apache.geronimo.kernel.config.InvalidConfigException;
 import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.system.main.CommandLineManifest;
 
 /**
  * Command line based deployment utility which combines multiple deployable modules
@@ -77,7 +78,7 @@
         }
 
         try {
-            return deploy(planFile, moduleFile, null, true, null, null);
+            return deploy(planFile, moduleFile, null, true, null, null, null);
         } finally {
             if (tmpDir != null) {
                 DeploymentUtil.recursiveDelete(tmpDir);
@@ -85,46 +86,7 @@
         }
     }
 
-    /*
-     * GBean entry point invoked from an executable CAR.
-     *
-     * @param args command line args
-     *
-    public void deploy(String[] args) throws Exception {
-        Command cmd = parseArgs(args);
-        try {
-            if (cmd == null) {
-                return;
-            }
-
-            File planFile = cmd.planFile;
-            File module = cmd.moduleFile;
-            File carfile = cmd.carFile;
-            boolean install = cmd.install;
-            String mainClass = cmd.mainClass;
-            String classPath = cmd.classPath;
-
-
-            List objectNames = deploy(planFile, module, carfile, install, mainClass, classPath);
-            if (!objectNames.isEmpty()) {
-                Iterator iterator = objectNames.iterator();
-                System.out.println("Server URI: " + iterator.next());
-                while (iterator.hasNext()) {
-                    System.out.println("Client URI: " + iterator.next());
-                }
-            }
-        } finally {
-            if (cmd.isPlanFileTemp) {
-                cmd.planFile.delete();
-            }
-            if (cmd.isModuleFileTemp) {
-                cmd.moduleFile.delete();
-            }
-        }
-    }
-    */
-
-    public List deploy(File planFile, File moduleFile, File targetFile, boolean install, String mainClass, String classPath) throws DeploymentException {
+    public List deploy(File planFile, File moduleFile, File targetFile, boolean install, String mainClass, String classPath, String endorsedDirs) throws DeploymentException {
         if (planFile == null && moduleFile == null) {
             throw new DeploymentException("No plan or module specified");
         }
@@ -185,6 +147,9 @@
             if (classPath != null) {
                 mainAttributes.putValue(Attributes.Name.CLASS_PATH.toString(), classPath);
             }
+            if (endorsedDirs != null) {
+                mainAttributes.putValue(CommandLineManifest.ENDORSED_DIRS.toString(), endorsedDirs);
+            }
 
             // Write the manifest
             FileOutputStream out = null;
@@ -243,115 +208,7 @@
             DeploymentUtil.close(module);
         }
     }
-    /*
-    private static Command parseArgs(String[] args) throws ParseException, DeploymentException {
-        Options options = new Options();
-        options.addOption("h", "help", false, "print this message");
-        options.addOption("I", "install", false, "install configuration in store");
-        options.addOption("o", "outfile", true, "output file to generate");
-        options.addOption("m", "module", true, "module to deploy");
-        options.addOption("p", "plan", true, "deployment plan");
-        options.addOption(null, "mainClass", true, "deployment plan");
-        options.addOption(null, "classPath", true, "deployment plan");
-
-        CommandLine cmd = new PosixParser().parse(options, args);
-        if (cmd.hasOption("h")) {
-            new HelpFormatter().printHelp("deploy.jar [OPTIONS] <module>...", options);
-            return null;
-        }
 
-        Command command = new Command();
-        try {
-            command.install = cmd.hasOption('I');
-            if (cmd.hasOption('o')) {
-                command.carFile = new File(cmd.getOptionValue('o'));
-            }
-            if (cmd.hasOption('p')) {
-                URI uri = getURI(cmd.getOptionValue('p'));
-                if ("file".equals(uri.getScheme())) {
-                    command.planFile = new File(uri);
-                    command.isPlanFileTemp = false;
-                } else {
-                    try {
-                        command.planFile = DeploymentUtil.toTempFile(uri.toURL());
-                    } catch (IOException e) {
-                        throw new DeploymentException("Invalid plan file location: " + uri, e);
-                    }
-                    command.isPlanFileTemp = true;
-                }
-            }
-            if (cmd.hasOption('m')) {
-                URI uri = getURI(cmd.getOptionValue('m'));
-                if ("file".equals(uri.getScheme())) {
-                    command.moduleFile = new File(uri);
-                    command.isModuleFileTemp = false;
-                } else {
-                    try {
-                        command.moduleFile = DeploymentUtil.toTempFile(uri.toURL());
-                    } catch (IOException e) {
-                        throw new DeploymentException("Invalid module file location: " + uri, e);
-                    }
-                    command.isModuleFileTemp = true;
-                }
-            }
-
-            if (command.moduleFile == null && command.planFile == null) {
-                System.err.println("No plan or module specified");
-                return null;
-            }
-            if (cmd.hasOption("mainClass")) {
-                command.mainClass = cmd.getOptionValue("mainClass");
-            }
-            if (cmd.hasOption("classPath")) {
-                command.classPath = cmd.getOptionValue("classPath");
-            }
-            return command;
-        } catch (Throwable e) {
-            if (command.isPlanFileTemp) {
-                command.planFile.delete();
-            }
-            if (command.isModuleFileTemp) {
-                command.moduleFile.delete();
-            }
-
-            if (e instanceof DeploymentException) {
-                throw (DeploymentException) e;
-            } else if (e instanceof RuntimeException) {
-                throw (RuntimeException) e;
-            } else if (e instanceof Error) {
-                throw (Error) e;
-            }
-            throw new DeploymentException(e);
-        }
-    }
-
-    private static URI getURI(String location) throws DeploymentException {
-		// on windows the location may be an absolute path including a drive letter
-		// this will cause uri.resolve to fail because of the presence of a ':' character
-		// to stop this we first try locating the uri using a File object
-		File file = new File(location);
-		if (file.exists() && file.canRead()) {
-			return file.toURI();
-		}
-
-        URI uri = new File(".").toURI().resolve(location);
-        if (!"file".equals(uri.getScheme()) && uri.getPath().endsWith("/")) {
-            throw new DeploymentException("Unpacked modules can only be loaded from the local file system");
-        }
-        return uri;
-    }
-
-    private static class Command {
-        private boolean install;
-        private File carFile;
-        private File moduleFile;
-        private boolean isModuleFileTemp = false;
-        private File planFile;
-        private boolean isPlanFileTemp = false;
-        private String mainClass;
-        private String classPath;
-    }
-*/
     public static final GBeanInfo GBEAN_INFO;
 
     private static final String DEPLOYER = "Deployer";
@@ -359,9 +216,8 @@
     static {
         GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(Deployer.class, DEPLOYER);
 
-//        infoFactory.addOperation("deploy", new Class[]{String[].class});
         infoFactory.addOperation("deploy", new Class[]{File.class, File.class});
-        infoFactory.addOperation("deploy", new Class[]{File.class, File.class, File.class, boolean.class, String.class, String.class});
+        infoFactory.addOperation("deploy", new Class[]{File.class, File.class, File.class, boolean.class, String.class, String.class, String.class});
 
         infoFactory.addReference("Builders", ConfigurationBuilder.class);
         infoFactory.addReference("Store", ConfigurationStore.class);

Modified: geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/main/CommandLineManifest.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/main/CommandLineManifest.java?view=diff&r1=152957&r2=152958
==============================================================================
--- geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/main/CommandLineManifest.java (original)
+++ geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/main/CommandLineManifest.java Tue Feb  8 15:23:49 2005
@@ -39,6 +39,7 @@
     public static final Attributes.Name MAIN_GBEAN = new Attributes.Name("Main-GBean");
     public static final Attributes.Name MAIN_METHOD = new Attributes.Name("Main-Method");
     public static final Attributes.Name CONFIGURATIONS = new Attributes.Name("Configurations");
+    public static final Attributes.Name ENDORSED_DIRS = new Attributes.Name("Endorsed-Dirs");
 
     public static CommandLineManifest getManifestEntries() {
         // find the startup jar
@@ -92,18 +93,31 @@
                 }
             }
         }
-        CommandLineManifest commandLineManifest = new CommandLineManifest(mainGBean, mainMethod, configurations);
+
+        // get the list of endorsed directories
+        List endorsedDirs = new ArrayList();
+        String endorsedDirsString = mainAttributes.getValue(ENDORSED_DIRS);
+        if (endorsedDirsString != null) {
+            for (StringTokenizer tokenizer = new StringTokenizer(endorsedDirsString, " "); tokenizer.hasMoreTokens();) {
+                String configuration = tokenizer.nextToken();
+                endorsedDirs.add(configuration);
+            }
+        }
+
+        CommandLineManifest commandLineManifest = new CommandLineManifest(mainGBean, mainMethod, configurations, endorsedDirs);
         return commandLineManifest;
     }
 
     private final ObjectName mainGBean;
     private final String mainMethod;
     private final List configurations;
+    private final List endorsedDirs;
 
-    public CommandLineManifest(ObjectName mainGBean, String mainMethod, List configurations) {
+    public CommandLineManifest(ObjectName mainGBean, String mainMethod, List configurations, List endorsedDirs) {
         this.mainGBean = mainGBean;
         this.mainMethod = mainMethod;
         this.configurations = Collections.unmodifiableList(configurations);
+        this.endorsedDirs = endorsedDirs;
     }
 
     public ObjectName getMainGBean() {
@@ -116,5 +130,9 @@
 
     public List getConfigurations() {
         return configurations;
+    }
+
+    public List getEndorsedDirs() {
+        return endorsedDirs;
     }
 }

Modified: geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/main/Daemon.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/main/Daemon.java?view=diff&r1=152957&r2=152958
==============================================================================
--- geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/main/Daemon.java (original)
+++ geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/main/Daemon.java Tue Feb  8 15:23:49 2005
@@ -19,6 +19,7 @@
 
 import java.io.IOException;
 import java.io.ObjectInputStream;
+import java.io.File;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
@@ -38,6 +39,7 @@
 import org.apache.geronimo.kernel.config.ConfigurationManager;
 import org.apache.geronimo.kernel.log.GeronimoLogging;
 import org.apache.geronimo.system.url.GeronimoURLFactory;
+import org.apache.geronimo.system.serverinfo.DirectoryUtils;
 
 /**
  * @version $Rev$ $Date$
@@ -78,6 +80,34 @@
         log.info("Server startup begun");
 
         try {
+            // Determine the geronimo installation directory
+            File geronimoInstallDirectory = DirectoryUtils.getGeronimoInstallDirectory();
+            if (geronimoInstallDirectory == null) {
+                System.err.println("Could not determine geronimo installation directory");
+                System.exit(1);
+                throw new AssertionError();
+            }
+
+            // setup the endorsed dir entry
+            CommandLineManifest manifestEntries = CommandLineManifest.getManifestEntries();
+            String endorsedDirs = System.getProperty("java.endorsed.dirs", "");
+            for (Iterator iterator = manifestEntries.getEndorsedDirs().iterator(); iterator.hasNext();) {
+                String directoryName = (String) iterator.next();
+                File directory = new File(directoryName);
+                if (!directory.isAbsolute()) {
+                    directory = new File(geronimoInstallDirectory, directoryName);
+                }
+
+                if (endorsedDirs.length() > 0) {
+                    endorsedDirs += File.pathSeparatorChar;
+                }
+                endorsedDirs += directory.getAbsolutePath();
+            }
+            if (endorsedDirs.length() > 0) {
+                System.setProperty("java.endorsed.dirs", endorsedDirs);
+            }
+            log.info("java.endorsed.dirs=" + System.getProperty("java.endorsed.dirs"));
+
             // get a list of the configuration uris from the command line
             List configs = new ArrayList();
             for (int i = 0; i < args.length; i++) {

Added: geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/serverinfo/DirectoryUtils.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/serverinfo/DirectoryUtils.java?view=auto&rev=152958
==============================================================================
--- geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/serverinfo/DirectoryUtils.java (added)
+++ geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/serverinfo/DirectoryUtils.java Tue Feb  8 15:23:49 2005
@@ -0,0 +1,58 @@
+/**
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.geronimo.system.serverinfo;
+
+import java.io.File;
+import java.net.JarURLConnection;
+import java.net.URI;
+import java.net.URL;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public final class DirectoryUtils {
+    private static final Log log = LogFactory.getLog(DirectoryUtils.class);
+    private static final File geronimoInstallDirectory;
+
+    static {
+        // guess from the location of the jar
+        URL url = DirectoryUtils.class.getClassLoader().getResource("META-INF/startup-jar");
+
+        File directory = null;
+        if (url != null) {
+            try {
+                JarURLConnection jarConnection = (JarURLConnection) url.openConnection();
+                url = jarConnection.getJarFileURL();
+
+                URI baseURI = new URI(url.toString()).resolve("..");
+                directory = new File(baseURI);
+            } catch (Exception ignored) {
+                log.error("Error while determining the geronimo installation directory", ignored);
+            }
+        } else {
+            log.error("Cound not determin the geronimo installation directory, because the startup jar could not be found in the current class loader.");
+        }
+        geronimoInstallDirectory = directory;
+    }
+
+    public static File getGeronimoInstallDirectory() {
+        return geronimoInstallDirectory;
+    }
+}

Modified: geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/serverinfo/ServerInfo.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/serverinfo/ServerInfo.java?view=diff&r1=152957&r2=152958
==============================================================================
--- geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/serverinfo/ServerInfo.java (original)
+++ geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/serverinfo/ServerInfo.java Tue Feb  8 15:23:49 2005
@@ -18,10 +18,7 @@
 package org.apache.geronimo.system.serverinfo;
 
 import java.io.File;
-import java.io.IOException;
-import java.net.JarURLConnection;
 import java.net.URI;
-import java.net.URL;
 
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
@@ -54,26 +51,19 @@
         // on the command line.
         baseDirectory = System.getProperty("geronimo.base.dir", baseDirectory);
         if (baseDirectory == null || baseDirectory.length() == 0) {
-            // guess from the location of the jar
-            URL url = getClass().getClassLoader().getResource("META-INF/startup-jar");
-            if (url == null) {
-                throw new IllegalArgumentException("Unable to determine location of startup jar");
+            base = DirectoryUtils.getGeronimoInstallDirectory();
+            if (base == null) {
+                throw new IllegalArgumentException("Could not determine geronimo installation directory");
             }
-            try {
-                JarURLConnection jarConnection = (JarURLConnection) url.openConnection();
-                url = jarConnection.getJarFileURL();
-            } catch (IOException e) {
-                throw new IllegalArgumentException("Unable to extract base URL from location");
-            }
-            baseURI = new URI(url.toString()).resolve("..");
-            base = new File(baseURI);
         } else {
             base = new File(baseDirectory);
-            baseURI = base.toURI();
         }
+
         if (!base.isDirectory()) {
             throw new IllegalArgumentException("Base directory is not a directory: " + baseDirectory);
         }
+
+        baseURI = base.toURI();
         System.setProperty("geronimo.base.dir", base.getAbsolutePath());
     }
 
@@ -86,9 +76,7 @@
      * fully-qualified it will be resolved to an absolute pathname
      * using system-dependent rules (@link java.io.File). If it's relative
      * it will be resolved relative to the base directory.
-     *
      * @return an absolute pathname
-     *
      * @see java.io.File#File(String pathname)
      * @see java.io.File#getAbsolutePath()
      */
@@ -101,7 +89,7 @@
      *
      * @param filename a <code>String</code> containing a pathname,
      * which will be resolved by {@link #resolvePath(String
-     * filename)}.
+            * filename)}.
      * @return a <code>File</code> value
      */
     public File resolve(final String filename) {