Author: veithen
Date: Tue Dec 11 17:26:34 2012
New Revision: 1420298

URL: http://svn.apache.org/viewvc?rev=1420298&view=rev
Log:
* Added a Daemon implementation for the Axis stand-alone server.
* Simplified the maven-axis-server-plugin: now all processes controlled by the 
plug-in are Daemon implementations.

Added:
    
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/ServerException.java
   (with props)
    
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/
    
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/Configurator.java
   (with props)
    
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/ConfiguratorException.java
   (with props)
    
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/Main.java
   (with props)
    
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/daemon/
    
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/daemon/AxisServerDaemon.java
   (with props)
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractDaemonControlMojo.java
      - copied, changed from r1419001, 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractServerMojo.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractStartDaemonMojo.java
      - copied, changed from r1419166, 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractStartProcessMojo.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DaemonManager.java
      - copied, changed from r1419001, 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/ProcessManager.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DefaultDaemonManager.java
      - copied, changed from r1419001, 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DefaultProcessManager.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/RemoteDaemon.java
      - copied, changed from r1419001, 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/ManagedProcess.java
Removed:
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractServerMojo.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractStartProcessMojo.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AxisServerProcessControl.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DaemonProcessControl.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DefaultProcessManager.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/ManagedProcess.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/ProcessControl.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/ProcessManager.java
Modified:
    axis/axis1/java/trunk/axis-standalone-server/pom.xml
    
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/LimitSessionManager.java
    
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/QuitHandler.java
    
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/QuitListener.java
    
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/StandaloneAxisServer.java
    
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/StandaloneAxisServlet.java
    axis/axis1/java/trunk/distribution/pom.xml
    axis/axis1/java/trunk/maven/maven-axis-server-plugin/pom.xml
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StartDaemonMojo.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StartServerMojo.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StopAllMojo.java
    
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/resources/META-INF/plexus/components.xml

Modified: axis/axis1/java/trunk/axis-standalone-server/pom.xml
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-standalone-server/pom.xml?rev=1420298&r1=1420297&r2=1420298&view=diff
==============================================================================
--- axis/axis1/java/trunk/axis-standalone-server/pom.xml (original)
+++ axis/axis1/java/trunk/axis-standalone-server/pom.xml Tue Dec 11 17:26:34 
2012
@@ -49,12 +49,31 @@
             <version>1.2</version>
         </dependency>
         <dependency>
+            <groupId>commons-daemon</groupId>
+            <artifactId>commons-daemon</artifactId>
+        </dependency>
+        <dependency>
             <!-- Jetty 6.1 is the last version with support for Java 1.4 -->
             <groupId>org.mortbay.jetty</groupId>
             <artifactId>jetty</artifactId>
             <version>6.1.26</version>
         </dependency>
     </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            
<mainClass>org.apache.axis.server.standalone.cli.Main</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
     <reporting>
         <plugins>
             <plugin>

Modified: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/LimitSessionManager.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/LimitSessionManager.java?rev=1420298&r1=1420297&r2=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/LimitSessionManager.java
 (original)
+++ 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/LimitSessionManager.java
 Tue Dec 11 17:26:34 2012
@@ -32,7 +32,7 @@ import org.mortbay.jetty.servlet.HashSes
  * 
  * @author Andreas Veithen
  */
