You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by am...@apache.org on 2005/10/30 19:42:22 UTC

svn commit: r329596 - in /geronimo/trunk/modules: assembly/maven.xml deploy-tool/src/java/org/apache/geronimo/deployment/cli/DeployTool.java deploy-tool/src/java/org/apache/geronimo/deployment/cli/ServerConnection.java

Author: ammulder
Date: Sun Oct 30 10:42:15 2005
New Revision: 329596

URL: http://svn.apache.org/viewcvs?rev=329596&view=rev
Log:
Deploy tool now requires --offline in order to perform offline operations
  (GERONIMO-477)
Also changed verbose and logging options to not require an argument, and
  generally better support different general option styles

Modified:
    geronimo/trunk/modules/assembly/maven.xml
    geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/DeployTool.java
    geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/ServerConnection.java

Modified: geronimo/trunk/modules/assembly/maven.xml
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/assembly/maven.xml?rev=329596&r1=329595&r2=329596&view=diff
==============================================================================
--- geronimo/trunk/modules/assembly/maven.xml (original)
+++ geronimo/trunk/modules/assembly/maven.xml Sun Oct 30 10:42:15 2005
@@ -368,6 +368,7 @@
             <ant:jvmarg value="-Djava.compiler=NONE"/>
             <ant:jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"/>
 -->
+            <ant:arg value="--offline"/>
             <ant:arg value="package"/>
             <ant:arg value="--classPath"/>
             <ant:arg value="${server.classpath}"/>
@@ -393,6 +394,7 @@
         <ant:echo>Building RMI Naming configuration</ant:echo>
         <ant:java fork="true" jar="${geronimo.assembly.dir}/bin/deployer.jar" failonerror="true">
             <ant:jvmarg value="-ea"/>
+            <ant:arg value="--offline"/>
             <ant:arg value="distribute"/>
             <ant:arg value="target/plan/naming-server-plan.xml"/>
         </ant:java>
@@ -401,6 +403,7 @@
         <ant:echo>Building server configuration</ant:echo>
         <ant:java fork="true" jar="${geronimo.assembly.dir}/bin/deployer.jar" failonerror="true">
             <ant:jvmarg value="-ea"/>
+            <ant:arg value="--offline"/>
             <ant:arg value="distribute"/>
             <ant:arg value="target/plan/j2ee-server-plan.xml"/>
         </ant:java>
@@ -408,17 +411,20 @@
         <ant:echo>Building security configuration</ant:echo>
         <ant:java fork="true" jar="${geronimo.assembly.dir}/bin/deployer.jar" failonerror="true">
             <ant:jvmarg value="-ea"/>
+            <ant:arg value="--offline"/>
             <ant:arg value="distribute"/>
             <ant:arg value="target/plan/j2ee-security-plan.xml"/>
         </ant:java>
 
         <ant:java fork="true" jar="${geronimo.assembly.dir}/bin/deployer.jar" failonerror="true">
             <ant:jvmarg value="-ea"/>
+            <ant:arg value="--offline"/>
             <ant:arg value="distribute"/>
             <ant:arg value="target/plan/j2ee-jetty-plan.xml"/>
         </ant:java>
         <ant:java fork="true" jar="${geronimo.assembly.dir}/bin/deployer.jar" failonerror="true">
             <ant:jvmarg value="-ea"/>
+            <ant:arg value="--offline"/>
             <ant:arg value="distribute"/>
             <ant:arg value="target/plan/j2ee-tomcat-plan.xml"/>
         </ant:java>
@@ -426,16 +432,19 @@
         <ant:echo>Building runtime deployer configuration</ant:echo>
         <ant:java fork="true" jar="${geronimo.assembly.dir}/bin/deployer.jar" failonerror="true">
             <ant:jvmarg value="-ea"/>
+            <ant:arg value="--offline"/>
             <ant:arg value="distribute"/>
             <ant:arg value="target/plan/j2ee-runtime-deployer-plan.xml"/>
         </ant:java>
         <ant:java fork="true" jar="${geronimo.assembly.dir}/bin/deployer.jar" failonerror="true">
             <ant:jvmarg value="-ea"/>
