activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rajdav...@apache.org
Subject svn commit: r813424 - /activemq/trunk/activemq-console/src/main/java/org/apache/activemq/console/command/StopGracefullyCommand.java
Date Thu, 10 Sep 2009 13:20:45 GMT
Author: rajdavies
Date: Thu Sep 10 13:20:45 2009
New Revision: 813424

URL: http://svn.apache.org/viewvc?rev=813424&view=rev
Log:
Fix for https://issues.apache.org/activemq/browse/AMQ-2071 and 
https://issues.apache.org/activemq/browse/AMQ-2070

Added:
    activemq/trunk/activemq-console/src/main/java/org/apache/activemq/console/command/StopGracefullyCommand.java
  (with props)

Added: activemq/trunk/activemq-console/src/main/java/org/apache/activemq/console/command/StopGracefullyCommand.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-console/src/main/java/org/apache/activemq/console/command/StopGracefullyCommand.java?rev=813424&view=auto
==============================================================================
--- activemq/trunk/activemq-console/src/main/java/org/apache/activemq/console/command/StopGracefullyCommand.java
(added)
+++ activemq/trunk/activemq-console/src/main/java/org/apache/activemq/console/command/StopGracefullyCommand.java
Thu Sep 10 13:20:45 2009
@@ -0,0 +1,137 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.console.command;
+
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.management.MBeanServerConnection;
+import javax.management.ObjectInstance;
+import javax.management.ObjectName;
+
+
+/**
+ * A StopGracefullyCommand
+ *
+ */
+public class StopGracefullyCommand extends ShutdownCommand {
+    
+        protected String connectorName, queueName;
+        protected long timeout;
+        protected long pollInterval;
+        /**
+         * Constructor
+         */
+        public StopGracefullyCommand(){
+            super();
+            this.helpFile = new String[] {
+                "Task Usage: Main stopGracefully [stop-options] [broker-name1] [broker-name2]
...",
+                "Description: Stops a running broker if there is no pending messages in the
queues. It first stops the connector for client connection, then check queuesize until it
becomes 0 before stop the broker.",
+                "", 
+                "Stop Options:",
+                "    --connectorName <connectorName> connectorName to stop",
+                "    --queueName <queueName>         check the queuesize of the queueName
for pending message",
+                "    --timeout <timeout>             periodically check the queuesize
before the timeout expires",
+                "    --pollInterval <pollInterval>   the time interval it checks the
queuesize",
+                "    --jmxurl <url>             Set the JMX URL to connect to.",
+                "    --jmxuser <user>           Set the JMX user used for authenticating.",
+                "    --jmxpassword <password>   Set the JMX password used for authenticating.",
+                "    --jmxlocal                 Use the local JMX server instead of a remote
one.",
+                "    --localProcessId           Use the local process id to connect( ignore
jmxurl, jmxuser, jmxpassword), need to be root to use this option",
+                "    --all                      Stop all brokers.",
+                "    --version                  Display the version information.",
+                "    -h,-?,--help               Display the stop broker help information.",
+                "",
+                "Broker Names:",
+                "    Name of the brokers that will be stopped.",
+                "    If omitted, it is assumed that there is only one broker running, and
it will be stopped.",
+                "    Use -all to stop all running brokers.",
+                ""
+            };
+        }
+
+        /**
+         * Stops the list of brokers.
+         * 
+         * @param jmxConnection - connection to the mbean server
+         * @param brokerBeans - broker mbeans to stop @throws Exception
+         */
+        protected void stopBrokers(MBeanServerConnection jmxConnection, Collection brokerBeans)
throws Exception {
+            ObjectName brokerObjName;
+            for (Iterator i = brokerBeans.iterator(); i.hasNext();) {
+                brokerObjName = ((ObjectInstance)i.next()).getObjectName();
+
+                String brokerName = brokerObjName.getKeyProperty("BrokerName");
+                context.print("Stopping broker: " + brokerName);
+
+                try {
+                    jmxConnection.invoke(brokerObjName, "stopGracefully", new Object[] {
+                       connectorName, queueName, timeout, pollInterval
+                    }, new String[] {
+                        "java.lang.String", "java.lang.String", "long", "long"
+                    });
+                    context.print("Succesfully stopped broker: " + brokerName);
+                } catch (Exception e) {
+                    if(!(e.getMessage().startsWith("Error unmarshaling return header"))){
+                        context.print("Exception:"+e.getMessage());
+                    }
+                }
+            }
+
+            closeJmxConnection();
+        }
+    /**
+     * @param token - option token to handle
+     * @param tokens - succeeding command arguments
+     * @throws Exception
+     */
+    protected void handleOption(String token, List<String> tokens) throws Exception
{
+        // Try to handle the options first
+        if (token.equals("--connectorName")) {
+            if (tokens.isEmpty() || ((String)tokens.get(0)).startsWith("-")) {
+                context.printException(new IllegalArgumentException("connectorName not specified"));
+                return;
+            }
+
+            connectorName=(String)tokens.remove(0);
+        } else if (token.equals("--timeout")) {
+            if (tokens.isEmpty() || ((String)tokens.get(0)).startsWith("-")) {
+                context.printException(new IllegalArgumentException("timeout not specified"));
+                return;
+            }
+            timeout=Long.parseLong(tokens.remove(0));
+        } else if (token.equals("--pollInterval")) {
+            if (tokens.isEmpty() || ((String)tokens.get(0)).startsWith("-")) {
+                context.printException(new IllegalArgumentException("pollInterval not specified"));
+                return;
+            }
+            pollInterval=Long.parseLong(tokens.remove(0));
+        }else if(token.equals("--queueName")) {
+            if (tokens.isEmpty() || ((String)tokens.get(0)).startsWith("-")) {
+                context.printException(new IllegalArgumentException("queueName not specified"));
+                return;
+            }
+            queueName=(String)tokens.remove(0);
+        }else {
+            // Let the super class handle the option
+            super.handleOption(token, tokens);
+        }
+    }
+
+}
\ No newline at end of file

Propchange: activemq/trunk/activemq-console/src/main/java/org/apache/activemq/console/command/StopGracefullyCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/trunk/activemq-console/src/main/java/org/apache/activemq/console/command/StopGracefullyCommand.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain



Mime
View raw message