You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ie...@apache.org on 2013/01/05 08:49:38 UTC

svn commit: r1429226 - in /james/server/trunk/cli/src/main/java/org/apache/james/cli: ServerCmd.java probe/impl/JmxServerProbe.java type/CmdType.java

Author: ieugen
Date: Sat Jan  5 07:49:38 2013
New Revision: 1429226

URL: http://svn.apache.org/viewvc?rev=1429226&view=rev
Log:
JAMES-1460 Small fixes to cli

Modified:
    james/server/trunk/cli/src/main/java/org/apache/james/cli/ServerCmd.java
    james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java
    james/server/trunk/cli/src/main/java/org/apache/james/cli/type/CmdType.java

Modified: james/server/trunk/cli/src/main/java/org/apache/james/cli/ServerCmd.java
URL: http://svn.apache.org/viewvc/james/server/trunk/cli/src/main/java/org/apache/james/cli/ServerCmd.java?rev=1429226&r1=1429225&r2=1429226&view=diff
==============================================================================
--- james/server/trunk/cli/src/main/java/org/apache/james/cli/ServerCmd.java (original)
+++ james/server/trunk/cli/src/main/java/org/apache/james/cli/ServerCmd.java Sat Jan  5 07:49:38 2013
@@ -18,14 +18,6 @@
  ****************************************************************/
 package org.apache.james.cli;
 
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
 import org.apache.commons.cli.HelpFormatter;
