You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by ve...@apache.org on 2012/01/06 18:05:15 UTC

svn commit: r1228276 - in /axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven: DefaultServerManager.java ServerManager.java StartServerMojo.java

Author: veithen
Date: Fri Jan  6 17:05:14 2012
New Revision: 1228276

URL: http://svn.apache.org/viewvc?rev=1228276&view=rev
Log:
Allow the integration test server to be started in debug mode.

Modified:
    axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/DefaultServerManager.java
    axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/ServerManager.java
    axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/StartServerMojo.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=1228276&r1=1228275&r2=1228276&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 Fri Jan  6 17:05:14 2012
@@ -21,7 +21,10 @@ package org.apache.axis.maven;
 import java.io.File;
 import java.net.URL;
 import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.xml.namespace.QName;
@@ -41,17 +44,21 @@ public class DefaultServerManager implem
         this.logger = logger;
     }
 
-    public void startServer(String jvm, String[] classpath, int port, File workDir, String[] wsddFiles) throws Exception {
+    public void startServer(String jvm, String[] classpath, int port, String[] vmArgs, File workDir, String[] wsddFiles, int timeout) throws Exception {
         AdminClient adminClient = new AdminClient(true);
         adminClient.setTargetEndpointAddress(new URL("http://localhost:" + port + "/axis/services/AdminService"));
-        Process process = Runtime.getRuntime().exec(new String[] {
-                jvm,
-                "-cp",
-                StringUtils.join(classpath, File.pathSeparator),
-                "org.apache.axis.transport.http.SimpleAxisServer",
-                "-p",
-                String.valueOf(port)
-        }, null, workDir);
+        List cmdline = new ArrayList();
+        cmdline.add(jvm);
+        cmdline.add("-cp");
+        cmdline.add(StringUtils.join(classpath, File.pathSeparator));
+        cmdline.addAll(Arrays.asList(vmArgs));
+        cmdline.add("org.apache.axis.transport.http.SimpleAxisServer");
+        cmdline.add("-p");
+        cmdline.add(String.valueOf(port));
+        if (logger.isDebugEnabled()) {
+            logger.debug("Starting process with command line: " + cmdline);
+        }
+        Process process = Runtime.getRuntime().exec((String[])cmdline.toArray(new String[cmdline.size()]), null, workDir);
         servers.put(Integer.valueOf(port), new Server(process, adminClient));
         // TODO: need to set up stdout/stderr forwarding; otherwise the process will hang
         
@@ -59,16 +66,24 @@ public class DefaultServerManager implem
         String versionUrl = "http://localhost:" + port + "/axis/services/Version";
         Call call = new Call(new URL(versionUrl));
         call.setOperationName(new QName(versionUrl, "getVersion"));
+        long start = System.currentTimeMillis();
         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) {
+                if (System.currentTimeMillis() > start + timeout) {
                     throw ex;
                 }
             }
+            try {
+                int exitValue = process.exitValue();
+                // TODO: choose a better exception here
+                throw new RemoteException("The server process unexpectedly died with exit status " + exitValue);
+            } catch (IllegalThreadStateException ex) {
+                // This means that the process is still running; continue
+            }
             Thread.sleep(200);
         }
         

Modified: axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/ServerManager.java
URL: http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/ServerManager.java?rev=1228276&r1=1228275&r2=1228276&view=diff
==============================================================================
--- axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/ServerManager.java (original)
+++ axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/ServerManager.java Fri Jan  6 17:05:14 2012
@@ -21,6 +21,6 @@ package org.apache.axis.maven;
 import java.io.File;
 
 public interface ServerManager {
-    void startServer(String jvm, String[] classpath, int port, File workDir, String[] wsddFiles) throws Exception;
+    void startServer(String jvm, String[] classpath, int port, String[] vmArgs, File workDir, String[] wsddFiles, int timeout) throws Exception;
     void stopServer(int port) throws Exception;
 }

Modified: axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/StartServerMojo.java
URL: http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/StartServerMojo.java?rev=1228276&r1=1228275&r2=1228276&view=diff
==============================================================================
--- axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/StartServerMojo.java (original)
+++ axis/axis1/java/trunk/axis-maven-plugin/src/main/java/org/apache/axis/maven/StartServerMojo.java Fri Jan  6 17:05:14 2012
@@ -21,6 +21,7 @@ package org.apache.axis.maven;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.axis.transport.http.SimpleAxisServer;
@@ -94,6 +95,22 @@ public class StartServerMojo extends Abs
      */
     private boolean foreground;
     
+    /**
+     * The arguments to pass to the server JVM when debug mode is enabled.
+     * 
+     * @parameter default-value="-Xdebug -Xrunjdwp:transport=dt_socket,address=8899,server=y,suspend=y"
+     */
+    private String debugArgs;
+    
+    /**
+     * Indicates whether the server should be started in debug mode. This flag can only be set from
+     * the command lined.
+     * 
+     * @parameter expression="${axis.server.debug}" default-value="false"
+     * @readonly
+     */
+    private boolean debug;
+    
     public void execute() throws MojoExecutionException, MojoFailureException {
         Log log = getLog();
         
@@ -143,6 +160,15 @@ public class StartServerMojo extends Abs
             wsddFiles = null;
         }
         
+        // Compute JVM arguments
+        List vmArgs = new ArrayList();
+        if (debug) {
+            vmArgs.addAll(Arrays.asList(debugArgs.split(" ")));
+        }
+        if (log.isDebugEnabled()) {
+            log.debug("Additional VM args: " + vmArgs);
+        }
+        
         // Prepare a work directory where the server can create a server-config.wsdd file
         File workDir = new File(workDirBase, String.valueOf(getPort()));
         if (workDir.exists()) {
@@ -160,8 +186,10 @@ public class StartServerMojo extends Abs
             getServerManager().startServer(executable,
                     (String[])classPathElements.toArray(new String[classPathElements.size()]),
                     getPort(),
+                    (String[])vmArgs.toArray(new String[vmArgs.size()]),
                     workDir,
-                    wsddFiles == null ? null : (String[])wsddFiles.toArray(new String[wsddFiles.size()]));
+                    wsddFiles == null ? null : (String[])wsddFiles.toArray(new String[wsddFiles.size()]),
+                    debug || foreground ? Integer.MAX_VALUE : 20000);
         } catch (Exception ex) {
             throw new MojoFailureException("Failed to start server", ex);
         }