Eric & All,

I'd be happy to make this change on behalf of Eric. I'm officially +0 to move to commons CLI over realityforge CLI, but I'd like to hear opinions from other folks. If there isn't any overwhelming problem, we can make this change, particularly since Avalon is considering this change for the long term.

On Naiban,: congratulations. This is the first publicly available Keel app that I'm aware of, very, very cool. I've been using Bayesian classification built-in with the latest Mozilla email client, and like it a lot. I'll play with Naiban some this coming weekend. Question: Could other Keelers use Naiban internals as a service?

Shash

Eric Simmerman wrote:

Hello Keelers, I'm attaching a patch I hope others will find useful. Also, I
wanted to point anyone interested to a Keel/Avalon Classification service
that makes use of Naive-Bayes type algorithms to classify text at
http://www.tempeststrings.com/naiban/index.shtml

-Patch to KeelOpenJMSServer: I've attached a patch to KeelOpenJMSServer to
fix a bug in the parsing of its args whereby it did not recognize jndi
parameters (jndiname, jndihost, etc...). I needed the bug fixed for a
project I'm currently working on that makes extensive use of Jakarta Commons
libraries. Since I already had Commons CLI code in my project, I removed
KeelOpenJMSServer's dependency on realityforge.cli and replaced it with a
dependency on Jakarta Commons' CLI package.


-Eric Simmerman


------------------------------------------------------------------------

Index: KeelOpenJMSServer.java
===================================================================
RCS file: 
/cvsroot/keel/comm-openjms/src/java/org/keel/comm/openjms/servers/KeelOpenJMSServer.java,v
retrieving revision 1.5
diff -u -r1.5 KeelOpenJMSServer.java
--- KeelOpenJMSServer.java      3 Jul 2003 16:58:30 -0000       1.5
+++ KeelOpenJMSServer.java      16 Sep 2003 03:24:55 -0000
@@ -8,7 +8,9 @@
 */
package org.keel.comm.openjms.servers;

+import java.io.IOException;
import java.io.PrintStream;
+import java.net.MalformedURLException;
import java.util.Hashtable;
import java.util.List;

@@ -24,13 +26,15 @@
import javax.naming.InitialContext;
import javax.naming.NamingException;

-import org.realityforge.cli.CLArgsParser;
-import org.realityforge.cli.CLOption;
-import org.realityforge.cli.CLOptionDescriptor;
-import org.realityforge.cli.CLUtil;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.OptionBuilder;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.cli.PosixParser;
import org.exolab.jms.jndi.JndiConstants;
import org.exolab.jms.jndi.rmi.RmiJndiInitialContextFactory;
-import org.exolab.jms.util.CommandLine;
import org.keel.servers.KeelAbstractServer;
import org.keel.servers.jms.KeelJmsServer;
import org.keel.services.model.ModelException;
@@ -50,7 +54,9 @@
 */
