You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2008/06/12 00:33:20 UTC

svn commit: r666875 - in /geronimo/server/trunk: assemblies/geronimo-boilerplate/src/main/underlay/etc/ framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/

Author: gawor
Date: Wed Jun 11 15:33:20 2008
New Revision: 666875

URL: http://svn.apache.org/viewvc?rev=666875&view=rev
Log:
wait-for-server ghsell command (GERONIMO-4115)

Added:
    geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/WaitForServerCommand.groovy
Modified:
    geronimo/server/trunk/assemblies/geronimo-boilerplate/src/main/underlay/etc/layout.xml
    geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/ConnectCommand.groovy

Modified: geronimo/server/trunk/assemblies/geronimo-boilerplate/src/main/underlay/etc/layout.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/assemblies/geronimo-boilerplate/src/main/underlay/etc/layout.xml?rev=666875&r1=666874&r2=666875&view=diff
==============================================================================
--- geronimo/server/trunk/assemblies/geronimo-boilerplate/src/main/underlay/etc/layout.xml (original)
+++ geronimo/server/trunk/assemblies/geronimo-boilerplate/src/main/underlay/etc/layout.xml Wed Jun 11 15:33:20 2008
@@ -100,6 +100,11 @@
                     <name>start-client</name>
                     <id>geronimo-commands:start-client</id>
                 </command>
+
+                <command>
+                    <name>wait-for-server</name>
+                    <id>geronimo-commands:wait-for-server</id>
+                </command>
             </nodes>
         </group>
 

Modified: geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/ConnectCommand.groovy
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/ConnectCommand.groovy?rev=666875&r1=666874&r2=666875&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/ConnectCommand.groovy (original)
+++ geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/ConnectCommand.groovy Wed Jun 11 15:33:20 2008
@@ -58,11 +58,13 @@
     PromptReader prompter
 
     protected Object doExecute() throws Exception {
-        return openConnection()
+        return openConnection(false)
     }
     
-    private ServerConnection openConnection() throws Exception {
-        io.out.println("Connecting to Geronimo server: ${hostname}:${port}")
+    protected ServerConnection openConnection(boolean quiet) throws Exception {
+        if (!quiet) {
+        	io.out.println("Connecting to Geronimo server: ${hostname}:${port}")
+        }
         
         // If the username/password was not configured via cli, then prompt the user for the values
         if (username == null || password == null) {
@@ -90,7 +92,9 @@
         
         variables.parent.set(SERVER_CONNECTION, connection)
 
-        io.out.println('Connection established')
+        if (!quiet) {
+        	io.out.println('Connection established')
+        }
         
         return connection
     }
@@ -99,7 +103,7 @@
         def connection = variables.get(SERVER_CONNECTION)
         
         if (!connection) {
-            connection = openConnection()
+            connection = openConnection(false)
         }
         
         return connection

Added: geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/WaitForServerCommand.groovy
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/WaitForServerCommand.groovy?rev=666875&view=auto
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/WaitForServerCommand.groovy (added)
+++ geronimo/server/trunk/framework/modules/geronimo-commands/src/main/groovy/org/apache/geronimo/commands/WaitForServerCommand.groovy Wed Jun 11 15:33:20 2008
@@ -0,0 +1,102 @@
+/*
+ * 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.geronimo.commands
+
+import org.apache.geronimo.gshell.clp.Option
+import org.apache.geronimo.gshell.command.annotation.CommandComponent
+import org.apache.geronimo.gshell.command.CommandSupport
+import org.apache.geronimo.gshell.command.annotation.Requirement
+import org.apache.geronimo.gshell.console.PromptReader
+import org.apache.geronimo.deployment.cli.ServerConnection
+import org.apache.geronimo.deployment.plugin.jmx.RemoteDeploymentManager
+
+/**
+ * Wait for a Geronimo server to start.
+ *
+ * @version $Rev: 664243 $ $Date: 2008-06-06 22:23:20 -0400 (Fri, 06 Jun 2008) $
+ */
+@CommandComponent(id='geronimo-commands:wait-for-server', description='Wait for a Geronimo server to start')
+class WaitForServerCommand
+    extends ConnectCommand
+{
+     
+    @Option(name='-t', aliases=['--timeout'], description='Specify the time in seconds to wait while verifying that the server has started. Default 60 seconds')
+    int timeout = 60
+     
+    protected Object doExecute() throws Exception {
+        def timer = new Timer(true)
+        
+        def timedOut = false
+        
+        def timeoutTask
+        if (timeout > 0) {
+            timeoutTask = timer.runAfter(timeout * 1000, {
+                timedOut = true
+            })
+        }
+        
+        def started = false
+        
+        io.out.println("Waiting for Geronimo server: ${hostname}:${port}")
+        
+        def connection
+        def server
+        while (!started) {
+            if (timedOut) {
+                throw new Exception("Unable to verify if the server was started in the given time")
+            }
+            
+            try {
+                connection = connect()
+                server = new ServerProxy(connection.deploymentManager.getJMXConnector())
+            } catch (Exception error) {
+                log.debug("Server query failed; ignoring", error)
+                Thread.sleep(1000)
+                continue
+            }
+                        
+            started = server.isFullyStarted()
+            
+            if (!started) {
+                Throwable error = server.getLastError()
+                if (error != null) {
+                    log.debug("Server query failed; ignoring", error)
+                }
+                Thread.sleep(1000);
+            }
+        }
+        
+        timeoutTask?.cancel()
+        timer.cancel()
+                
+        io.out.println("Geronimo server is started")
+    }
+    
+    protected ServerConnection connect() {
+        def connection = variables.get(SERVER_CONNECTION)
+        
+        if (!connection) {
+            connection = openConnection(true)
+        }
+        
+        return connection
+    }
+    
+}