@@ -37,272 +29,273 @@ import org.apache.james.cli.probe.Server
 import org.apache.james.cli.probe.impl.JmxServerProbe;
 import org.apache.james.cli.type.CmdType;
 
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
+
 /**
  * Command line utility for managing various aspect of the James server.
  */
 public class ServerCmd {
-	private static final String HOST_OPT_LONG = "host";
-	private static final String HOST_OPT_SHORT = "h";
-	private static final String PORT_OPT_LONG = "port";
-	private static final String PORT_OPT_SHORT = "p";
-	private static final int defaultPort = 9999;
-	private static Options options = null;
-
-	static {
-		options = new Options();
-		Option optHost = new Option(HOST_OPT_SHORT, HOST_OPT_LONG, true, "node hostname or ip address");
-		optHost.setRequired(true);
-		options.addOption(optHost);
-		options.addOption(PORT_OPT_SHORT, PORT_OPT_LONG, true, "remote jmx agent port number");
-	}
-
-	/**
-	 * Main method to initialize the class.
-	 * 
-	 * @param args
-	 *            Command-line arguments.
-	 * @throws IOException
-	 * @throws InterruptedException
-	 * @throws ParseException
-	 */
-	public static void main(String[] args) throws IOException, InterruptedException, ParseException {
-
-		long start = Calendar.getInstance().getTimeInMillis();
-
-		CommandLineParser parser = new PosixParser();
-		CommandLine cmd = null;
-
-		try {
-			cmd = parser.parse(options, args);
-		} catch (ParseException parseExcep) {
-			System.err.println(parseExcep);
-			printUsage();
-			System.exit(1);
-		}
-
-		// Verify arguments
-		if (cmd.getArgs().length < 1) {
-			System.err.println("Missing argument for command.");
-			printUsage();
-			System.exit(1);
-		}
-
-		String host = cmd.getOptionValue(HOST_OPT_LONG);
-		int port = defaultPort;
-
-		String portNum = cmd.getOptionValue(PORT_OPT_LONG);
-		if (portNum != null) {
-			try {
-				port = Integer.parseInt(portNum);
-			} catch (NumberFormatException e) {
-				throw new ParseException("Port must be a number");
-			}
-		}
-
-		ServerProbe probe = null;
-		try {
-			probe = new JmxServerProbe(host, port);
-		} catch (IOException ioe) {
-			System.err.println("Error connecting to remote JMX agent!");
-			ioe.printStackTrace();
-			System.exit(3);
-		}
-
-		ServerCmd sCmd = new ServerCmd();
-
-		// Execute the requested command.
-		String[] arguments = cmd.getArgs();
-		String cmdName = arguments[0];
-		CmdType cmdType = null;
-		try {
-
-			cmdType = CmdType.lookup(cmdName);
-
-			if (CmdType.ADDUSER.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					probe.addUser(arguments[1], arguments[2]);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.REMOVEUSER.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					probe.removeUser(arguments[1]);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.LISTUSERS.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					sCmd.print(probe.listUsers(), System.out);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.ADDDOMAIN.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					probe.addDomain(arguments[1]);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.REMOVEDOMAIN.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					probe.removeDomain(arguments[1]);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.CONTAINSDOMAIN.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					probe.containsDomain(arguments[1]);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.LISTDOMAINS.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					sCmd.print(probe.listDomains(), System.out);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.LISTMAPPINGS.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					sCmd.print(probe.listMappings(), System.out);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.LISTUSERDOMAINMAPPINGS.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					sCmd.print(probe.listUserDomainMappings(arguments[1], arguments[2]).toArray(new String[0]),
-					        System.out);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.ADDADDRESSMAPPING.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					probe.addAddressMapping(arguments[1], arguments[2], arguments[3]);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.REMOVEADDRESSMAPPING.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					probe.removeAddressMapping(arguments[1], arguments[2], arguments[3]);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.ADDREGEXMAPPING.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					probe.addRegexMapping(arguments[1], arguments[2], arguments[3]);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.REMOVEREGEXMAPPING.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					probe.removeRegexMapping(arguments[1], arguments[2], arguments[3]);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.SETPASSWORD.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					probe.setPassword(arguments[1], arguments[2]);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else if (CmdType.COPYMAILBOX.equals(cmdType)) {
-				if (cmdType.hasCorrectArguments(arguments.length)) {
-					probe.copyMailbox(arguments[1], arguments[2]);
-				} else {
-					printUsage();
-					System.exit(1);
-				}
-			} else {
-				System.err.println("Unrecognized command: " + cmdName + ".");
-				printUsage();
-				System.exit(1);
-			}
-		} catch (Exception e) {
-			sCmd.onException(e, System.err);
-			System.exit(1);
-		}
-
-		sCmd.print(new String[] { cmdType.getCommand() + " command executed sucessfully in "
-		        + (Calendar.getInstance().getTimeInMillis() - start) + " ms." }, System.out);
-		System.exit(0);
-	}
-
-	/**
-	 * Print data to an output stream.
-	 * 
-	 * @param data
-	 *            The data to print, each element representing a line.
-	 * @param out
-	 *            The output stream to which printing should occur.
-	 */
-	public void print(String[] data, PrintStream out) {
-		if (data == null)
-			return;
-
-		for (int i = 0; i < data.length; i++) {
-			String u = data[i];
-			out.println(u);
-		}
-
-		out.println();
-	}
-
-	public void print(Map<String, Collection<String>> map, PrintStream out) {
-		if (map == null)
-			return;
-
-		Iterator<Entry<String, Collection<String>>> entries = map.entrySet().iterator();
-		while (entries.hasNext()) {
-			Entry<String, Collection<String>> entry = entries.next();
-			out.print(entry.getKey());
-			out.print("=");
-			out.println(entry.getValue().toString());
-		}
-		out.println();
-	}
-
-	/**
-	 * Prints usage information to stdout.
-	 */
-	private static void printUsage() {
-		HelpFormatter hf = new HelpFormatter();
-		String header = String.format("%nAvailable commands:%n" + //
-		        "adduser <username> <password>%n" + //
-		        "setpassword <username> <password>%n" + //
-		        "removeuser <username>%n" + "listusers%n" + //
-		        "adddomain <domainname>%n" + //
-		        "containsdomain <domainname>%n" + //
-		        "removedomain <domainname>%n" + //
-		        "listdomains%n" + //
-		        "addaddressmapping <user> <domain> <fromaddress>%n" + //
-		        "removeaddressmapping <user> <domain> <fromaddress>%n" + //
-		        "addregexmapping <user> <domain> <regex>%n" + //
-		        "removeregexmapping <user> <domain> <regex>%n" + //
-		        "listuserdomainmappings <user> <domain>%n" + //
-		        "listmappings%n" + //
-		        "copymailbox <srcbean> <dstbean>%n" //
-		);
-		String usage = String.format("java %s --host <arg> <command>%n", ServerCmd.class.getName());
-		hf.printHelp(usage, "", options, header);
-	}
-
-	/**
-	 * Handle an exception.
-	 */
-	private void onException(Exception e, PrintStream out) {
-		out.println("Error while execute command:");
-		out.println(e.getMessage());
-	}
+    private static final String HOST_OPT_LONG = "host";
+    private static final String HOST_OPT_SHORT = "h";
+    private static final String PORT_OPT_LONG = "port";
+    private static final String PORT_OPT_SHORT = "p";
+    private static final int defaultPort = 9999;
+    private static Options options = null;
+
+    static {
+        options = new Options();
+        Option optHost = new Option(HOST_OPT_SHORT, HOST_OPT_LONG, true, "node hostname or ip address");
+        optHost.setRequired(true);
+        options.addOption(optHost);
+        options.addOption(PORT_OPT_SHORT, PORT_OPT_LONG, true, "remote jmx agent port number");
+    }
+
+    /**
+     * Main method to initialize the class.
+     *
+     * @param args Command-line arguments.
+     * @throws IOException
+     * @throws InterruptedException
+     * @throws ParseException
+     */
+    public static void main(String[] args) throws IOException, InterruptedException, ParseException {
+
+        long start = Calendar.getInstance().getTimeInMillis();
+
+        CommandLineParser parser = new PosixParser();
+        CommandLine cmd = null;
+
+        try {
+            cmd = parser.parse(options, args);
+        } catch (ParseException parseExcep) {
+            System.err.println(parseExcep);
+            printUsage();
+            System.exit(1);
+        }
+
+        // Verify arguments
+        if (cmd.getArgs().length < 1) {
+            System.err.println("Missing argument for command.");
+            printUsage();
+            System.exit(1);
+        }
+
+        String host = cmd.getOptionValue(HOST_OPT_LONG);
+        int port = defaultPort;
+
+        String portNum = cmd.getOptionValue(PORT_OPT_LONG);
+        if (portNum != null) {
+            try {
+                port = Integer.parseInt(portNum);
+            } catch (NumberFormatException e) {
+                throw new ParseException("Port must be a number");
+            }
+        }
+
+        ServerProbe probe = null;
+        try {
+            probe = new JmxServerProbe(host, port);
+        } catch (IOException ioe) {
+            System.err.println("Error connecting to remote JMX agent!");
+            ioe.printStackTrace();
+            System.exit(3);
+        }
+
+        ServerCmd sCmd = new ServerCmd();
+
+        // Execute the requested command.
+        String[] arguments = cmd.getArgs();
+        String cmdName = arguments[0];
+        CmdType cmdType = null;
+        try {
+
+            cmdType = CmdType.lookup(cmdName);
+
+            if (CmdType.ADDUSER.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    probe.addUser(arguments[1], arguments[2]);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.REMOVEUSER.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    probe.removeUser(arguments[1]);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.LISTUSERS.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    sCmd.print(probe.listUsers(), System.out);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.ADDDOMAIN.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    probe.addDomain(arguments[1]);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.REMOVEDOMAIN.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    probe.removeDomain(arguments[1]);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.CONTAINSDOMAIN.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    probe.containsDomain(arguments[1]);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.LISTDOMAINS.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    sCmd.print(probe.listDomains(), System.out);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.LISTMAPPINGS.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    sCmd.print(probe.listMappings(), System.out);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.LISTUSERDOMAINMAPPINGS.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    Collection<String> userDomainMappings = probe.listUserDomainMappings(arguments[1], arguments[2]);
+                    sCmd.print(userDomainMappings.toArray(new String[userDomainMappings.size()]), System.out);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.ADDADDRESSMAPPING.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    probe.addAddressMapping(arguments[1], arguments[2], arguments[3]);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.REMOVEADDRESSMAPPING.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    probe.removeAddressMapping(arguments[1], arguments[2], arguments[3]);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.ADDREGEXMAPPING.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    probe.addRegexMapping(arguments[1], arguments[2], arguments[3]);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.REMOVEREGEXMAPPING.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    probe.removeRegexMapping(arguments[1], arguments[2], arguments[3]);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.SETPASSWORD.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    probe.setPassword(arguments[1], arguments[2]);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else if (CmdType.COPYMAILBOX.equals(cmdType)) {
+                if (cmdType.hasCorrectArguments(arguments.length)) {
+                    probe.copyMailbox(arguments[1], arguments[2]);
+                } else {
+                    printUsage();
+                    System.exit(1);
+                }
+            } else {
+                System.err.println("Unrecognized command: " + cmdName + ".");
+                printUsage();
+                System.exit(1);
+            }
+        } catch (Exception e) {
+            sCmd.onException(e, System.err);
+            System.exit(1);
+        }
+
+        sCmd.print(new String[]{cmdType.getCommand() + " command executed sucessfully in "
+                + (Calendar.getInstance().getTimeInMillis() - start) + " ms."}, System.out);
+        System.exit(0);
+    }
+
+    /**
+     * Print data to an output stream.
+     *
+     * @param data The data to print, each element representing a line.
+     * @param out  The output stream to which printing should occur.
+     */
+    public void print(String[] data, PrintStream out) {
+        if (data == null)
+            return;
+
+        for (String u : data) {
+            out.println(u);
+        }
+
+        out.println();
+    }
+
+    public void print(Map<String, Collection<String>> map, PrintStream out) {
+        if (map == null)
+            return;
+
+        for (Entry<String, Collection<String>> entry : map.entrySet()) {
+            out.print(entry.getKey());
+            out.print("=");
+            out.println(entry.getValue().toString());
+        }
+        out.println();
+    }
+
+    /**
+     * Prints usage information to stdout.
+     */
+    private static void printUsage() {
+        HelpFormatter hf = new HelpFormatter();
+        String header = String.format("%nAvailable commands:%n" + //
+                "adduser <username> <password>%n" + //
+                "setpassword <username> <password>%n" + //
+                "removeuser <username>%n" + "listusers%n" + //
+                "adddomain <domainname>%n" + //
+                "containsdomain <domainname>%n" + //
+                "removedomain <domainname>%n" + //
+                "listdomains%n" + //
+                "addaddressmapping <user> <domain> <fromaddress>%n" + //
+                "removeaddressmapping <user> <domain> <fromaddress>%n" + //
+                "addregexmapping <user> <domain> <regex>%n" + //
+                "removeregexmapping <user> <domain> <regex>%n" + //
+                "listuserdomainmappings <user> <domain>%n" + //
+                "listmappings%n" + //
+                "copymailbox <srcbean> <dstbean>%n" //
+        );
+        String usage = String.format("java %s --host <arg> <command>%n", ServerCmd.class.getName());
+        hf.printHelp(usage, "", options, header);
+    }
+
+    /**
+     * Handle an exception.
+     */
+    private void onException(Exception e, PrintStream out) {
+        out.println("Error while execute command:");
+        out.println(e.getMessage());
+    }
 }

Modified: james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java
URL: http://svn.apache.org/viewvc/james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java?rev=1429226&r1=1429225&r2=1429226&view=diff
==============================================================================
--- james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java (original)
+++ james/server/trunk/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java Sat Jan  5 07:49:38 2013
@@ -56,8 +56,8 @@ public class JmxServerProbe implements S
 
 	private static final String fmtUrl = "service:jmx:rmi:///jndi/rmi://%s:%d/jmxrmi";
 	private static final int defaultPort = 9999;
-	private String host;
-	private int port;
+	private final String host;
+	private final int port;
 
 	/**
 	 * Creates a ServerProbe using the specified JMX host and port.
@@ -102,16 +102,16 @@ public class JmxServerProbe implements S
 
 		try {
 			ObjectName name = new ObjectName(DOMAINLIST_OBJECT_NAME);
-			domainListProcxy = (DomainListManagementMBean) MBeanServerInvocationHandler.newProxyInstance(
+			domainListProcxy = MBeanServerInvocationHandler.newProxyInstance(
 			        mbeanServerConn, name, DomainListManagementMBean.class, true);
 			name = new ObjectName(VIRTUALUSERTABLE_OBJECT_NAME);
-			virtualUserTableProxy = (RecipientRewriteTableManagementMBean) MBeanServerInvocationHandler
-			        .newProxyInstance(mbeanServerConn, name, RecipientRewriteTableManagementMBean.class, true);
+			virtualUserTableProxy = MBeanServerInvocationHandler
+                    .newProxyInstance(mbeanServerConn, name, RecipientRewriteTableManagementMBean.class, true);
 			name = new ObjectName(USERSREPOSITORY_OBJECT_NAME);
-			usersRepositoryProxy = (UsersRepositoryManagementMBean) MBeanServerInvocationHandler.newProxyInstance(
+			usersRepositoryProxy = MBeanServerInvocationHandler.newProxyInstance(
 			        mbeanServerConn, name, UsersRepositoryManagementMBean.class, true);
 			name = new ObjectName(MAILBOXCOPIER_OBJECT_NAME);
-			mailboxCopierManagement = (MailboxCopierManagementMBean) MBeanServerInvocationHandler.newProxyInstance(
+			mailboxCopierManagement = MBeanServerInvocationHandler.newProxyInstance(
 			        mbeanServerConn, name, MailboxCopierManagementMBean.class, true);
 		} catch (MalformedObjectNameException e) {
 			throw new RuntimeException("Invalid ObjectName? Please report this as a bug.", e);

Modified: james/server/trunk/cli/src/main/java/org/apache/james/cli/type/CmdType.java
URL: http://svn.apache.org/viewvc/james/server/trunk/cli/src/main/java/org/apache/james/cli/type/CmdType.java?rev=1429226&r1=1429225&r2=1429226&view=diff
==============================================================================
--- james/server/trunk/cli/src/main/java/org/apache/james/cli/type/CmdType.java (original)
+++ james/server/trunk/cli/src/main/java/org/apache/james/cli/type/CmdType.java Sat Jan  5 07:49:38 2013
@@ -38,8 +38,8 @@ public enum CmdType {
 	SETPASSWORD("setpassword", 3), //
 	COPYMAILBOX("copymailbox", 3) //
 	;
-	private String command;
-	private int arguments;
+	private final String command;
+	private final int arguments;
 
 	private CmdType(String command, int arguments) {
 		this.command = command;
@@ -54,11 +54,9 @@ public enum CmdType {
 	 * @return true if values match, false otherwise.
 	 */
 	public boolean hasCorrectArguments(int arguments) {
-		if (this.arguments == arguments)
-			return true;
+        return this.arguments == arguments;
 
-		return false;
-	}
+    }
 
 	/**
 	 * Return a CmdType enumeration that matches the passed command.



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org