public class KeelOpenJMSServer extends KeelAbstractServer {

-    private String[] args = null;
+    private CommandLine commandLine;
+
+         private String[] args = null;

private boolean initialized = false;

@@ -71,38 +77,100 @@
    private Queue queue = null;
    private QueueReceiver receiver = null;

- private static final int HELP_OPT = 'h';
- private static final int VERSION_OPT = 'v';
- private static final int ACKMODE_OPT = 'a';
- - /**
- * Define the understood options. Each CLOptionDescriptor contains:
- * - The "long" version of the option. Eg, "help" means that "--help" will
- * be recognised.
- * - The option flags, governing the option's argument(s).
- * - The "short" version of the option. Eg, 'h' means that "-h" will be
- * recognised.
- * - A description of the option.
- */
- private static final CLOptionDescriptor[] options =
- new CLOptionDescriptor[] {
- new CLOptionDescriptor(
- "help",
- CLOptionDescriptor.ARGUMENT_DISALLOWED,
- HELP_OPT,
- "display help"),
- new CLOptionDescriptor(
- "version",
- CLOptionDescriptor.ARGUMENT_DISALLOWED,
- VERSION_OPT,
- "display version information"),
- new CLOptionDescriptor(
- "ackmode",
- CLOptionDescriptor.ARGUMENT_REQUIRED,
- ACKMODE_OPT,
- "Ack Mode")};
-
- private CommandLine commandLine = null;
+ private static final String HELP_OPT = "?";
+ private static final String VERSION_OPT = "v";
+ private static final String ACKMODE_OPT = "a";
+ private static final String MODE_OPT = "m"; + private static final String URL_OPT = "u"; + private static final String SECURE_OPT = "s"; + private static final String PERS_MODE = "P"; + + private static final String JNDI_PORT = "p";
+ private static final String JNDI_HOST = "h"; + private static final String JNDI_NAME = "n";
+ private static final String COUNT_OPT = "c"; + private static final String TO_OPT = "t"; + + /** command-line option configuration. */
+ private static Options options = null;
+
+ /** Configure the option set. */
+ static
+ {
+ options = new Options();
+ + options.addOption( OptionBuilder
+ .withLongOpt( "timeout" )
+ .hasArgs(1)
+ .withArgName("secods")
+ .withDescription( "seconds to wait before exiting" )
+ .create( TO_OPT ) ); + + options.addOption( OptionBuilder
+ .withLongOpt( "count" )
+ .hasArgs(1)
+ .withArgName("num")
+ .withDescription( "number of messages to wait for" )
+ .create( COUNT_OPT ) ); + + options.addOption( OptionBuilder
+ .withLongOpt( "jndiname" )
+ .hasArgs(1)
+ .withArgName("name")
+ .withDescription( "name of the jndi server" )
+ .create( JNDI_NAME ) ); + + options.addOption( OptionBuilder
+ .withLongOpt( "jndihost" )
+ .hasArgs(1)
+ .withArgName("host")
+ .withDescription( "host where jndi server runs" )
+ .create( JNDI_HOST ) );
+
+ options.addOption( OptionBuilder
+ .withLongOpt( "jndiport" )
+ .hasArgs(1)
+ .withArgName("port")
+ .withDescription( "port where the jndi server runs" )
+ .create( JNDI_PORT ) ); + + options.addOption( OptionBuilder
+ .withLongOpt( "persistent" )
+ .withDescription( "specifies persistent delivery mode" )
+ .hasArgs(1)
+ .create( PERS_MODE ) ); + + options.addOption( OptionBuilder
+ .withLongOpt( "ackmode" )
+ .withArgName("auto | [client] | dups") + .hasArgs(1) + .withDescription( "Initiate JMS Daemon (only applicable to JMS communication mode)" ) + .create( ACKMODE_OPT ) ); + + options.addOption( OptionBuilder
+ .withLongOpt( "secure" )
+ .withDescription( "Use HTTPS instead of HTTP with HTTP mode") + .create( SECURE_OPT ) ); + + options.addOption( OptionBuilder
+ .withLongOpt( "url" )
+ .hasArgs(1)
+ .withArgName("url")
+ .withDescription( "Specify the URL used for HTTP mode" ) + .create( URL_OPT ) );
+ + options.addOption( OptionBuilder
+ .withLongOpt( "help" )
+ .withDescription( "Display help information" )
+ .create( HELP_OPT ) ); + + options.addOption( OptionBuilder
+ .withLongOpt( "mode" )
+ .withArgName("ipc | [rmi] | http")
+ .hasArgs(1)
+ .withDescription( "Connect using ipc, http or rmi mode" )
+ .create( MODE_OPT ) ); + }