+            <ant:arg value="--offline"/>
             <ant:arg value="distribute"/>
             <ant:arg value="${basedir}/target/plan/j2ee-jetty-runtime-deployer-plan.xml"/>
         </ant:java>
         <ant:java fork="true" jar="${geronimo.assembly.dir}/bin/deployer.jar" failonerror="true">
             <ant:jvmarg value="-ea"/>
+            <ant:arg value="--offline"/>
             <ant:arg value="distribute"/>
             <ant:arg value="${basedir}/target/plan/j2ee-tomcat-runtime-deployer-plan.xml"/>
         </ant:java>
@@ -446,6 +455,7 @@
         <ant:mkdir dir="${geronimo.assembly.dir}/bin"/>
         <ant:java fork="true" jar="${geronimo.assembly.dir}/bin/deployer.jar" failonerror="true">
             <ant:jvmarg value="-ea"/>
+            <ant:arg value="--offline"/>
             <ant:arg value="package"/>
             <ant:arg value="--mainClass"/>
             <ant:arg value="org.apache.geronimo.system.main.ClientCommandLine"/>
@@ -460,6 +470,7 @@
 
         <ant:java fork="true" jar="${geronimo.assembly.dir}/bin/deployer.jar" failonerror="true">
             <ant:jvmarg value="-ea"/>
+            <ant:arg value="--offline"/>
             <ant:arg value="distribute"/>
             <ant:arg value="target/plan/j2ee-client-plan.xml"/>
         </ant:java>

Modified: geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/DeployTool.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/DeployTool.java?rev=329596&r1=329595&r2=329596&view=diff
==============================================================================
--- geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/DeployTool.java (original)
+++ geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/DeployTool.java Sun Oct 30 10:42:15 2005
@@ -81,18 +81,18 @@
         PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out), true);
         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
         String command;
