mirror of https://github.com/apache/activemq.git
Renamed the *Task stuff to *Command, the Main method now just only calls the DefaultCommand, which delegates to the other commands.
git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@368942 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4d7ea5ef6e
commit
982a119ba6
|
@ -17,6 +17,8 @@
|
|||
package org.apache.activemq.broker;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.JarURLConnection;
|
||||
|
@ -25,10 +27,10 @@ import java.net.URI;
|
|||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Main class that can bootstrap an ActiveMQ broker console. Handles command line
|
||||
|
@ -37,19 +39,9 @@ import java.util.Iterator;
|
|||
* @version $Revision$
|
||||
*/
|
||||
public class Main {
|
||||
public static final int TASK_DEFAULT = 0;
|
||||
public static final int TASK_START = 1;
|
||||
public static final int TASK_STOP = 2;
|
||||
public static final int TASK_LIST = 3;
|
||||
public static final int TASK_QUERY = 4;
|
||||
|
||||
public static final String TASK_DEFAULT_CLASS = "org.apache.activemq.broker.console.DefaultTask";
|
||||
public static final String TASK_START_CLASS = "org.apache.activemq.broker.console.StartTask";
|
||||
public static final String TASK_SHUTDOWN_CLASS = "org.apache.activemq.broker.console.ShutdownTask";
|
||||
public static final String TASK_LIST_CLASS = "org.apache.activemq.broker.console.ListTask";
|
||||
public static final String TASK_QUERY_CLASS = "org.apache.activemq.broker.console.QueryTask";
|
||||
public static final String TASK_DEFAULT_CLASS = "org.apache.activemq.broker.console.DefaultCommand";
|
||||
|
||||
private int taskType;
|
||||
private File activeMQHome;
|
||||
private ClassLoader classLoader;
|
||||
private List extensions = new ArrayList(5);
|
||||
|
@ -62,9 +54,6 @@ public class Main {
|
|||
// Convert arguments to collection for easier management
|
||||
List tokens = new LinkedList(Arrays.asList(args));
|
||||
|
||||
// First token should be task type (start|stop|list|query)
|
||||
app.setTaskType(app.parseTask(tokens));
|
||||
|
||||
// Parse for extension directory option
|
||||
app.parseExtensions(tokens);
|
||||
|
||||
|
@ -75,45 +64,13 @@ public class Main {
|
|||
app.addExtensionDirectory(new File(new File(app.getActiveMQHome(), "lib"), "optional"));
|
||||
}
|
||||
|
||||
// Succeeding tokens should be the task data
|
||||
try {
|
||||
switch (app.getTaskType()) {
|
||||
case TASK_START: app.runTaskClass(TASK_START_CLASS, tokens); break;
|
||||
case TASK_STOP: app.runTaskClass(TASK_SHUTDOWN_CLASS, tokens); break;
|
||||
case TASK_LIST: app.runTaskClass(TASK_LIST_CLASS, tokens); break;
|
||||
case TASK_QUERY: app.runTaskClass(TASK_QUERY_CLASS, tokens); break;
|
||||
case TASK_DEFAULT: app.runTaskClass(TASK_DEFAULT_CLASS, tokens); break;
|
||||
default:
|
||||
System.out.println("Encountered unknown task type: " + app.getTaskType());
|
||||
}
|
||||
app.runTaskClass(tokens);
|
||||
} catch (Throwable e) {
|
||||
System.out.println("Failed to execute main task. Reason: " + e);
|
||||
}
|
||||
}
|
||||
|
||||
public int parseTask(List tokens) {
|
||||
if (tokens.isEmpty()) {
|
||||
// If no task, run the default task
|
||||
return TASK_DEFAULT;
|
||||
}
|
||||
|
||||
// Process task token
|
||||
String taskToken = (String)tokens.remove(0);
|
||||
if (taskToken.equals("start")) {
|
||||
return TASK_START;
|
||||
} else if (taskToken.equals("stop")) {
|
||||
return TASK_STOP;
|
||||
} else if (taskToken.equals("list")) {
|
||||
return TASK_LIST;
|
||||
} else if (taskToken.equals("query")) {
|
||||
return TASK_QUERY;
|
||||
} else {
|
||||
// If not valid task, push back to list
|
||||
tokens.add(0, taskToken);
|
||||
return TASK_DEFAULT;
|
||||
}
|
||||
}
|
||||
|
||||
public void parseExtensions(List tokens) {
|
||||
if (tokens.isEmpty()) {
|
||||
return;
|
||||
|
@ -155,16 +112,17 @@ public class Main {
|
|||
|
||||
}
|
||||
|
||||
public void runTaskClass(String taskClass, List tokens) throws Throwable {
|
||||
public void runTaskClass(List tokens) throws Throwable {
|
||||
System.out.println("ACTIVEMQ_HOME: "+ getActiveMQHome());
|
||||
|
||||
ClassLoader cl = getClassLoader();
|
||||
|
||||
// Use reflection to run the task.
|
||||
try {
|
||||
Class task = cl.loadClass(taskClass);
|
||||
Method runTask = task.getMethod("runTask", new Class[] { List.class });
|
||||
runTask.invoke(task.newInstance(), new Object[] { tokens });
|
||||
String[] args = (String[]) tokens.toArray(new String[tokens.size()]);
|
||||
Class task = cl.loadClass(TASK_DEFAULT_CLASS);
|
||||
Method runTask = task.getMethod("main", new Class[] { String[].class, InputStream.class, PrintStream.class });
|
||||
runTask.invoke(task.newInstance(), new Object[] { args, System.in, System.out });
|
||||
} catch (InvocationTargetException e) {
|
||||
throw e.getCause();
|
||||
} catch (Throwable e) {
|
||||
|
@ -220,14 +178,6 @@ public class Main {
|
|||
return classLoader;
|
||||
}
|
||||
|
||||
public int getTaskType() {
|
||||
return taskType;
|
||||
}
|
||||
|
||||
public void setTaskType(int taskType) {
|
||||
this.taskType = taskType;
|
||||
}
|
||||
|
||||
public void setActiveMQHome(File activeMQHome) {
|
||||
this.activeMQHome = activeMQHome;
|
||||
}
|
||||
|
|
|
@ -18,21 +18,35 @@ package org.apache.activemq.broker.console;
|
|||
|
||||
import org.apache.activemq.ActiveMQConnectionMetaData;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class AbstractTask implements Task {
|
||||
public abstract class AbstractCommand implements Command {
|
||||
private boolean isPrintHelp = false;
|
||||
private boolean isPrintVersion = false;
|
||||
protected PrintStream out;
|
||||
|
||||
public void runTask(List tokens) throws Exception {
|
||||
parseOptions(tokens);
|
||||
public int main(String[] args, InputStream in, PrintStream out) {
|
||||
this.out = out;
|
||||
try {
|
||||
List tokens = new ArrayList(Arrays.asList(args));
|
||||
parseOptions(tokens);
|
||||
|
||||
if (isPrintHelp) {
|
||||
printHelp();
|
||||
} else if (isPrintVersion) {
|
||||
printVersion();
|
||||
} else {
|
||||
startTask(tokens);
|
||||
if (isPrintHelp) {
|
||||
printHelp();
|
||||
} else if (isPrintVersion) {
|
||||
printVersion();
|
||||
} else {
|
||||
execute(tokens);
|
||||
}
|
||||
return 0;
|
||||
} catch (Exception e) {
|
||||
out.println("Failed to execute main task. Reason: " + e);
|
||||
e.printStackTrace(out);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -77,23 +91,23 @@ public abstract class AbstractTask implements Task {
|
|||
|
||||
// Token is unrecognized
|
||||
else {
|
||||
System.out.println("Ignoring unrecognized option: " + token);
|
||||
out.println("Ignoring unrecognized option: " + token);
|
||||
}
|
||||
}
|
||||
|
||||
protected void printVersion() {
|
||||
System.out.println();
|
||||
System.out.println("ActiveMQ " + ActiveMQConnectionMetaData.PROVIDER_VERSION);
|
||||
System.out.println("For help or more information please see: http://www.logicblaze.com");
|
||||
System.out.println();
|
||||
out.println();
|
||||
out.println("ActiveMQ " + ActiveMQConnectionMetaData.PROVIDER_VERSION);
|
||||
out.println("For help or more information please see: http://www.logicblaze.com");
|
||||
out.println();
|
||||
}
|
||||
|
||||
protected void printError(String message) {
|
||||
isPrintHelp = true;
|
||||
System.out.println(message);
|
||||
System.out.println();
|
||||
out.println(message);
|
||||
out.println();
|
||||
}
|
||||
|
||||
abstract protected void startTask(List tokens) throws Exception;
|
||||
abstract protected void execute(List tokens) throws Exception;
|
||||
abstract protected void printHelp();
|
||||
}
|
|
@ -23,7 +23,7 @@ import java.util.List;
|
|||
import java.net.MalformedURLException;
|
||||
import java.io.IOException;
|
||||
|
||||
public abstract class AbstractJmxTask extends AbstractTask {
|
||||
public abstract class AbstractJmxCommand extends AbstractCommand {
|
||||
public static final String DEFAULT_JMX_URL = "service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi";
|
||||
|
||||
private JMXServiceURL jmxServiceUrl;
|
|
@ -17,8 +17,9 @@
|
|||
|
||||
package org.apache.activemq.broker.console;
|
||||
|
||||
import java.util.List;
|
||||
import java.io.InputStream;
|
||||
import java.io.PrintStream;
|
||||
|
||||
public interface Task {
|
||||
public void runTask(List tokens) throws Exception;
|
||||
public interface Command {
|
||||
public int main(String[] args, InputStream in, PrintStream out);
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2005-2006 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.activemq.broker.console;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class DefaultCommand extends AbstractCommand {
|
||||
|
||||
protected void execute(List tokens) {
|
||||
|
||||
// Process task token
|
||||
if( tokens.size() > 0 ) {
|
||||
String taskToken = (String)tokens.remove(0);
|
||||
if (taskToken.equals("start")) {
|
||||
new StartCommand().execute(tokens);
|
||||
} else if (taskToken.equals("stop")) {
|
||||
new ShutdownCommand().execute(tokens);
|
||||
} else if (taskToken.equals("list")) {
|
||||
new ListCommand().execute(tokens);
|
||||
} else if (taskToken.equals("query")) {
|
||||
new QueryCommand().execute(tokens);
|
||||
} else {
|
||||
// If not valid task, push back to list
|
||||
tokens.add(0, taskToken);
|
||||
new StartCommand().execute(tokens);
|
||||
}
|
||||
} else {
|
||||
new StartCommand().execute(tokens);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void printHelp() {
|
||||
out.println("Usage: Main [task] [--extdir <dir>] [task-options] [task data]");
|
||||
out.println("");
|
||||
out.println("Tasks (default task is start):");
|
||||
out.println(" start - Creates and starts a broker using a configuration file, or a broker URI.");
|
||||
out.println(" stop - Stops a running broker specified by the broker name.");
|
||||
out.println(" list - Lists all available brokers in the specified JMX context.");
|
||||
out.println(" query - Display selected broker component's attributes and statistics.");
|
||||
out.println(" --extdir <dir> - Add the jar files in the directory to the classpath.");
|
||||
out.println(" --version - Display the version information.");
|
||||
out.println(" -h,-?,--help - Display this help information. To display task specific help, use Main [task] -h,-?,--help");
|
||||
out.println("");
|
||||
out.println("Task Options:");
|
||||
out.println(" - Properties specific to each task.");
|
||||
out.println("");
|
||||
out.println("Task Data:");
|
||||
out.println(" - Information needed by each specific task.");
|
||||
out.println("");
|
||||
}
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2005-2006 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.activemq.broker.console;
|
||||
|
||||
public class DefaultTask extends StartTask {
|
||||
|
||||
protected void printHelp() {
|
||||
System.out.println("Usage: Main [task] [--extdir <dir>] [task-options] [task data]");
|
||||
System.out.println("");
|
||||
System.out.println("Tasks (default task is start):");
|
||||
System.out.println(" start - Creates and starts a broker using a configuration file, or a broker URI.");
|
||||
System.out.println(" stop - Stops a running broker specified by the broker name.");
|
||||
System.out.println(" list - Lists all available brokers in the specified JMX context.");
|
||||
System.out.println(" query - Display selected broker component's attributes and statistics.");
|
||||
System.out.println(" --extdir <dir> - Add the jar files in the directory to the classpath.");
|
||||
System.out.println(" --version - Display the version information.");
|
||||
System.out.println(" -h,-?,--help - Display this help information. To display task specific help, use Main [task] -h,-?,--help");
|
||||
System.out.println("");
|
||||
System.out.println("Task Options:");
|
||||
System.out.println(" - Properties specific to each task.");
|
||||
System.out.println("");
|
||||
System.out.println("Task Data:");
|
||||
System.out.println(" - Information needed by each specific task.");
|
||||
System.out.println("");
|
||||
}
|
||||
}
|
|
@ -18,9 +18,9 @@ package org.apache.activemq.broker.console;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
public class ListTask extends AbstractJmxTask {
|
||||
public class ListCommand extends AbstractJmxCommand {
|
||||
|
||||
protected void startTask(List tokens) {
|
||||
protected void execute(List tokens) {
|
||||
try {
|
||||
AmqJmxSupport.printBrokerList(AmqJmxSupport.getAllBrokers(createJmxConnector().getMBeanServerConnection()));
|
||||
closeJmxConnector();
|
|
@ -27,7 +27,7 @@ import java.util.StringTokenizer;
|
|||
import java.util.Set;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class QueryTask extends AbstractJmxTask {
|
||||
public class QueryCommand extends AbstractJmxCommand {
|
||||
// Predefined type=identifier query
|
||||
private static final Properties PREDEFINED_OBJNAME_QUERY = new Properties();
|
||||
|
||||
|
@ -44,7 +44,7 @@ public class QueryTask extends AbstractJmxTask {
|
|||
private final List querySubObjects = new ArrayList(10);
|
||||
private final List queryViews = new ArrayList(10);
|
||||
|
||||
protected void startTask(List tokens) {
|
||||
protected void execute(List tokens) {
|
||||
try {
|
||||
// Connect to jmx server
|
||||
JMXConnector jmxConnector = createJmxConnector();
|
|
@ -24,10 +24,10 @@ import java.util.Set;
|
|||
import java.util.Iterator;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class ShutdownTask extends AbstractJmxTask {
|
||||
public class ShutdownCommand extends AbstractJmxCommand {
|
||||
private boolean isStopAllBrokers = false;
|
||||
|
||||
protected void startTask(List brokerNames) {
|
||||
protected void execute(List brokerNames) {
|
||||
try {
|
||||
Set mbeans = new HashSet();
|
||||
MBeanServerConnection server = createJmxConnector().getMBeanServerConnection();
|
|
@ -26,7 +26,7 @@ import java.util.Iterator;
|
|||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
public class StartTask extends AbstractTask {
|
||||
public class StartCommand extends AbstractCommand {
|
||||
|
||||
public static final String DEFAULT_CONFIG_URI = "xbean:activemq.xml";
|
||||
|
||||
|
@ -37,7 +37,7 @@ public class StartTask extends AbstractTask {
|
|||
* The default task to start a broker or a group of brokers
|
||||
* @param brokerURIs
|
||||
*/
|
||||
protected void startTask(List brokerURIs) {
|
||||
protected void execute(List brokerURIs) {
|
||||
try {
|
||||
// If no config uri, use default setting
|
||||
if (brokerURIs.isEmpty()) {
|
Loading…
Reference in New Issue