Author: veithen
Date: Wed Jan  4 19:27:32 2012
New Revision: 1227272

URL: http://svn.apache.org/viewvc?rev=1227272&view=rev
Log:
Some improvements to the start-server mojo.

Modified:
    
axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/DefaultServerManager.java

Modified: 
axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/DefaultServerManager.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/DefaultServerManager.java?rev=1227272&r1=1227271&r2=1227272&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/DefaultServerManager.java
 (original)
+++ 
axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/DefaultServerManager.java
 Wed Jan  4 19:27:32 2012
@@ -20,14 +20,26 @@ package org.apache.axis.maven;
 
 import java.io.File;
 import java.net.URL;
+import java.rmi.RemoteException;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.xml.namespace.QName;
+
 import org.apache.axis.client.AdminClient;
+import org.apache.axis.client.Call;
+import org.codehaus.plexus.logging.LogEnabled;
+import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
 
-public class DefaultServerManager implements ServerManager {
+public class DefaultServerManager implements ServerManager, LogEnabled {
     private final Map servers = new HashMap();
+    
+    private Logger logger;
+    
+    public void enableLogging(Logger logger) {
+        this.logger = logger;
+    }
 
     public void startServer(String jvm, String[] classpath, int port, File 
workDir, String[] wsddFiles) throws Exception {
         AdminClient adminClient = new AdminClient(true);
@@ -42,11 +54,36 @@ public class DefaultServerManager implem
         }, null, workDir);
         servers.put(Integer.valueOf(port), new Server(process, adminClient));
         // TODO: need to set up stdout/stderr forwarding; otherwise the 
process will hang
-        // TODO: need to ping the server and wait until it becomes ready
-        Thread.sleep(5000);
+        
+        // Wait for server to become ready
+        String versionUrl = "http://localhost:"; + port + 
"/axis/services/Version";
+        Call call = new Call(new URL(versionUrl));
+        call.setOperationName(new QName(versionUrl, "getVersion"));
+        for (int i=0; ; i++) {
+            try {
+                String result = (String)call.invoke(new Object[0]);
+                logger.info("Server ready on port " + port + ": " + 
result.replace('\n', ' '));
+                break;
+            } catch (RemoteException ex) {
+                if (i == 50) {
+                    throw ex;
+                }
+            }
+            Thread.sleep(200);
+        }
+        
+        // Deploy services
         if (wsddFiles != null) {
             for (int i=0; i<wsddFiles.length; i++) {
-                System.out.println(adminClient.process(wsddFiles[i]));
+                String wsddFile = wsddFiles[i];
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Starting deployment of " + wsddFile);
+                }
+                String result = adminClient.process(wsddFile);
+                if (logger.isDebugEnabled()) {
+                    logger.debug("AdminClient result: " + result);
+                }
+                logger.info("Deployed " + wsddFile);
             }
         }
     }
@@ -55,5 +92,6 @@ public class DefaultServerManager implem
         Server server = (Server)servers.remove(Integer.valueOf(port));
         server.getAdminClient().quit();
         server.getProcess().waitFor();
+        logger.info("Server on port " + port + " stopped");
     }
 }


Reply via email to