    /**
     * @see java.lang.Runnable#run()
@@ -139,121 +207,48 @@

public void parseArgs() throws RuntimeException {

-        // Parse the arguments
-        CLArgsParser parser = new CLArgsParser(args, options);
-
-        if (null != parser.getErrorString()) {
-            getLogger().error("Error: " + parser.getErrorString());
-            return;
-        }
-
-        // Get a list of parsed options
-        List clOptions = parser.getArguments();
-        int size = clOptions.size();
-
-        for (int i = 1; i < size; i++) {
-            CLOption option = (CLOption) clOptions.get(i);
-
-            if (option == null) {
-                getLogger().warn("Option " + i + " was null!");
-                getLogger().warn("Id was " + option.getDescriptor().getId());
-                throw new RuntimeException(
-                    "Error parsing options: option " + i + " was null");
-            }
-
-            CLOptionDescriptor descriptor = option.getDescriptor();
-            if (descriptor == null) {
-                getLogger().warn("Option " + i + " had no descriptor!");
-                getLogger().warn("Id was " + option.getDescriptor().getId());
-                throw new RuntimeException(
-                    "Error parsing options: option " + i + "had no descriptor");
-            }
+      boolean done = false;

- switch (descriptor.getId()) {
- case CLOption.TEXT_ARGUMENT :
- System.out.println("Unknown arg: " + option.getArgument());
- break;
-
- case HELP_OPT :
- System.err.println("Help");
- usage();
- break;
-
- case ACKMODE_OPT :
- String amode = option.getArgument();
-
- if (amode.equals("auto")) {
- ackMode = Session.AUTO_ACKNOWLEDGE;
- } else if (amode.equals("dups")) {
- ackMode = Session.DUPS_OK_ACKNOWLEDGE;
- } else if (!amode.equals("client")) {
- // ignore all ack modes, to test no acking
- ackMode = -1;
- }
-
- case VERSION_OPT :
- printVersion();
- break;
- }
- }
- }
-
- private CommandLine getCommandLine() {
- if (commandLine == null) {
- commandLine = new CommandLine(args);
- }
- return commandLine;
+ try
+ {
+ parse( args );
+ }
+ catch ( Exception e )
+ {
+ displayHelp(); + throw new RuntimeException(e);
+ }
+
+ if ( getCli().hasOption( HELP_OPT ) ) {
+ displayHelp(); + }
+
+ if ( getCli().hasOption( ACKMODE_OPT ) )
+ { + String amode = getCli().getOptionValue( ACKMODE_OPT );
+ if (amode.equals("auto")) {
+ ackMode = Session.AUTO_ACKNOWLEDGE;
+ } else if (amode.equals("dups")) {
+ ackMode = Session.DUPS_OK_ACKNOWLEDGE;
+ } else if (!amode.equals("client")) {
+ // ignore all ack modes, to test no acking
+ ackMode = -1;
+ } + } + if ( getCli().hasOption( JNDI_PORT ) ) {
+ this.setJndiPort( getCli().getOptionValue(JNDI_PORT) ); + }
+ if ( getCli().hasOption( JNDI_HOST ) ) {
+ this.setJndiHost( getCli().getOptionValue(JNDI_HOST) ); + }
+ if ( getCli().hasOption( JNDI_NAME ) ) {
+ this.setJndiName( getCli().getOptionValue(JNDI_NAME) ); + } + if ( getCli().hasOption( MODE_OPT ) ) {
+ this.setJndiMode( getCli().getOptionValue(MODE_OPT) ); + } }


-    static protected void usage() {
-        PrintStream out = System.out;
-
-        String lSep = System.getProperty("line.separator");
-        StringBuffer msg = new StringBuffer();
-        msg
-            
.append("------------------------------------------------------------------------ ")
-            .append(lSep);
-        msg.append("Keel JMS Server").append(lSep);
-        msg
-            .append("Usage: java " + KeelServer.class.getName() + " [options]")
-            .append(lSep)
-            .append(lSep);
-        msg.append("Options: ").append(lSep);
-        msg.append(CLUtil.describeOptions(options).toString());
-        System.out.println(msg.toString());
-        System.exit(0);
-
-        out.println(
-            "usage: java " + KeelServer.class.getName() + " [options]\n");
-        out.println("options:");
-        //out.println("  -topic <name>      topic to subscribe to.\n");
-        //out.println("  -name <consumer>   durable consumer name.\n");
-        out.println(
-            "  -mode <ipc | rmi | http>  "
-                + "connect using ipc, http or rmi mode. "
-                + "Defaults to 'rmi'.\n");
-        out.println(
-            "  -url <url> only used for http mode, the client passes\n"
-                + "              this url to the server, to allow the server\n"
-                + "              to invoke the clients servlet at the\n"
-                + "              specfified url. Defaults to "
-                + "'http://localhost:8080'.\n");
-        out.println(
-            "  -secure only used for http mode. Connect using https.\n"
-                + "   requires JSSE jars, https enabled Web server etc.\n");
-        out.println(
-            "  -ackmode <auto | client | dups>\n"
-                + "                     message acknowledgement mode. "
-                + "Defaults to 'client'.\n");
-        out.println(
-            "  -persistent        " + "specifies persistent delivery mode.\n");
-        out.println("  -jndiport <num>    port where the jndi server runs.\n");
-        out.println("  -jndihost <host>   host where jndi server runs.\n");
-        out.println("  -jndiname <name>   name of the jndi server\n");
-        out.println("  -count <num>       number of messages to wait for.\n");
-        out.println("  -timeout <seconds> seconds to wait before exiting.\n");
-        out.println("  -help              displays this screen.\n");
-    }

    private static void printVersion() {
        System.out.println("0.1");
@@ -409,7 +404,7 @@

            String queue_name = "keel.request";
            try {
-                if (getCommandLine().exists("persistent")) {
+                if (getCli().hasOption("persistent")) {
                    queue = (Queue) getNamingContext().lookup(queue_name);
                } else {
                    queue = qSession.createQueue(queue_name);
@@ -425,7 +420,7 @@
            }

try {
- if (getCommandLine().exists("selector")) {
+ if (getCli().hasOption("selector")) {
receiver = qSession.createReceiver(queue, "JMSPriority=1");
} else {
receiver = qSession.createReceiver(queue);
@@ -459,8 +454,8 @@
*/
protected String getJndiHost() {
if (jndiHost == null) {
- if (getCommandLine().exists("jndihost")) {
- jndiHost = getCommandLine().value("jndihost");
+ if (getCli().hasOption("jndihost")) {
+ jndiHost = getCli().getOptionValue("jndihost");
} else {
jndiHost = "localhost";
}
@@ -474,8 +469,8 @@
*/
protected String getJndiMode() {
if (jndiMode == null) {
- if (getCommandLine().exists("mode")) {
- jndiMode = getCommandLine().value("mode");
+ if (getCli().hasOption("mode")) {
+ jndiMode = getCli().getOptionValue("mode");
} else {
jndiMode = "rmi";
}
@@ -489,8 +484,8 @@
*/
protected String getJndiName() {
if (jndiName == null) {
- if (getCommandLine().exists("jndiname")) {
- jndiName = getCommandLine().value("jndiname");
+ if (getCli().hasOption("jndiname")) {
+ jndiName = getCli().getOptionValue("jndiname");
} else {
jndiName = "JndiServer";
}
@@ -504,14 +499,14 @@
*/
protected String getJndiPort() {
if (jndiPort == null) {
- if (getCommandLine().exists("jndiport")) {
- jndiPort = getCommandLine().value("jndiport");
+ if (getCli().hasOption("jndiport")) {
+ jndiPort = getCli().getOptionValue("jndiport");
} else {
if (getJndiMode().equals("ipc")
|| getJndiMode().equals("tcp")) {
jndiPort = "3035";
} else if (getJndiMode().equals("http")) {
- if (getCommandLine().exists("secure")) {
+ if (getCli().hasOption("secure")) {
jndiPort = "8443";
} else {
jndiPort = "8080";
@@ -534,7 +529,7 @@
if (getJndiMode().equals("ipc") || getJndiMode().equals("tcp")) {
jndiType = "tcp://";
} else if (getJndiMode().equals("http")) {
- if (getCommandLine().exists("secure")) {
+ if (getCli().hasOption("secure")) {
jndiType = "https://";;
} else {
jndiType = "http://";;
@@ -557,7 +552,7 @@
jndiModeType =
"org.exolab.jms.jndi.mipc.IpcJndiInitialContextFactory";
} else if (getJndiMode().equals("http")) {
- if (getCommandLine().exists("secure")) {
+ if (getCli().hasOption("secure")) {
jndiModeType =
"org.exolab.jms.jndi.http.SslHttpJndiInitialContextFactory";
} else {
@@ -577,8 +572,8 @@
*/
protected String getJndiURL() {
if (jndiURL == null) {
- if (getCommandLine().exists("url")) {
- jndiURL = getCommandLine().value("url");
+ if (getCli().hasOption("url")) {
+ jndiURL = getCli().getOptionValue("url");
} else {
jndiURL = getJndiType() + "localhost:" + getJndiPort();
}
@@ -646,5 +641,48 @@
protected boolean isInitialized() {
return initialized;
}
+ + /** Display usage information based upon current
+ * command-line option configuration.
+ */
+ public static void displayHelp()
+ {
+ HelpFormatter formatter = new HelpFormatter(); +
+ System.out.println("");
+ formatter.printHelp( "java "+KeelServer.class.getName()+" [options]",
+ "\nOptions:",
+ options,
+ "\n" );
+ }
+
+ public void parse( String[] args )
+ throws ParseException, IOException, MalformedURLException, Exception
+ {
+ CommandLineParser parser = new PosixParser(); + setCli( parser.parse( options, args ) ); + } +
+ /**
+ * Set the cli parser.
+ *
+ * @param commandLine The command line parser.
+ */
+ protected void setCli( CommandLine commandLine )
+ {
+ this.commandLine = commandLine;
+ }
+ + /**
+ * Get the CLI parser.
+ *
+ * @return CommandLine The command line parser.
+ */
+ protected CommandLine getCli()
+ {
+ return this.commandLine;
+ }
+
+ }






http://keelframework.org/documentation
Keelgroup mailing list
[EMAIL PROTECTED]
http://lists.keelframework.com/listinfo.cgi/keelgroup-keelframework.com

Reply via email to