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"); } }