-public class LimitSessionManager extends HashSessionManager {
+final class LimitSessionManager extends HashSessionManager {
     // This is only needed to get access to some protected methods/fields.
     class Session extends HashSessionManager.Session {
         private static final long serialVersionUID = -6648322281268846583L;
@@ -54,7 +54,7 @@ public class LimitSessionManager extends
     private Timer timer;
     private TimerTask task;
 
-    public LimitSessionManager(int maxSessions) {
+    LimitSessionManager(int maxSessions) {
         this.maxSessions = maxSessions;
     }
 

Modified: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/QuitHandler.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/QuitHandler.java?rev=1420298&r1=1420297&r2=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/QuitHandler.java
 (original)
+++ 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/QuitHandler.java
 Tue Dec 11 17:26:34 2012
@@ -29,10 +29,13 @@ import org.apache.axis.utils.Admin;
 /**
  * Handler that looks for the {@link MessageContext#QUIT_REQUESTED} flag set 
by {@link Admin} and
  * initiates the shutdown procedure if the flag is set.
+ * <p>
+ * Note: this is an internal class that should not be used by application code.
  * 
  * @author Andreas Veithen
  */
-public class QuitHandler extends BasicHandler {
+// Must be public so that the Axis core can load it
+public final class QuitHandler extends BasicHandler {
     public static final String QUIT_LISTENER = QuitListener.class.getName();
     
     public void invoke(MessageContext msgContext) throws AxisFault {

Modified: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/QuitListener.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/QuitListener.java?rev=1420298&r1=1420297&r2=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/QuitListener.java
 (original)
+++ 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/QuitListener.java
 Tue Dec 11 17:26:34 2012
@@ -23,7 +23,7 @@ package org.apache.axis.server.standalon
  * 
  * @author Andreas Veithen
  */
-class QuitListener {
+final class QuitListener {
     private boolean quit;
     
     synchronized void requestQuit() {

Added: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/ServerException.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/ServerException.java?rev=1420298&view=auto
==============================================================================
--- 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/ServerException.java
 (added)
+++ 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/ServerException.java
 Tue Dec 11 17:26:34 2012
@@ -0,0 +1,27 @@
+/*
+ * 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.axis.server.standalone;
+
+public class ServerException extends Exception {
+    private static final long serialVersionUID = 2996112474203025829L;
+
+    public ServerException(Throwable cause) {
+        super(cause);
+    }
+}

Propchange: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/ServerException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/StandaloneAxisServer.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/StandaloneAxisServer.java?rev=1420298&r1=1420297&r2=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/StandaloneAxisServer.java
 (original)
+++ 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/StandaloneAxisServer.java
 Tue Dec 11 17:26:34 2012
@@ -19,16 +19,10 @@
 package org.apache.axis.server.standalone;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.GnuParser;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.SessionManager;
 import org.mortbay.jetty.servlet.Context;
@@ -45,82 +39,71 @@ import org.mortbay.resource.ResourceColl
  * 
  * @author Andreas Veithen
  */
-public class StandaloneAxisServer {
-    public static void main(String[] args) throws Exception {
-        Options options = new Options();
-        
-        {
-            Option option = new Option("p", true, "the HTTP port");
-            option.setArgName("port");
-            option.setRequired(true);
-            options.addOption(option);
-        }
-        
-        {
-            Option option = new Option("w", true, "the work directory");
-            option.setArgName("dir");
-            option.setRequired(true);
-            options.addOption(option);
-        }
-        
-        {
-            Option option = new Option("j", true, "a list of directories to 
look up JWS files from");
-            option.setArgName("dirs");
-            options.addOption(option);
-        }
-        
-        {
-            Option option = new Option("m", true, "the maximum number of 
concurrently active sessions");
-            option.setArgName("count");
-            options.addOption(option);
-        }
-        
-        if (args.length == 0) {
-            HelpFormatter formatter = new HelpFormatter();
-            formatter.printHelp(StandaloneAxisServer.class.getName(), options);
-            return;
-        }
-        
-        CommandLineParser parser = new GnuParser();
-        CommandLine cmdLine;
-        try {
-            cmdLine = parser.parse(options, args);
-        } catch (ParseException ex) {
-            System.err.println(ex.getMessage());
-            System.exit(1);
-            return; // Make compiler happy
-        }
-        
-        int port = Integer.parseInt(cmdLine.getOptionValue("p"));
-        
-        int maxSessions;
-        if (cmdLine.hasOption("m")) {
-            maxSessions = Integer.parseInt(cmdLine.getOptionValue("m"));
-        } else {
-            maxSessions = -1;
-        }
-        
+public final class StandaloneAxisServer {
+    private int port;
+    private File workDir;
+    private int maxSessions = -1;
+    private File[] jwsDirs;
+    
+    private Server server;
+    private QuitListener quitListener;
+    
+    public int getPort() {
+        return port;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public File getWorkDir() {
+        return workDir;
+    }
+
+    public void setWorkDir(File workDir) {
+        this.workDir = workDir;
+    }
+
+    public int getMaxSessions() {
+        return maxSessions;
+    }
+
+    public void setMaxSessions(int maxSessions) {
+        this.maxSessions = maxSessions;
+    }
+
+    public File[] getJwsDirs() {
+        return jwsDirs == null ? null : (File[])jwsDirs.clone();
+    }
+
+    public void setJwsDirs(File[] jwsDirs) {
+        this.jwsDirs = jwsDirs == null ? null : (File[])jwsDirs.clone();
+    }
+
+    public void init() throws ServerException {
         StandaloneAxisServlet servlet = new StandaloneAxisServlet();
         
         List resources = new ArrayList();
         
         // Add the work dir as a resource so that Axis can create its 
server-config.wsdd file there
-        File workDir = new File(cmdLine.getOptionValue("w"));
         new File(workDir, "WEB-INF").mkdir();
-        resources.add(Resource.newResource(workDir.getAbsolutePath()));
+        try {
+            resources.add(Resource.newResource(workDir.getAbsolutePath()));
+        } catch (IOException ex) {
+            throw new ServerException(ex);
+        }
         
-        boolean enableJWS;
-        if (cmdLine.hasOption("j")) {
-            String[] jwsDirs = 
cmdLine.getOptionValue("j").split(File.pathSeparator);
+        if (jwsDirs != null) {
             for (int i=0; i<jwsDirs.length; i++) {
-                resources.add(Resource.newResource(jwsDirs[i]));
+                try {
+                    
resources.add(Resource.newResource(jwsDirs[i].getAbsolutePath()));
+                } catch (IOException ex) {
+                    throw new ServerException(ex);
+                }
             }
-            enableJWS = true;
-        } else {
-            enableJWS = false;
         }
         
-        Server server = new Server(port);
+        server = new Server(port);
         server.setGracefulShutdown(1000);
         Context context = new Context(server, "/axis");
         context.setBaseResource(new 
ResourceCollection((Resource[])resources.toArray(new 
Resource[resources.size()])));
@@ -131,7 +114,7 @@ public class StandaloneAxisServer {
             sessionManager = new LimitSessionManager(maxSessions);
         }
         context.setSessionHandler(new SessionHandler(sessionManager));
-        QuitListener quitListener = new QuitListener();
+        quitListener = new QuitListener();
         context.setAttribute(QuitHandler.QUIT_LISTENER, quitListener);
         ServletHandler servletHandler = context.getServletHandler();
         ServletHolder axisServletHolder = new ServletHolder(servlet);
@@ -149,18 +132,31 @@ public class StandaloneAxisServer {
             mapping.setPathSpec("/servlet/AxisServlet");
             servletHandler.addServletMapping(mapping);
         }
-        if (enableJWS) {
+        if (jwsDirs != null && jwsDirs.length > 0) {
             ServletMapping mapping = new ServletMapping();
             mapping.setServletName("AxisServlet");
             mapping.setPathSpec("*.jws");
             servletHandler.addServletMapping(mapping);
         }
-        server.start();
+    }
+    
+    public void start() throws ServerException {
+        try {
+            server.start();
+        } catch (Exception ex) {
+            throw new ServerException(ex);
+        }
+    }
+    
+    public void awaitQuitRequest() throws InterruptedException {
+        quitListener.awaitQuitRequest();
+    }
+    
+    public void stop() throws ServerException {
         try {
-            quitListener.awaitQuitRequest();
-        } catch (InterruptedException ex) {
-            // Just continue and stop the server
+            server.stop();
+        } catch (Exception ex) {
+            throw new ServerException(ex);
         }
-        server.stop();
     }
 }

Modified: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/StandaloneAxisServlet.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/StandaloneAxisServlet.java?rev=1420298&r1=1420297&r2=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/StandaloneAxisServlet.java
 (original)
+++ 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/StandaloneAxisServlet.java
 Tue Dec 11 17:26:34 2012
@@ -37,7 +37,7 @@ import org.apache.axis.utils.XMLUtils;
  * 
  * @author Andreas Veithen
  */
-public class StandaloneAxisServlet extends AxisServlet {
+final class StandaloneAxisServlet extends AxisServlet {
     private final List/*<URL>*/ wsddUrls;
     
     public StandaloneAxisServlet() {

Added: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/Configurator.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/Configurator.java?rev=1420298&view=auto
==============================================================================
--- 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/Configurator.java
 (added)
+++ 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/Configurator.java
 Tue Dec 11 17:26:34 2012
@@ -0,0 +1,98 @@
+/*
+ * 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.axis.server.standalone.cli;
+
+import java.io.File;
+import java.io.PrintWriter;
+
+import org.apache.axis.server.standalone.StandaloneAxisServer;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.GnuParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+
+public final class Configurator {
+    public static final Configurator INSTANCE = new Configurator();
+    
+    private final Options options;
+    
+    private Configurator() {
+        options = new Options();
+        
+        {
+            Option option = new Option("p", true, "the HTTP port");
+            option.setArgName("port");
+            option.setRequired(true);
+            options.addOption(option);
+        }
+        
+        {
+            Option option = new Option("w", true, "the work directory");
+            option.setArgName("dir");
+            option.setRequired(true);
+            options.addOption(option);
+        }
+        
+        {
+            Option option = new Option("j", true, "a list of directories to 
look up JWS files from");
+            option.setArgName("dirs");
+            options.addOption(option);
+        }
+        
+        {
+            Option option = new Option("m", true, "the maximum number of 
concurrently active sessions");
+            option.setArgName("count");
+            options.addOption(option);
+        }
+    }
+    
+    public void printHelp(PrintWriter pw, String app) {
+        HelpFormatter formatter = new HelpFormatter();
+        formatter.printUsage(pw, 100, app, options);
+        formatter.printOptions(pw, 100, options, 1, 2);
+        pw.flush();
+    }
+    
+    public void configure(StandaloneAxisServer server, String[] args) throws 
ConfiguratorException {
+        CommandLineParser parser = new GnuParser();
+        CommandLine cmdLine;
+        try {
+            cmdLine = parser.parse(options, args);
+        } catch (ParseException ex) {
+            throw new ConfiguratorException(ex.getMessage());
+        }
+        
+        server.setPort(Integer.parseInt(cmdLine.getOptionValue("p")));
+        server.setWorkDir(new File(cmdLine.getOptionValue("w")));
+        if (cmdLine.hasOption("m")) {
+            
server.setMaxSessions(Integer.parseInt(cmdLine.getOptionValue("m")));
+        }
+        if (cmdLine.hasOption("j")) {
+            String[] jwsDirStrings = 
cmdLine.getOptionValue("j").split(File.pathSeparator);
+            File[] jwsDirs = new File[jwsDirStrings.length];
+            for (int i=0; i<jwsDirStrings.length; i++) {
+                jwsDirs[i] = new File(jwsDirStrings[i]);
+            }
+            server.setJwsDirs(jwsDirs);
+        }
+    }
+}

Propchange: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/Configurator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/ConfiguratorException.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/ConfiguratorException.java?rev=1420298&view=auto
==============================================================================
--- 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/ConfiguratorException.java
 (added)
+++ 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/ConfiguratorException.java
 Tue Dec 11 17:26:34 2012
@@ -0,0 +1,31 @@
+/*
+ * 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.axis.server.standalone.cli;
+
+public class ConfiguratorException extends Exception {
+    private static final long serialVersionUID = 664045878448812254L;
+
+    public ConfiguratorException(Throwable cause) {
+        super(cause);
+    }
+
+    public ConfiguratorException(String message) {
+        super(message);
+    }
+}

Propchange: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/ConfiguratorException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/Main.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/Main.java?rev=1420298&view=auto
==============================================================================
--- 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/Main.java
 (added)
+++ 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/Main.java
 Tue Dec 11 17:26:34 2012
@@ -0,0 +1,62 @@
+/*
+ * 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.axis.server.standalone.cli;
+
+import java.io.PrintWriter;
+
+import org.apache.axis.server.standalone.ServerException;
+import org.apache.axis.server.standalone.StandaloneAxisServer;
+
+/**
+ * Main class to run the stand-alone server from the command line.
+ * 
+ * @author Andreas Veithen
+ */
+public class Main {
+    public static void main(String[] args) {
+        StandaloneAxisServer server = new StandaloneAxisServer();
+        
+        if (args.length == 0) {
+            Configurator.INSTANCE.printHelp(new PrintWriter(System.out), 
Main.class.getName());
+            return;
+        }
+        
+        try {
+            Configurator.INSTANCE.configure(server, args);
+        } catch (ConfiguratorException ex) {
+            System.err.println(ex.getMessage());
+            System.exit(1);
+            return; // Make compiler happy
+        }
+        
+        try {
+            server.init();
+            server.start();
+            try {
+                server.awaitQuitRequest();
+            } catch (InterruptedException ex) {
+                // Just continue and stop the server
+            }
+            server.stop();
+        } catch (ServerException ex) {
+            ex.printStackTrace();
+            System.exit(1);
+        }
+    }
+}

Propchange: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/cli/Main.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/daemon/AxisServerDaemon.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/daemon/AxisServerDaemon.java?rev=1420298&view=auto
==============================================================================
--- 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/daemon/AxisServerDaemon.java
 (added)
+++ 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/daemon/AxisServerDaemon.java
 Tue Dec 11 17:26:34 2012
@@ -0,0 +1,52 @@
+/*
+ * 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.axis.server.standalone.daemon;
+
+import org.apache.axis.server.standalone.StandaloneAxisServer;
+import org.apache.axis.server.standalone.cli.Configurator;
+import org.apache.commons.daemon.Daemon;
+import org.apache.commons.daemon.DaemonContext;
+import org.apache.commons.daemon.DaemonInitException;
+
+/**
+ * {@link Daemon} implementation that runs the stand-alone Axis server.
+ * 
+ * @author Andreas Veithen
+ */
+public class AxisServerDaemon implements Daemon {
+    private StandaloneAxisServer server;
+    
+    public void init(DaemonContext context) throws DaemonInitException, 
Exception {
+        server = new StandaloneAxisServer();
+        Configurator.INSTANCE.configure(server, context.getArguments());
+        server.init();
+    }
+
+    public void start() throws Exception {
+        server.start();
+    }
+
+    public void stop() throws Exception {
+        server.stop();
+    }
+
+    public void destroy() {
+        server = null;
+    }
+}

Propchange: 
axis/axis1/java/trunk/axis-standalone-server/src/main/java/org/apache/axis/server/standalone/daemon/AxisServerDaemon.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: axis/axis1/java/trunk/distribution/pom.xml
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/distribution/pom.xml?rev=1420298&r1=1420297&r2=1420298&view=diff
==============================================================================
--- axis/axis1/java/trunk/distribution/pom.xml (original)
+++ axis/axis1/java/trunk/distribution/pom.xml Tue Dec 11 17:26:34 2012
@@ -48,6 +48,11 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>axis-standalone-server</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>

Modified: axis/axis1/java/trunk/maven/maven-axis-server-plugin/pom.xml
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/maven/maven-axis-server-plugin/pom.xml?rev=1420298&r1=1420297&r2=1420298&view=diff
==============================================================================
--- axis/axis1/java/trunk/maven/maven-axis-server-plugin/pom.xml (original)
+++ axis/axis1/java/trunk/maven/maven-axis-server-plugin/pom.xml Tue Dec 11 
17:26:34 2012
@@ -41,10 +41,6 @@
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
-            <artifactId>axis-rt-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>${project.groupId}</groupId>
             <artifactId>axis-model</artifactId>
             <version>${project.version}</version>
         </dependency>

Copied: 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractDaemonControlMojo.java
 (from r1419001, 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractServerMojo.java)
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractDaemonControlMojo.java?p2=axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractDaemonControlMojo.java&p1=axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractServerMojo.java&r1=1419001&r2=1420298&rev=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractServerMojo.java
 (original)
+++ 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractDaemonControlMojo.java
 Tue Dec 11 17:26:34 2012
@@ -24,7 +24,7 @@ import org.apache.maven.plugin.MojoFailu
 
 import com.github.veithen.ulog.PlexusLoggerInjector;
 
-public abstract class AbstractServerMojo extends AbstractMojo {
+public abstract class AbstractDaemonControlMojo extends AbstractMojo {
     /**
      * @component
      */
@@ -35,7 +35,7 @@ public abstract class AbstractServerMojo
     /**
      * @component
      */
-    private ProcessManager processManager;
+    private DaemonManager daemonManager;
 
     /**
      * Set this to <code>true</code> to skip running tests, but still compile 
them. This is the same
@@ -45,8 +45,8 @@ public abstract class AbstractServerMojo
      */
     private boolean skipTests;
     
-    public ProcessManager getProcessManager() {
-        return processManager;
+    public final DaemonManager getDaemonManager() {
+        return daemonManager;
     }
 
     public final void execute() throws MojoExecutionException, 
MojoFailureException {

Copied: 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractStartDaemonMojo.java
 (from r1419166, 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractStartProcessMojo.java)
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractStartDaemonMojo.java?p2=axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractStartDaemonMojo.java&p1=axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractStartProcessMojo.java&r1=1419166&r2=1420298&rev=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractStartProcessMojo.java
 (original)
+++ 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractStartDaemonMojo.java
 Tue Dec 11 17:26:34 2012
@@ -19,6 +19,8 @@
 package org.apache.axis.tools.maven.server;
 
 import java.io.File;
+import java.io.IOException;
+import java.net.ServerSocket;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -51,7 +53,7 @@ import org.codehaus.plexus.logging.LogEn
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
 
-public abstract class AbstractStartProcessMojo extends AbstractServerMojo 
implements LogEnabled {
+public abstract class AbstractStartDaemonMojo extends 
AbstractDaemonControlMojo implements LogEnabled {
     /**
      * The maven project.
      *
@@ -171,14 +173,10 @@ public abstract class AbstractStartProce
     
     private Logger logger;
     
-    public void enableLogging(Logger logger) {
+    public final void enableLogging(Logger logger) {
         this.logger = logger;
     }
     
-    protected boolean isDebug() {
-        return debug;
-    }
-
     protected final void addDependency(String groupId, String artifactId, 
String version) {
         additionalDependencies.add(artifactFactory.createArtifact(groupId, 
artifactId, version, Artifact.SCOPE_TEST, "jar"));
         classpath = null;
@@ -244,7 +242,18 @@ public abstract class AbstractStartProce
         return classpath;
     }
     
-    protected final void startJavaProcess(String description, String 
mainClass, String[] args, File workDir, ProcessControl processControl) throws 
MojoExecutionException, MojoFailureException {
+    private int allocatePort() throws MojoFailureException {
+        try {
+            ServerSocket ss = new ServerSocket(0);
+            int port = ss.getLocalPort();
+            ss.close();
+            return port;
+        } catch (IOException ex) {
+            throw new MojoFailureException("Failed to allocate port number", 
ex);
+        }
+    }
+    
+    protected final void startDaemon(String description, String daemonClass, 
String[] args, File workDir) throws MojoExecutionException, 
MojoFailureException {
         Log log = getLog();
         
         // Locate java executable to use
@@ -259,6 +268,8 @@ public abstract class AbstractStartProce
             log.debug("Java executable: " + jvm);
         }
         
+        int controlPort = allocatePort();
+        
         // Get class path
         List classpath;
         try {
@@ -290,14 +301,16 @@ public abstract class AbstractStartProce
         cmdline.add("-cp");
         cmdline.add(StringUtils.join(classpath.iterator(), 
File.pathSeparator));
         cmdline.addAll(vmArgs);
-        cmdline.add(mainClass);
+        cmdline.add("org.apache.axis.tools.daemon.Launcher");
+        cmdline.add(daemonClass);
+        cmdline.add(String.valueOf(controlPort));
         cmdline.addAll(Arrays.asList(args));
         try {
-            getProcessManager().startProcess(
+            getDaemonManager().startDaemon(
                     description,
                     (String[])cmdline.toArray(new String[cmdline.size()]),
                     workDir,
-                    processControl);
+                    controlPort);
         } catch (Exception ex) {
             throw new MojoFailureException("Failed to start server", ex);
         }
@@ -306,4 +319,11 @@ public abstract class AbstractStartProce
     private static void processVMArgs(List vmArgs, String args) {
         vmArgs.addAll(Arrays.asList(args.split(" ")));
     }
+
+    protected final void doExecute() throws MojoExecutionException, 
MojoFailureException {
+        addAxisDependency("daemon-launcher");
+        doStartDaemon();
+    }
+    
+    protected abstract void doStartDaemon() throws MojoExecutionException, 
MojoFailureException;
 }

Copied: 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DaemonManager.java
 (from r1419001, 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/ProcessManager.java)
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DaemonManager.java?p2=axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DaemonManager.java&p1=axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/ProcessManager.java&r1=1419001&r2=1420298&rev=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/ProcessManager.java
 (original)
+++ 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DaemonManager.java
 Tue Dec 11 17:26:34 2012
@@ -20,7 +20,7 @@ package org.apache.axis.tools.maven.serv
 
 import java.io.File;
 
-public interface ProcessManager {
-    void startProcess(String description, String[] cmdline, File workDir, 
ProcessControl processControl) throws Exception;
+public interface DaemonManager {
+    void startDaemon(String description, String[] cmdline, File workDir, int 
controlPort) throws Exception;
     void stopAll() throws Exception;
 }

Copied: 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DefaultDaemonManager.java
 (from r1419001, 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DefaultProcessManager.java)
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DefaultDaemonManager.java?p2=axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DefaultDaemonManager.java&p1=axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DefaultProcessManager.java&r1=1419001&r2=1420298&rev=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DefaultProcessManager.java
 (original)
+++ 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/DefaultDaemonManager.java
 Tue Dec 11 17:26:34 2012
@@ -27,8 +27,8 @@ import java.util.List;
 import org.codehaus.plexus.logging.LogEnabled;
 import org.codehaus.plexus.logging.Logger;
 
-public class DefaultProcessManager implements ProcessManager, LogEnabled {
-    private final List managedProcesses = new ArrayList();
+public class DefaultDaemonManager implements DaemonManager, LogEnabled {
+    private final List daemons = new ArrayList();
     
     private Logger logger;
     
@@ -36,44 +36,48 @@ public class DefaultProcessManager imple
         this.logger = logger;
     }
 
-    public void startProcess(String description, String[] cmdline, File 
workDir, ProcessControl processControl) throws Exception {
+    public void startDaemon(String description, String[] cmdline, File 
workDir, int controlPort) throws Exception {
         if (logger.isDebugEnabled()) {
             logger.debug("Starting process with command line: " + 
Arrays.asList(cmdline));
         }
         Process process = Runtime.getRuntime().exec(cmdline, null, workDir);
-        managedProcesses.add(new ManagedProcess(process, description, 
processControl));
+        RemoteDaemon daemon = new RemoteDaemon(process, description, 
controlPort);
+        daemons.add(daemon);
         new Thread(new StreamPump(process.getInputStream(), 
System.out)).start();
         new Thread(new StreamPump(process.getErrorStream(), 
System.err)).start();
-        processControl.initializeProcess(logger, process);
+        daemon.startDaemon(logger);
     }
     
     public void stopAll() throws Exception {
         Exception savedException = null;
-        for (Iterator it = managedProcesses.iterator(); it.hasNext(); ) {
-            ManagedProcess managedProcess = (ManagedProcess)it.next();
-            int result;
-            logger.debug("Executing stop action");
+        for (Iterator it = daemons.iterator(); it.hasNext(); ) {
+            RemoteDaemon daemon = (RemoteDaemon)it.next();
+            if (logger.isDebugEnabled()) {
+                logger.debug("Stopping " + daemon.getDescription());
+            }
+            boolean success;
             try {
-                result = 
managedProcess.getProcessControl().shutdownProcess(logger);
+                daemon.stopDaemon(logger);
+                success = true;
             } catch (Exception ex) {
                 if (savedException == null) {
                     savedException = ex;
                 }
-                result = -1;
+                success = false;
             }
             if (logger.isDebugEnabled()) {
-                logger.debug("result = " + result);
+                logger.debug("success = " + success);
             }
-            if (result == ProcessControl.STOPPING) {
-                managedProcess.getProcess().waitFor();
+            if (success) {
+                daemon.getProcess().waitFor();
             } else {
-                managedProcess.getProcess().destroy();
+                daemon.getProcess().destroy();
             }
-            logger.info(managedProcess.getDescription() + " stopped");
+            logger.info(daemon.getDescription() + " stopped");
         }
         // TODO: need to clear the collection because the same ServerManager 
instance may be used by multiple projects in a reactor build;
         //       note that this means that the plugin is not thread safe (i.e. 
doesn't support parallel builds in Maven 3)
-        managedProcesses.clear();
+        daemons.clear();
         if (savedException != null) {
             throw savedException;
         }

Copied: 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/RemoteDaemon.java
 (from r1419001, 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/ManagedProcess.java)
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/RemoteDaemon.java?p2=axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/RemoteDaemon.java&p1=axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/ManagedProcess.java&r1=1419001&r2=1420298&rev=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/ManagedProcess.java
 (original)
+++ 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/RemoteDaemon.java
 Tue Dec 11 17:26:34 2012
@@ -18,15 +18,27 @@
  */
 package org.apache.axis.tools.maven.server;
 
-public class ManagedProcess {
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.net.InetAddress;
+import java.net.Socket;
+
+import org.codehaus.plexus.logging.Logger;
+
+public class RemoteDaemon {
     private final Process process;
     private final String description;
-    private final ProcessControl processControl;
+    private final int controlPort;
+    private BufferedReader controlIn;
+    private Writer controlOut;
 
-    public ManagedProcess(Process process, String description, ProcessControl 
processControl) {
+    public RemoteDaemon(Process process, String description, int controlPort) {
         this.process = process;
         this.description = description;
-        this.processControl = processControl;
+        this.controlPort = controlPort;
     }
 
     public Process getProcess() {
@@ -37,7 +49,43 @@ public class ManagedProcess {
         return description;
     }
 
-    public ProcessControl getProcessControl() {
-        return processControl;
+    public void startDaemon(Logger logger) throws Exception {
+        logger.debug("Attempting to establish control connection on port " + 
controlPort);
+        Socket controlSocket;
+        while (true) {
+            try {
+                controlSocket = new Socket(InetAddress.getByName("localhost"), 
controlPort);
+                break;
+            } catch (IOException ex) {
+                try {
+                    int exitValue = process.exitValue();
+                    throw new IllegalStateException("Process terminated 
prematurely with exit code " + exitValue);
+                } catch (IllegalThreadStateException ex2) {
+                    // Process is still running; continue
+                }
+                Thread.sleep(100);
+            }
+        }
+        logger.debug("Control connection established");
+        controlIn = new BufferedReader(new 
InputStreamReader(controlSocket.getInputStream(), "ASCII"));
+        controlOut = new OutputStreamWriter(controlSocket.getOutputStream(), 
"ASCII");
+        logger.debug("Waiting for daemon to become ready");
+        expectStatus("READY");
+        logger.debug("Daemon is ready");
+    }
+
+    public void stopDaemon(Logger logger) throws Exception {
+        controlOut.write("STOP\r\n");
+        controlOut.flush();
+        expectStatus("STOPPED");
+    }
+    
+    private void expectStatus(String expectedStatus) throws IOException {
+        String status = controlIn.readLine();
+        if (status == null) {
+            throw new IllegalStateException("Control connection unexpectedly 
closed");
+        } else if (!status.equals(expectedStatus)) {
+            throw new IllegalStateException("Unexpected status: " + status);
+        }
     }
 }

Modified: 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StartDaemonMojo.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StartDaemonMojo.java?rev=1420298&r1=1420297&r2=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StartDaemonMojo.java
 (original)
+++ 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StartDaemonMojo.java
 Tue Dec 11 17:26:34 2012
@@ -19,8 +19,6 @@
 package org.apache.axis.tools.maven.server;
 
 import java.io.File;
-import java.io.IOException;
-import java.net.ServerSocket;
 
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -32,7 +30,7 @@ import org.apache.maven.plugin.MojoFailu
  * @phase pre-integration-test
  * @requiresDependencyResolution test
  */
-public class StartDaemonMojo extends AbstractStartProcessMojo {
+public class StartDaemonMojo extends AbstractStartDaemonMojo {
     /**
      * The daemon class.
      * 
@@ -56,23 +54,8 @@ public class StartDaemonMojo extends Abs
      */
     private File workDir;
 
-    protected void doExecute() throws MojoExecutionException, 
MojoFailureException {
-        int controlPort;
-        try {
-            ServerSocket ss = new ServerSocket(0);
-            controlPort = ss.getLocalPort();
-            ss.close();
-        } catch (IOException ex) {
-            throw new MojoFailureException("Failed to allocate port number", 
ex);
-        }
+    protected void doStartDaemon() throws MojoExecutionException, 
MojoFailureException {
         workDir.mkdirs();
-        String[] vmArgs = new String[args != null ? args.length + 2 : 2];
-        vmArgs[0] = daemonClass;
-        vmArgs[1] = String.valueOf(controlPort);
-        if (args != null) {
-            System.arraycopy(args, 0, vmArgs, 2, args.length);
-        }
-        addAxisDependency("daemon-launcher");
-        startJavaProcess(daemonClass, "org.apache.axis.tools.daemon.Launcher", 
vmArgs, workDir, new DaemonProcessControl(controlPort));
+        startDaemon(daemonClass, daemonClass, args, workDir);
     }
 }

Modified: 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StartServerMojo.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StartServerMojo.java?rev=1420298&r1=1420297&r2=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StartServerMojo.java
 (original)
+++ 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StartServerMojo.java
 Tue Dec 11 17:26:34 2012
@@ -27,7 +27,6 @@ import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.axis.client.AdminClient;
 import org.apache.axis.model.wsdd.Deployment;
 import org.apache.axis.model.wsdd.WSDDUtil;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -46,7 +45,7 @@ import org.xml.sax.InputSource;
  * @phase pre-integration-test
  * @requiresDependencyResolution test
  */
-public class StartServerMojo extends AbstractStartProcessMojo {
+public class StartServerMojo extends AbstractStartDaemonMojo {
     /**
      * @parameter default-value="${project.build.directory}/axis-server"
      * @required
@@ -114,7 +113,7 @@ public class StartServerMojo extends Abs
      */
     private int foregroundPort = -1;
     
-    protected void doExecute() throws MojoExecutionException, 
MojoFailureException {
+    protected void doStartDaemon() throws MojoExecutionException, 
MojoFailureException {
         Log log = getLog();
         
         // Need to setup additional dependencies before building the default 
configuration!
@@ -209,15 +208,11 @@ public class StartServerMojo extends Abs
         args.add("-m");
         args.add(String.valueOf(maxSessions));
         try {
-            AdminClient adminClient = new AdminClient(true);
-            adminClient.setTargetEndpointAddress(new URL("http://localhost:"; + 
actualPort + "/axis/services/AdminService"));
-            startJavaProcess(
+            startDaemon(
                     "Server on port " + actualPort,
-                    "org.apache.axis.server.standalone.StandaloneAxisServer",
+                    
"org.apache.axis.server.standalone.daemon.AxisServerDaemon",
                     (String[])args.toArray(new String[args.size()]),
-                    workDir,
-                    new AxisServerProcessControl(actualPort, adminClient,
-                            isDebug() || foreground ? Integer.MAX_VALUE : 
20000));
+                    workDir);
         } catch (Exception ex) {
             throw new MojoFailureException("Failed to start server", ex);
         }

Modified: 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StopAllMojo.java
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StopAllMojo.java?rev=1420298&r1=1420297&r2=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StopAllMojo.java
 (original)
+++ 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StopAllMojo.java
 Tue Dec 11 17:26:34 2012
@@ -27,10 +27,10 @@ import org.apache.maven.plugin.MojoFailu
  * @goal stop-all
  * @phase post-integration-test
  */
-public class StopAllMojo extends AbstractServerMojo {
+public class StopAllMojo extends AbstractDaemonControlMojo {
     protected void doExecute() throws MojoExecutionException, 
MojoFailureException {
         try {
-            getProcessManager().stopAll();
+            getDaemonManager().stopAll();
         } catch (Exception ex) {
             throw new MojoFailureException("Errors occurred while attempting 
to stop processes", ex);
         }

Modified: 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/resources/META-INF/plexus/components.xml
URL: 
http://svn.apache.org/viewvc/axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/resources/META-INF/plexus/components.xml?rev=1420298&r1=1420297&r2=1420298&view=diff
==============================================================================
--- 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/resources/META-INF/plexus/components.xml
 (original)
+++ 
axis/axis1/java/trunk/maven/maven-axis-server-plugin/src/main/resources/META-INF/plexus/components.xml
 Tue Dec 11 17:26:34 2012
@@ -20,8 +20,8 @@
 <component-set>
     <components>
         <component>
-            <role>org.apache.axis.tools.maven.server.ProcessManager</role>
-            
<implementation>org.apache.axis.tools.maven.server.DefaultProcessManager</implementation>
+            <role>org.apache.axis.tools.maven.server.DaemonManager</role>
+            
<implementation>org.apache.axis.tools.maven.server.DefaultDaemonManager</implementation>
         </component>
     </components>
 </component-set>
\ No newline at end of file


Reply via email to