You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2010/12/16 22:33:09 UTC
svn commit: r1050172 - in /activemq/activemq-apollo/trunk:
apollo-cli/src/main/resources/META-INF/services/org.apache.activemq.apollo/
apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/commands/
apollo-web/src/main/scala/org/apache/activemq/apol...
Author: chirino
Date: Thu Dec 16 21:33:09 2010
New Revision: 1050172
URL: http://svn.apache.org/viewvc?rev=1050172&view=rev
Log:
Implemented a stop command to shutdown a running broker.
Added:
activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/commands/Stop.scala
Modified:
activemq/activemq-apollo/trunk/apollo-cli/src/main/resources/META-INF/services/org.apache.activemq.apollo/commands.index
activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/RootResource.scala
Modified: activemq/activemq-apollo/trunk/apollo-cli/src/main/resources/META-INF/services/org.apache.activemq.apollo/commands.index
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-cli/src/main/resources/META-INF/services/org.apache.activemq.apollo/commands.index?rev=1050172&r1=1050171&r2=1050172&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-cli/src/main/resources/META-INF/services/org.apache.activemq.apollo/commands.index (original)
+++ activemq/activemq-apollo/trunk/apollo-cli/src/main/resources/META-INF/services/org.apache.activemq.apollo/commands.index Thu Dec 16 21:33:09 2010
@@ -18,5 +18,5 @@ org.apache.activemq.apollo.cli.commands.
org.apache.activemq.apollo.cli.commands.Help
org.apache.activemq.apollo.cli.commands.Create
#org.apache.activemq.apollo.cli.commands.Start
-#org.apache.activemq.apollo.cli.commands.Stop
+org.apache.activemq.apollo.cli.commands.Stop
org.apache.activemq.apollo.cli.commands.Run
Added: activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/commands/Stop.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/commands/Stop.scala?rev=1050172&view=auto
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/commands/Stop.scala (added)
+++ activemq/activemq-apollo/trunk/apollo-cli/src/main/scala/org/apache/activemq/apollo/cli/commands/Stop.scala Thu Dec 16 21:33:09 2010
@@ -0,0 +1,96 @@
+package org.apache.activemq.apollo.cli.commands
+
+/**
+ * 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.
+ */
+import org.apache.felix.gogo.commands.{Action, Option => option, Argument => argument, Command => command}
+import org.osgi.service.command.CommandSession
+import java.io.File
+import org.apache.activemq.apollo.broker.FileConfigStore
+import org.apache.activemq.apollo.util.FileSupport._
+import org.apache.activemq.apollo.util.OptionSupport._
+import org.apache.activemq.apollo.util.Logging
+import org.apache.activemq.apollo.dto.WebAdminDTO
+import org.apache.commons.codec.binary.Base64
+import java.net.{HttpURLConnection, URL}
+
+/**
+ * The apollo stop command
+ */
+@command(scope="apollo", name = "stop", description = "stops the broker instance")
+class Stop extends Action with Logging {
+
+ @option(name = "--conf", description = "The Apollo configuration file.")
+ var conf: File = _
+
+ @option(name = "--user", description = "The user id")
+ var user: String = _
+
+ @option(name = "--password", description = "The user password")
+ var password: String = _
+
+ def execute(session: CommandSession):AnyRef = {
+
+ try {
+
+ val base = system_dir("apollo.base")
+
+ if( conf == null ) {
+ conf = base / "etc" / "apollo.xml"
+ }
+
+ if( !conf.exists ) {
+ error("Configuration file'%s' does not exist.\n\nTry creating a broker instance using the 'apollo create' command.".format(conf));
+ }
+
+ val store = new FileConfigStore
+ store.file = conf
+ store.start
+ val config = store.load(true)
+
+
+ val web_admin = config.web_admin.getOrElse(new WebAdminDTO)
+ if( web_admin.enabled.getOrElse(true) ) {
+
+ val prefix = web_admin.prefix.getOrElse("/").stripSuffix("/")
+ val port = web_admin.port.getOrElse(8080)
+ val host = web_admin.host.getOrElse("127.0.0.1")
+
+ val auth = (user, password) match {
+ case (null,null)=> None
+ case (null,p)=> Some(":"+p)
+ case (u,null)=> Some(u+":")
+ case (u,p)=> Some(u+":"+p)
+ }
+
+ val connection = new URL(
+ "http://%s:%s%s/command/shutdown".format(host, port, prefix)
+ ).openConnection.asInstanceOf[HttpURLConnection]
+ connection.setRequestMethod("POST");
+ auth.foreach{x=> connection.setRequestProperty("Authorization", "Basic "+new String(Base64.encodeBase64(x.getBytes("UTF-8")), "UTF-8")) }
+ connection.getContent
+
+ }
+
+ } catch {
+ case x:Helper.Failure=>
+ error(x.getMessage)
+ }
+ null
+ }
+
+
+}
\ No newline at end of file
Modified: activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/RootResource.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/RootResource.scala?rev=1050172&r1=1050171&r2=1050172&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/RootResource.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/RootResource.scala Thu Dec 16 21:33:09 2010
@@ -24,8 +24,6 @@ import reflect.{BeanProperty}
import com.sun.jersey.api.view.ImplicitProduces
import Response._
import Response.Status._
-import org.apache.activemq.apollo.broker.ConfigStore
-import org.apache.activemq.apollo.broker.BrokerRegistry
import collection.JavaConversions._
import com.sun.jersey.api.core.ResourceContext
import java.util.concurrent.TimeUnit
@@ -35,6 +33,7 @@ import org.apache.activemq.apollo.util.L
import org.fusesource.hawtdispatch._
import java.net.URI
import org.fusesource.scalate.{NoValueSetException, RenderContext}
+import org.apache.activemq.apollo.broker.{Broker, ConfigStore, BrokerRegistry}
/**
* Defines the default representations to be used on resources
@@ -156,6 +155,19 @@ class BrokerResource extends Resource {
rc
}
+ @POST
+ @Path("command/shutdown")
+ def command_shutdown:Unit = {
+ info("JVM shutdown requested via web interface")
+
+ // do the the exit async so that we don't
+ // kill the current request.
+ Broker.BLOCKABLE_THREAD_POOL {
+ Thread.sleep(200);
+ System.exit(0)
+ }
+ }
+
@Path("config")
def config_resource = ConfigurationResource(this)