-        String[] commonArgs = new String[0];
+        String[] generalArgs = new String[0];
         String[] commandArgs = new String[0];
         if(args.length == 0) {
             command = "help";
         } else {
             String[] temp = getCommonArgsAndCommand(args);
-            if(temp == null) {
+            if(temp == null || temp.length == 0) {
                 command = "help";
             } else {
                 command = temp[temp.length-1];
-                commonArgs = new String[temp.length-1];
-                System.arraycopy(temp, 0, commonArgs, 0, temp.length-1);
+                generalArgs = new String[temp.length-1];
+                System.arraycopy(temp, 0, generalArgs, 0, temp.length-1);
                 commandArgs = new String[args.length - temp.length];
                 System.arraycopy(args, temp.length, commandArgs, 0, commandArgs.length);
             }
@@ -108,7 +108,7 @@
             } else {
                 ServerConnection con = null;
                 try {
-                    con = new ServerConnection(commonArgs, dc.isLocalOnly(), out, in);
+                    con = new ServerConnection(generalArgs, dc.isLocalOnly(), out, in);
                     try {
                         dc.execute(out, con, commandArgs);
                     } catch (DeploymentSyntaxException e) {
@@ -230,22 +230,12 @@
 
     private String[] getCommonArgsAndCommand(String[] all) {
         List list = new ArrayList();
-        boolean prefix = false;
         for (int i = 0; i < all.length; i++) {
             String s = all[i];
+            boolean option = ServerConnection.isGeneralOption(list, s);
             list.add(s);
-            if(s.startsWith("-")) {
-                if(prefix) {
-                    return null;
-                } else {
-                    prefix = true;
-                }
-            } else {
-                if(prefix) {
-                    prefix = false;
-                } else {
-                    break;
-                }
+            if(!option) {
+                break;
             }
         }
         return (String[]) list.toArray(new String[list.size()]);

Modified: geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/ServerConnection.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/ServerConnection.java?rev=329596&r1=329595&r2=329596&view=diff
==============================================================================
--- geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/ServerConnection.java (original)
+++ geronimo/trunk/modules/deploy-tool/src/java/org/apache/geronimo/deployment/cli/ServerConnection.java Sun Oct 30 10:42:15 2005
@@ -47,12 +47,17 @@
     private final static Map OPTION_HELP = new LinkedHashMap(4);
     static {
         OPTION_HELP.put("--uri", "A URI to contact the server.  The server must be running for this " +
-                "to work.  If not specified, the deployer default to operating on a " +
-                "Geronimo server running on the standard port on localhost, or if nothing " +
-                "is available there, then the Geronimo server installation that the " +
-                "deployer JAR is part of.\n" +
+                "to work.  If not specified, the deployer defaults to operating on a " +
+                "Geronimo server running on the standard port on localhost.\n" +
                 "A URI to connect to Geronimo (including optional host and port parameters) has the form: " +
                 "deployer:geronimo:jmx:rmi:///jndi/rmi:[//host[:port]]/JMXConnector");
+        OPTION_HELP.put("--offline", "Indicates that you don't want the deployer to try to connect to " +
+                "a Geronimo server over the network.  If you're running on the same machine as the " +
+                "Geronimo installation, using this option means that you're asserting that the" +
+                "Geronimo server is not running.  WARNING: do not use this option if there's a Geronimo " +
+                "server running out of the same Geronimo installation as the deploy tool is from --" +
+                "the results may be unexpected.  Further, only a small number of commands may be" +
+                "run in offline mode.");
         OPTION_HELP.put("--driver", "If you want to use this tool with a server other than Geronimo, " +
                 "then you must provide the path to its driver JAR.  Currently, manifest " +
                 "Class-Path entries in that JAR are ignored.");
@@ -61,15 +66,40 @@
                 "deployer will attempt to connect to the server with no password, and if " +
                 "that fails, will prompt you for a password.");
         OPTION_HELP.put("--password", "Specifies a password to use to authenticate to the server.");
-        OPTION_HELP.put("--syserr", "Log errors to syserr. Can be either true or false." +
-                " The default value is false.");
-        OPTION_HELP.put("--verbose", "Verbose execution mode. Can be either true or false." +
-                " The default value is false.");
+        OPTION_HELP.put("--syserr", "Enables error logging to syserr.  Disabled by default.");
+        OPTION_HELP.put("--verbose", "Enables verbose execution mode.  Disabled by default.");
     }
     public static Map getOptionHelp() {
         return OPTION_HELP;
     }
 
+    /**
+     * Checks whether the stated command-line argument is a general argument (which
+     * may be the general argument itself, or a required parameter after the general
+     * argument).  For example, if the arguments were "--user bob --offline foo" then
+     * this should return true for "--user" "bob" and "--offline" and false for "foo"
+     * (since --offline does not expect a parameter).
+     *
+     * @param args The previous arguments on the command line
+     * @param option The argument we're checking at the moment
+     *
+     * @return True if the argument we're checking is part of a general argument
+     */
+    public static boolean isGeneralOption(List args, String option) {
+        if(OPTION_HELP.containsKey(option) || option.equals("--url")) {
+            return true;
+        }
+        if(args.size() == 0) {
+            return false;
+        }
+        String last = (String) args.get(args.size()-1);
+        if(last.equals("--uri") || last.equals("--url") || last.equals("--driver") || last.equals("--user") ||
+                last.equals("--password")) {
+            return true;
+        }
+        return false;
+    }
+
     private final static String DEFAULT_URI = "deployer:geronimo:jmx:rmi:///jndi/rmi://localhost:1099/JMXConnector";
     
     private DeploymentManager manager;
@@ -79,6 +109,7 @@
 
     public ServerConnection(String[] args, boolean forceLocal, PrintWriter out, BufferedReader in) throws DeploymentException {
         String uri = null, driver = null, user = null, password = null;
+        boolean offline = false;
         JMXDeploymentManager.CommandContext commandContext = new JMXDeploymentManager.CommandContext();
         this.out = out;
         this.in = in;
@@ -90,6 +121,9 @@
                 } else if(i >= args.length-1) {
                     throw new DeploymentSyntaxException("Must specify a URI (--uri deployer:...)");
                 }
+                if(offline) {
+                    throw new DeploymentSyntaxException("Cannot specify a URI in offline mode");
+                }
                 uri = args[++i];
             } else if(arg.equals("--driver")) {
                 if(driver != null) {
@@ -97,13 +131,33 @@
                 } else if(i >= args.length-1) {
                     throw new DeploymentSyntaxException("Must specify a driver JAR (--driver jarfile)");
                 }
+                if(offline) {
+                    throw new DeploymentSyntaxException("Cannot specify a driver in offline mode");
+                }
                 driver = args[++i];
+            } else if(arg.equals("--offline")) {
+                if(uri != null) {
+                    throw new DeploymentSyntaxException("Cannot specify a URI in offline mode");
+                }
+                if(driver != null) {
+                    throw new DeploymentSyntaxException("Cannot specify a driver in offline mode");
+                }
+                if(user != null) {
+                    throw new DeploymentSyntaxException("Cannot specify a username in offline mode");
+                }
+                if(password != null) {
+                    throw new DeploymentSyntaxException("Cannot specify a password in offline mode");
+                }
+                offline = true;
             } else if(arg.equals("--user")) {
                 if(user != null) {
                     throw new DeploymentSyntaxException("Cannot specify more than one user name");
                 } else if(i >= args.length-1) {
                     throw new DeploymentSyntaxException("Must specify a username (--user username)");
                 }
+                if(offline) {
+                    throw new DeploymentSyntaxException("Cannot specify a username in offline mode");
+                }
                 user = args[++i];
             } else if(arg.equals("--password")) {
                 if(password != null) {
@@ -111,25 +165,14 @@
                 } else if(i >= args.length-1) {
                     throw new DeploymentSyntaxException("Must specify a password (--password password)");
                 }
+                if(offline) {
+                    throw new DeploymentSyntaxException("Cannot specify a password in offline mode");
+                }
                 password = args[++i];
             } else if (arg.equals("--verbose")) {
-                String value = args[++i];
-                if (value.equals("true")) {
-                    commandContext.setVerbose(true);
-                } else if (value.equals("false")) {
-                    commandContext.setVerbose(false);
-                } else {
-                    throw new DeploymentSyntaxException("--quiet must be either true or false.");
-                }
+                commandContext.setVerbose(true);
             } else if (arg.equals("--syserr")) {
-                String value = args[++i];
-                if (value.equals("true")) {
-                    commandContext.setLogErrors(true);
-                } else if (value.equals("false")) {
-                    commandContext.setLogErrors(false);
-                } else {
-                    throw new DeploymentSyntaxException("--syserr must be either true or false.");
-                }
+                commandContext.setLogErrors(true);
             } else {
                 throw new DeploymentException("Invalid option "+arg);
             }
@@ -137,16 +180,19 @@
         if((driver != null) && uri == null) {
             throw new DeploymentSyntaxException("A custom driver requires a custom URI");
         }
+        if(forceLocal && !offline) {
+            throw new DeploymentSyntaxException("This command may only be run offline.  Make sure the server is not running and use the --offline option.");
+        }
         if(forceLocal && (uri != null || driver != null || user != null || password != null)) {
             throw new DeploymentSyntaxException("This command does not use normal server connectivity.  No standard options are allowed.");
         }
-        if(!forceLocal) {
+        if(forceLocal || offline) {
+            initializeKernel();
+        } else {
             tryToConnect(uri, commandContext, driver, user, password, true);
-            if(manager == null) { // uri must be null too or we'd have thrown an exception
-                initializeKernel();
+            if(manager == null) {
+                throw new DeploymentException("Unexpected error; connection failed.");
             }
-        } else {
-            initializeKernel();
         }
     }
 
@@ -184,9 +230,7 @@
                 throw new DeploymentException("Login Failed");
             }
         } catch(DeploymentManagerCreationException e) {
-            if(uri != null) {
-                throw new DeploymentException("Unable to connect to server at "+uri+" -- "+e.getMessage());
-            } //else, fall through and try local access
+            throw new DeploymentException("Unable to connect to server at "+(uri == null ? DEFAULT_URI : uri)+" -- "+e.getMessage());
         }
         
         if (manager instanceof JMXDeploymentManager) {