[commons-daemon] 40/52: Imported Upstream version 1.0.10

Tony Mancill tmancill at moszumanska.debian.org
Wed Nov 12 05:31:32 UTC 2014


This is an automated email from the git hooks/post-receive script.

tmancill pushed a commit to branch master
in repository commons-daemon.

commit 281cdb031791f41395c09b9c8b8216a88e634ac2
Author: tony mancill <tmancill at debian.org>
Date:   Fri Nov 7 07:59:37 2014 -0800

    Imported Upstream version 1.0.10
---
 NOTICE.txt                                         |   2 +-
 RELEASE-NOTES.txt                                  |  27 +-
 build.xml                                          |   6 +-
 pom.xml                                            |   7 +-
 src/main/assembly/src.xml                          |   2 +
 src/main/assembly/{src.xml => win.xml}             |  37 +-
 .../java/org/apache/commons/daemon/Daemon.java     |  12 +-
 .../org/apache/commons/daemon/DaemonContext.java   |   2 +-
 .../apache/commons/daemon/DaemonController.java    |  16 +-
 .../apache/commons/daemon/DaemonInitException.java |   1 +
 .../org/apache/commons/daemon/DaemonListener.java  |   2 +-
 .../apache/commons/daemon/DaemonPermission.java    |  26 +-
 .../apache/commons/daemon/DaemonUserSignal.java    |   5 +-
 .../daemon/support/DaemonConfiguration.java        |   9 +-
 .../commons/daemon/support/DaemonLoader.java       |   4 +-
 .../commons/daemon/support/DaemonWrapper.java      |   4 +-
 src/media/logo.xcf                                 | Bin 0 -> 23803 bytes
 src/native/unix/CHANGES.txt                        |   9 +-
 src/native/unix/configure                          | 661 +++++++++++++++++++-
 src/native/unix/configure.in                       |   6 +-
 src/native/unix/native/jsvc-unix.c                 | 170 +++--
 src/native/unix/native/version.h                   |   2 +-
 src/native/windows/README                          |  70 ++-
 src/native/windows/README.dev                      |  63 --
 src/native/windows/apps/prunmgr/Makefile           |   9 +-
 src/native/windows/apps/prunmgr/prunmgr.h          |   2 +-
 src/native/windows/apps/prunmgr/prunmgr.rc         |  10 +-
 src/native/windows/apps/prunsrv/Makefile           |   9 +-
 src/native/windows/apps/prunsrv/prunsrv.c          |   8 +-
 src/native/windows/apps/prunsrv/prunsrv.h          |   2 +-
 src/native/windows/apps/prunsrv/prunsrv.rc         |   6 +-
 src/native/windows/include/cmdline.h               |   4 +-
 src/native/windows/src/cmdline.c                   |  17 +-
 src/native/windows/src/utils.c                     |   6 +-
 src/samples/AloneDaemon.sh                         |   2 +-
 src/samples/Native.sh                              |  32 +-
 src/site/resources/images/logo.gif                 | Bin 0 -> 4540 bytes
 src/site/resources/images/logo.png                 | Bin 0 -> 14782 bytes
 src/site/site.xml                                  |  45 ++
 src/site/xdoc/binaries.xml                         |  83 +++
 src/site/xdoc/download_daemon.xml                  | 154 +++++
 src/site/xdoc/faq.xml                              | 100 +++
 src/site/xdoc/index.xml                            | 115 ++++
 src/site/xdoc/issue-tracking.xml                   | 102 +++
 src/site/xdoc/jsvc.xml                             | 314 ++++++++++
 src/site/xdoc/mail-lists.xml                       | 202 ++++++
 src/site/xdoc/procrun.xml                          | 688 +++++++++++++++++++++
 .../org/apache/commons/daemon/SimpleDaemon.java    |   5 +-
 48 files changed, 2767 insertions(+), 291 deletions(-)

diff --git a/NOTICE.txt b/NOTICE.txt
index 8dc87b0..ec34bbc 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -1,5 +1,5 @@
 Apache Commons Daemon
-Copyright 1999-2011 The Apache Software Foundation
+Copyright 1999-2012 The Apache Software Foundation
 
 This product includes software developed by
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 4910ae0..8dcd917 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -1,21 +1,20 @@
-$Id: RELEASE-NOTES.txt 1202656 2011-11-16 12:17:56Z mturk $
-
-            Commons Daemon Package
-               Version 1.0.8
-                Release Notes
+            Apache Commons Daemon
+               Version 1.0.10
+               Release Notes
 
 
 INTRODUCTION:
 
-Commons Daemon is a set of utilities and Java support classes for running
-Java applications as server processes.
+Apache Commons Daemon is a set of utilities and Java support classes
+for running Java applications as server processes.
 Commonly known as 'daemon' processes in Unix terminology (hence the name),
 on Windows they are called 'services'.
 
-This document contains the release notes for this version of the Commons
-Daemon package, and highlights changes since the previous version.  The
-current release adds new features and bug fixes, and is being done now to
-follow the release early/release often mentality.
+This document contains the release notes for this version of the
+Apache Commons Daemon package, and highlights changes since
+the previous version.
+The current release adds new features and bug fixes, and is being done now
+to follow the release early/release often mentality.
 
 
 Compatibility with 1.0.3
@@ -80,6 +79,10 @@ NEW FEATURES:
 
 BUG FIXES:
 
+1.0.10: DAEMON-241, DAEMON-242
+
+1.0.9: DAEMON-232, DAEMON-233, DAEMON-234, DAEMON-237, DAEMON-240
+
 1.0.8: DAEMON-195, DAEMON-215, DAEMON-216, DAEMON-218, DAEMON-219, DAEMON-220,
        DAEMON-222, DAEMON-223, DAEMON-224, DAEMON-227, DAEMON-228
 
@@ -118,4 +121,4 @@ https://issues.apache.org/jira/browse/DAEMON
 Or subscribe to the commons-user mailing list (prefix emails by [daemon])
 http://commons.apache.org/mail-lists.html
 
-The Commons-DAEMON Team
\ No newline at end of file
+The Apache Commons Daemon Team
diff --git a/build.xml b/build.xml
index f1e5cde..3127393 100644
--- a/build.xml
+++ b/build.xml
@@ -19,7 +19,7 @@
 
 <!--
         "Daemon" component of the Apache Commons Subproject
-        $Id: build.xml 1202070 2011-11-15 07:01:42Z mturk $
+        $Id: build.xml 1292700 2012-02-23 08:28:00Z mturk $
 -->
 
 
@@ -59,7 +59,7 @@
   <property name="component.title"         value="Java Daemons"/>
 
   <!-- The current version number of this component -->
-  <property name="component.version"       value="1.0.8"/>
+  <property name="component.version"       value="1.0.10"/>
 
   <!-- The base directory for compilation targets -->
   <property name="build.home"              value="target"/>
@@ -214,7 +214,7 @@
                 version="true"
                doctitle="<h1>${component.title}</h1>"
             windowtitle="${component.title} (Version ${component.version})"
-                 bottom="Copyright (c) 2002-2011 - Apache Software Foundation">
+                 bottom="Copyright (c) 2002-2012 - Apache Software Foundation">
       <classpath refid="compile.classpath"/>
       <classpath location="${ant.lib}/ant.jar"/>
     </javadoc>
diff --git a/pom.xml b/pom.xml
index 8ee9c1b..99c48d5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,12 +22,12 @@
   <parent>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-parent</artifactId>
-    <version>21</version>
+    <version>23</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <groupId>commons-daemon</groupId>
   <artifactId>commons-daemon</artifactId>
-  <version>1.0.8</version>
+  <version>1.0.10</version>
   <name>Commons Daemon</name>
   <!-- Daemon started in Commons in 2002 with an import of code from Tomcat,
        which is why the NOTICE file has an earlier date than the inceptionYear -->
@@ -92,7 +92,7 @@
     <maven.compile.source>1.3</maven.compile.source>
     <maven.compile.target>1.3</maven.compile.target>
     <commons.componentid>daemon</commons.componentid>
-    <commons.release.version>1.0.8</commons.release.version>
+    <commons.release.version>1.0.10</commons.release.version>
     <commons.jira.id>DAEMON</commons.jira.id>
     <commons.jira.pid>12310468</commons.jira.pid>
   </properties>
@@ -120,6 +120,7 @@
             <descriptor>src/main/assembly/native-src.xml</descriptor>
             <descriptor>src/main/assembly/bin.xml</descriptor>
             <descriptor>src/main/assembly/src.xml</descriptor>
+            <descriptor>src/main/assembly/win.xml</descriptor>
           </descriptors>
           <tarLongFileMode>gnu</tarLongFileMode>
         </configuration>
diff --git a/src/main/assembly/src.xml b/src/main/assembly/src.xml
index 0861f60..e6be6f5 100644
--- a/src/main/assembly/src.xml
+++ b/src/main/assembly/src.xml
@@ -41,8 +41,10 @@
                 <exclude>native/unix/configure</exclude>
                 <exclude>native/unix/autom4te.cache/**</exclude>
                 <exclude>native/windows/**</exclude>
+                <!--
                 <exclude>media/**</exclude>
                 <exclude>site/**</exclude>
+                -->
             </excludes>
         </fileSet>
         <fileSet>
diff --git a/src/main/assembly/src.xml b/src/main/assembly/win.xml
similarity index 51%
copy from src/main/assembly/src.xml
copy to src/main/assembly/win.xml
index 0861f60..4511ae9 100644
--- a/src/main/assembly/src.xml
+++ b/src/main/assembly/win.xml
@@ -15,48 +15,27 @@
  limitations under the License.
 -->
 <assembly>
-    <id>src</id>
+    <id>bin-windows</id>
     <formats>
-        <format>tar.gz</format>
         <format>zip</format>
     </formats>
-    <baseDirectory>${project.artifactId}-${project.version}-src</baseDirectory>
+    <baseDirectory></baseDirectory>
+    <includeSiteDirectory>false</includeSiteDirectory>
     <fileSets>
         <fileSet>
             <includes>
-                <include>build.properties.sample</include>
-                <include>build.xml</include>
                 <include>LICENSE.txt</include>
                 <include>NOTICE.txt</include>
-                <include>pom.xml</include>
-                <include>PROPOSAL.html</include>
-                <include>README</include>
                 <include>RELEASE-NOTES.txt</include>
             </includes>
         </fileSet>
         <fileSet>
-            <directory>src</directory>
-            <excludes>
-                <exclude>**/*.sh</exclude>
-                <exclude>native/unix/configure</exclude>
-                <exclude>native/unix/autom4te.cache/**</exclude>
-                <exclude>native/windows/**</exclude>
-                <exclude>media/**</exclude>
-                <exclude>site/**</exclude>
-            </excludes>
-        </fileSet>
-        <fileSet>
-            <directory>src</directory>
-            <includes>
-                <include>native/windows/**</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>src</directory>
-            <fileMode>775</fileMode>
+            <directory>target</directory>
+            <outputDirectory></outputDirectory>
             <includes>
-                <include>**/*.sh</include>
-                <include>native/unix/configure</include>
+                <include>*.exe</include>
+                <include>amd64/*.exe</include>
+                <include>ia64/*.exe</include>
             </includes>
         </fileSet>
     </fileSets>
diff --git a/src/main/java/org/apache/commons/daemon/Daemon.java b/src/main/java/org/apache/commons/daemon/Daemon.java
index 14b8f3c..f849799 100644
--- a/src/main/java/org/apache/commons/daemon/Daemon.java
+++ b/src/main/java/org/apache/commons/daemon/Daemon.java
@@ -18,7 +18,7 @@
 package org.apache.commons.daemon;
 
 /**
- * This interface provides support for native daemon invocation. Using
+ * Provides support for native daemon invocation. Using
  * a platform dependant helper program, classes that implement the
  * <code>Daemon</code> interface can be initialized, started and
  * stopped according to the conventions of the underlying operating
@@ -29,13 +29,13 @@ package org.apache.commons.daemon;
  * fashion.
  * </p>
  * @author Pier Fumagalli
- * @version 1.0 <i>(CVS $Revision: 1023303 $)</i>
+ * @version $Id: Daemon.java 1204010 2011-11-19 16:15:23Z ggregory $
  */
 public interface Daemon
 {
 
     /**
-     * Initialize this <code>Daemon</code> instance.
+     * Initializes this <code>Daemon</code> instance.
      * <p>
      *   This method gets called once the JVM process is created and the
      *   <code>Daemon</code> instance is created thru its empty public
@@ -73,7 +73,7 @@ public interface Daemon
         throws DaemonInitException, Exception;
 
     /**
-     * Start the operation of this <code>Daemon</code> instance. This
+     * Starts the operation of this <code>Daemon</code> instance. This
      * method is to be invoked by the environment after the init()
      * method has been successfully invoked and possibly the security
      * level of the JVM has been dropped. Implementors of this
@@ -85,7 +85,7 @@ public interface Daemon
         throws Exception;
 
     /**
-     * Stop the operation of this <code>Daemon</code> instance. Note
+     * Stops the operation of this <code>Daemon</code> instance. Note
      * that the proper place to free any allocated resources such as
      * sockets or file descriptors is in the destroy method, as the
      * container may restart the Daemon by calling start() after
@@ -95,7 +95,7 @@ public interface Daemon
         throws Exception;
 
     /**
-     * Free any resources allocated by this daemon such as file
+     * Frees any resources allocated by this daemon such as file
      * descriptors or sockets. This method gets called by the container
      * after stop() has been called, before the JVM exits. The Daemon
      * can not be restarted after this method has been called without a
diff --git a/src/main/java/org/apache/commons/daemon/DaemonContext.java b/src/main/java/org/apache/commons/daemon/DaemonContext.java
index 1679a3b..cf749ef 100644
--- a/src/main/java/org/apache/commons/daemon/DaemonContext.java
+++ b/src/main/java/org/apache/commons/daemon/DaemonContext.java
@@ -23,7 +23,7 @@ package org.apache.commons.daemon;
  * communicate with the Daemon container.
  *
  * @author Pier Fumagalli
- * @version 1.0 <i>(SVN $Revision: 923123 $)</i>
+ * @version $Id: DaemonContext.java 1204006 2011-11-19 16:09:15Z ggregory $
  */
 public interface DaemonContext
 {
diff --git a/src/main/java/org/apache/commons/daemon/DaemonController.java b/src/main/java/org/apache/commons/daemon/DaemonController.java
index e6e0ae5..7a37ee4 100644
--- a/src/main/java/org/apache/commons/daemon/DaemonController.java
+++ b/src/main/java/org/apache/commons/daemon/DaemonController.java
@@ -19,46 +19,46 @@ package org.apache.commons.daemon;
 
 
 /**
- * Interface which defines methods needed by the DaemonLoader.
+ * Defines methods needed by the DaemonLoader.
  * 
  * @author Pier Fumagalli
- * @version 1.0 <i>(SVN $Revision: 925054 $)</i>
+ * @version $Id: DaemonController.java 1204010 2011-11-19 16:15:23Z ggregory $
  */
 public interface DaemonController
 {
 
     /**
-     * Shutdown the daemon.     
+     * Shuts down the daemon.     
      */
     public void shutdown()
         throws IllegalStateException;
 
     /**
-     * Reload daemon
+     * Reloads daemon
      */
     public void reload()
         throws IllegalStateException;
 
     /**
-     * Shudown daemon and log failed message.
+     * Shuts down daemon and logs failed message.
      */
     public void fail()
         throws IllegalStateException;
 
     /**
-     * Shudown daemon and log failed message.
+     * Shuts down daemon and logs failed message.
      */
     public void fail(String message)
         throws IllegalStateException;
 
     /**
-     * Shudown daemon and log failed message.
+     * Shuts down daemon and logs failed message.
      */
     public void fail(Exception exception)
         throws IllegalStateException;
 
     /**
-     * Shudown daemon and log failed message.
+     * Shuts down daemon and logs failed message.
      */
     public void fail(String message, Exception exception)
         throws IllegalStateException;
diff --git a/src/main/java/org/apache/commons/daemon/DaemonInitException.java b/src/main/java/org/apache/commons/daemon/DaemonInitException.java
index ddc29ac..74716b7 100644
--- a/src/main/java/org/apache/commons/daemon/DaemonInitException.java
+++ b/src/main/java/org/apache/commons/daemon/DaemonInitException.java
@@ -21,6 +21,7 @@ package org.apache.commons.daemon;
  * reason.  Using this exception will cause the exception's message to come out
  * on stdout, rather than a dirty great stacktrace.
  * @author Nick Griffiths (nicobrevin at gmail.com)
+ * @version $Id: DaemonInitException.java 1204007 2011-11-19 16:10:29Z ggregory $
  */
 public class DaemonInitException extends Exception {
 
diff --git a/src/main/java/org/apache/commons/daemon/DaemonListener.java b/src/main/java/org/apache/commons/daemon/DaemonListener.java
index 6fa38de..206ad3b 100644
--- a/src/main/java/org/apache/commons/daemon/DaemonListener.java
+++ b/src/main/java/org/apache/commons/daemon/DaemonListener.java
@@ -21,7 +21,7 @@ import java.util.EventListener;
 
 /**
  * EvenListener type wrapper.
- * @version 1.0 <i>(SVN $Revision: 923123 $)</i>
+ * @version $Id: DaemonListener.java 1204006 2011-11-19 16:09:15Z ggregory $
  */
 public interface DaemonListener extends EventListener
 {
diff --git a/src/main/java/org/apache/commons/daemon/DaemonPermission.java b/src/main/java/org/apache/commons/daemon/DaemonPermission.java
index c3531b9..63e8280 100644
--- a/src/main/java/org/apache/commons/daemon/DaemonPermission.java
+++ b/src/main/java/org/apache/commons/daemon/DaemonPermission.java
@@ -21,7 +21,7 @@ import java.security.Permission;
 import java.util.StringTokenizer;
 
 /**
- * This class represents the permissions to control and query the status of
+ * Represents the permissions to control and query the status of
  * a <code>Daemon</code>. A <code>DaemonPermission</code> consists of a
  * target name and a list of actions associated with it.
  * <p>
@@ -83,7 +83,7 @@ import java.util.StringTokenizer;
  * </p>
  *
  * @author Pier Fumagalli
- * @version 1.0 <i>(SVN $Revision: 937348 $)</i>
+ * @version $Id: DaemonPermission.java 1204010 2011-11-19 16:15:23Z ggregory $
  */
 public final class DaemonPermission extends Permission
 {
@@ -173,7 +173,7 @@ public final class DaemonPermission extends Permission
      */
 
     /**
-     * Create a new <code>DaemonPermission</code> instance with a specified
+     * Creates a new <code>DaemonPermission</code> instance with a specified
      * permission name.
      * <p>
      * This constructor will create a new <code>DaemonPermission</code>
@@ -205,7 +205,7 @@ public final class DaemonPermission extends Permission
     }
 
     /**
-     * Create a new <code>DaemonPermission</code> instance with a specified
+     * Creates a new <code>DaemonPermission</code> instance with a specified
      * permission name and a specified list of actions.
      * <p>
      * </p>
@@ -234,7 +234,7 @@ public final class DaemonPermission extends Permission
      */
 
     /**
-     * Return the list of actions permitted by this instance of
+     * Returns the list of actions permitted by this instance of
      * <code>DaemonPermission</code> in its canonical form.
      *
      * @return The canonicalized list of actions.
@@ -248,7 +248,7 @@ public final class DaemonPermission extends Permission
     }
 
     /**
-     * Return the hash code for this <code>DaemonPermission</code> instance.
+     * Returns the hash code for this <code>DaemonPermission</code> instance.
      *
      * @return An hash code value.
      */
@@ -259,7 +259,7 @@ public final class DaemonPermission extends Permission
     }
 
     /**
-     * Check if a specified object equals <code>DaemonPermission</code>.
+     * Checks if a specified object equals <code>DaemonPermission</code>.
      *
      * @return <b>true</b> or <b>false</b> wether the specified object equals
      *         this <code>DaemonPermission</code> instance or not.
@@ -280,7 +280,7 @@ public final class DaemonPermission extends Permission
     }
 
     /**
-     * Check if this <code>DaemonPermission</code> implies another
+     * Checks if this <code>DaemonPermission</code> implies another
      * <code>Permission</code>.
      *
      * @return <b>true</b> or <b>false</b> wether the specified permission
@@ -303,7 +303,7 @@ public final class DaemonPermission extends Permission
     }
 
     /**
-     * Return a <code>String</code> representation of this instance.
+     * Returns a <code>String</code> representation of this instance.
      *
      * @return A <code>String</code> representing this
      *         <code>DaemonPermission</code> instance.
@@ -318,7 +318,8 @@ public final class DaemonPermission extends Permission
      * Private methods
      */
 
-    /** Create a String description for this permission instance.
+    /** 
+     * Creates a String description for this permission instance.
      */
     private void setupDescription()
     {
@@ -343,7 +344,8 @@ public final class DaemonPermission extends Permission
         this.desc = buf.toString();
     }
 
-    /** Create a permission mask for a given control actions string.
+    /** 
+     * Creates a permission mask for a given control actions string.
      */
     private int createControlMask(String actions)
         throws IllegalArgumentException
@@ -381,7 +383,7 @@ public final class DaemonPermission extends Permission
         return mask;
     }
 
-    /** Create a actions list for a given control permission mask. */
+    /** Creates a actions list for a given control permission mask. */
     private String createControlActions(int mask)
     {
         StringBuffer buf = new StringBuffer();
diff --git a/src/main/java/org/apache/commons/daemon/DaemonUserSignal.java b/src/main/java/org/apache/commons/daemon/DaemonUserSignal.java
index e0ed152..b678c5c 100644
--- a/src/main/java/org/apache/commons/daemon/DaemonUserSignal.java
+++ b/src/main/java/org/apache/commons/daemon/DaemonUserSignal.java
@@ -18,7 +18,7 @@
 package org.apache.commons.daemon;
 
 /**
- * This interface tags a Daemon as supporting some kind of
+ * Tags a Daemon as supporting some kind of
  * signaling method that allows the java application to
  * perform a custom action.
  * <p>
@@ -27,12 +27,13 @@ package org.apache.commons.daemon;
  * </p>
  * @author Nick Griffiths <nicobrevin at gmail.com>
  * @author Mladen Turk <mturk at apache.org>
+ * @version $Id: DaemonUserSignal.java 1204010 2011-11-19 16:15:23Z ggregory $
  */
 public interface DaemonUserSignal
 {
 
     /**
-     * Perform a custom action on received user signal.
+     * Performs a custom action on received user signal.
      */
     void signal();
 
diff --git a/src/main/java/org/apache/commons/daemon/support/DaemonConfiguration.java b/src/main/java/org/apache/commons/daemon/support/DaemonConfiguration.java
index d7f5a4f..014b0c0 100644
--- a/src/main/java/org/apache/commons/daemon/support/DaemonConfiguration.java
+++ b/src/main/java/org/apache/commons/daemon/support/DaemonConfiguration.java
@@ -45,7 +45,7 @@ import java.text.ParseException;
  * value will be <code>${foo}</code>.
  * </p>
  *
- * @version 1.0 <i>(SVN $Revision: 925053 $)</i>
+ * @version $Id: DaemonConfiguration.java 1204010 2011-11-19 16:15:23Z ggregory $
  * @author Mladen Turk
  */
 public final class DaemonConfiguration
@@ -75,7 +75,7 @@ public final class DaemonConfiguration
     }
 
     /**
-     * Load the configuration properties file.
+     * Loads the configuration properties file.
      *
      * @param fileName The properties file to load.
      * @return <code>true</code> if the file was loaded.
@@ -155,7 +155,8 @@ public final class DaemonConfiguration
     }
 
     /**
-     * Get the configuration property.
+     * Gets the configuration property.
+     * 
      * @param name The name of the property to get.
      *
      * @throws ParseException if the property is wrongly formatted.
@@ -170,7 +171,7 @@ public final class DaemonConfiguration
     }
 
     /**
-     * Get the configuration property array.
+     * Gets the configuration property array.
      * <p>
      * Property array is constructed form the lsit of properties
      * which end with <code>[index]</code>
diff --git a/src/main/java/org/apache/commons/daemon/support/DaemonLoader.java b/src/main/java/org/apache/commons/daemon/support/DaemonLoader.java
index 1823fd5..6b498bd 100644
--- a/src/main/java/org/apache/commons/daemon/support/DaemonLoader.java
+++ b/src/main/java/org/apache/commons/daemon/support/DaemonLoader.java
@@ -24,10 +24,10 @@ import org.apache.commons.daemon.DaemonInitException;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
-/*
+/**
  * Used by jsvc for Daemon management.
  *
- * @version 1.0 <i>(SVN $Revision: 1130635 $)</i>
+ * @version $Id: DaemonLoader.java 1204006 2011-11-19 16:09:15Z ggregory $
  */
 public final class DaemonLoader
 {
diff --git a/src/main/java/org/apache/commons/daemon/support/DaemonWrapper.java b/src/main/java/org/apache/commons/daemon/support/DaemonWrapper.java
index b7e1cc0..6ee4291 100644
--- a/src/main/java/org/apache/commons/daemon/support/DaemonWrapper.java
+++ b/src/main/java/org/apache/commons/daemon/support/DaemonWrapper.java
@@ -15,7 +15,7 @@
  *  limitations under the License.
  */
 
-/* @version $Id: Main.java 937350 2010-04-23 16:03:39Z mturk $ */
+/* @version $Id: DaemonWrapper.java 1204007 2011-11-19 16:10:29Z ggregory $ */
 
 package org.apache.commons.daemon.support;
 
@@ -31,7 +31,7 @@ import org.apache.commons.daemon.DaemonContext;
  * The applications must have the mechanism to manage
  * the application lifecycle.
  *
- * @version 1.0 <i>(SVN $Revision: 925053 $)</i>
+ * @version $Id: DaemonWrapper.java 1204007 2011-11-19 16:10:29Z ggregory $
  * @author Mladen Turk
  */
 public class DaemonWrapper implements Daemon
diff --git a/src/media/logo.xcf b/src/media/logo.xcf
new file mode 100644
index 0000000..8ff7654
Binary files /dev/null and b/src/media/logo.xcf differ
diff --git a/src/native/unix/CHANGES.txt b/src/native/unix/CHANGES.txt
index bda92f6..6329de1 100644
--- a/src/native/unix/CHANGES.txt
+++ b/src/native/unix/CHANGES.txt
@@ -1,5 +1,10 @@
-APACHE COMMONS DAEMON (UNIX) CHANGELOG:
-Last modified at [$Date: 2011-11-01 21:43:52 +0100 (Tue, 01 Nov 2011) $]
+             APACHE COMMONS DAEMON (UNIX) CHANGELOG:
+
+Changes with 1.0.10
+  * Fix dynamic libcap loading for some linux ditributions (DAEMON-242)
+
+Changes with 1.0.9
+  * Dynamically load libcap on linux (DAEMON-234)
 
 Changes with 1.0.8
   * Better detection of JDK (DAEMON-220)
diff --git a/src/native/unix/configure b/src/native/unix/configure
index a1f55fd..824bf31 100755
--- a/src/native/unix/configure
+++ b/src/native/unix/configure
@@ -272,7 +272,44 @@ PACKAGE_STRING=
 PACKAGE_BUGREPORT=
 
 ac_unique_file="configure.in"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT RANLIB ac_ct_RANLIB STRIP  [...]
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT RANLIB ac_ct_RANLIB STRIP  [...]
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -729,6 +766,10 @@ ac_env_CPPFLAGS_set=${CPPFLAGS+set}
 ac_env_CPPFLAGS_value=$CPPFLAGS
 ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
 ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
 
 #
 # Report the --help message.
@@ -813,6 +854,7 @@ Some influential environment variables:
               nonstandard directory <lib dir>
   CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
               headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -2793,38 +2835,454 @@ fi
 if test "$supported_os" = "linux"
 then
 
-echo "$as_me:$LINENO: checking for cap_init in -lcap" >&5
-echo $ECHO_N "checking for cap_init in -lcap... $ECHO_C" >&6
-if test "${ac_cv_lib_cap_cap_init+set}" = set; then
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcap  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
 
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
 #endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char cap_init ();
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
 int
 main ()
 {
-cap_init ();
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
@@ -2838,28 +3296,177 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
+	 { ac_try='test -s conftest.$ac_objext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_lib_cap_cap_init=yes
+  eval "$as_ac_Header=yes"
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-ac_cv_lib_cap_cap_init=no
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
 fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_cap_cap_init" >&5
-echo "${ECHO_T}$ac_cv_lib_cap_cap_init" >&6
-if test $ac_cv_lib_cap_cap_init = yes; then
-  CFLAGS="$CFLAGS -DHAVE_LIBCAP" ; LIBS="$LIBS -lcap"
+
+done
+
+
+if test "${ac_cv_header_sys_capability_h+set}" = set; then
+  echo "$as_me:$LINENO: checking for sys/capability.h" >&5
+echo $ECHO_N "checking for sys/capability.h... $ECHO_C" >&6
+if test "${ac_cv_header_sys_capability_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 fi
+echo "$as_me:$LINENO: result: $ac_cv_header_sys_capability_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_capability_h" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking sys/capability.h usability" >&5
+echo $ECHO_N "checking sys/capability.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <sys/capability.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking sys/capability.h presence" >&5
+echo $ECHO_N "checking sys/capability.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/capability.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: sys/capability.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: sys/capability.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/capability.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: sys/capability.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: sys/capability.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: sys/capability.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/capability.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: sys/capability.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/capability.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: sys/capability.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/capability.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: sys/capability.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/capability.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: sys/capability.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/capability.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: sys/capability.h: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists.  ##
+## ------------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for sys/capability.h" >&5
+echo $ECHO_N "checking for sys/capability.h... $ECHO_C" >&6
+if test "${ac_cv_header_sys_capability_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_sys_capability_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_sys_capability_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_capability_h" >&6
+
+fi
+if test $ac_cv_header_sys_capability_h = yes; then
+  CFLAGS="$CFLAGS -DHAVE_LIBCAP"
+else
+  { echo "$as_me:$LINENO: WARNING: cannot find headers for libcap" >&5
+echo "$as_me: WARNING: cannot find headers for libcap" >&2;}
+fi
+
 
 fi
 
@@ -3533,6 +4140,8 @@ s, at STRIP@,$STRIP,;t t
 s, at ac_ct_STRIP@,$ac_ct_STRIP,;t t
 s, at JAVA_HOME@,$JAVA_HOME,;t t
 s, at LDCMD@,$LDCMD,;t t
+s, at CPP@,$CPP,;t t
+s, at EGREP@,$EGREP,;t t
 s, at INCLUDES@,$INCLUDES,;t t
 s, at LIBOBJS@,$LIBOBJS,;t t
 s, at LTLIBOBJS@,$LTLIBOBJS,;t t
diff --git a/src/native/unix/configure.in b/src/native/unix/configure.in
index 831af80..2ec623d 100644
--- a/src/native/unix/configure.in
+++ b/src/native/unix/configure.in
@@ -17,7 +17,7 @@ dnl
 
 dnl -------------------------------------------------------------------------
 dnl Author  Pier Fumagalli <mailto:pier.fumagalli at eng.sun.com>
-dnl Version $Id: configure.in 1194902 2011-10-29 15:19:18Z mturk $
+dnl Version $Id: configure.in 1292683 2012-02-23 07:37:10Z mturk $
 dnl -------------------------------------------------------------------------
 
 dnl -------------------------------------------------------------------------
@@ -115,7 +115,9 @@ fi
 AC_SUBST(LDCMD)
 if test "$supported_os" = "linux"
 then
-AC_CHECK_LIB([cap], [cap_init], [CFLAGS="$CFLAGS -DHAVE_LIBCAP" ; LIBS="$LIBS -lcap"])
+AC_CHECK_HEADER([sys/capability.h],
+                [CFLAGS="$CFLAGS -DHAVE_LIBCAP"],
+                AC_MSG_WARN([cannot find headers for libcap]))
 fi
 
 if test -z "$STRIPFLAGS"
diff --git a/src/native/unix/native/jsvc-unix.c b/src/native/unix/native/jsvc-unix.c
index 83ce771..835f075 100644
--- a/src/native/unix/native/jsvc-unix.c
+++ b/src/native/unix/native/jsvc-unix.c
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-/* @version $Id: jsvc-unix.c 1198399 2011-11-06 16:20:44Z mturk $ */
+/* @version $Id: jsvc-unix.c 1293002 2012-02-23 22:48:24Z mturk $ */
 #include "jsvc.h"
 
 #include <signal.h>
@@ -172,6 +172,48 @@ static int set_user_group(const char *user, int uid, int gid)
 
 /* Set linux capability, user and group */
 #ifdef OS_LINUX
+/* CAPSALL is to allow to read/write at any location */
+#define LEGACY_CAPSALL  (1 << CAP_NET_BIND_SERVICE) +   \
+                        (1 << CAP_SETUID) +             \
+                        (1 << CAP_SETGID) +             \
+                        (1 << CAP_DAC_READ_SEARCH) +    \
+                        (1 << CAP_DAC_OVERRIDE)
+
+#define LEGACY_CAPSMAX  (1 << CAP_NET_BIND_SERVICE) +   \
+                        (1 << CAP_DAC_READ_SEARCH) +    \
+                        (1 << CAP_DAC_OVERRIDE)
+
+/* That a more reasonable configuration */
+#define LEGACY_CAPS     (1 << CAP_NET_BIND_SERVICE) +   \
+                        (1 << CAP_DAC_READ_SEARCH) +    \
+                        (1 << CAP_SETUID) +             \
+                        (1 << CAP_SETGID)
+
+/* probably the only one Java could use */
+#define LEGACY_CAPSMIN  (1 << CAP_NET_BIND_SERVICE) +   \
+                        (1 << CAP_DAC_READ_SEARCH)
+
+#define LEGACY_CAP_VERSION  0x19980330
+static int set_legacy_caps(int caps)
+{
+    struct __user_cap_header_struct caphead;
+    struct __user_cap_data_struct   cap;
+
+    memset(&caphead, 0, sizeof caphead);
+    caphead.version = LEGACY_CAP_VERSION;
+    caphead.pid = 0;
+    memset(&cap, 0, sizeof cap);
+    cap.effective = caps;
+    cap.permitted = caps;
+    cap.inheritable = caps;
+    if (syscall(__NR_capset, &caphead, &cap) < 0) {
+        log_error("set_caps: failed to set capabilities");
+        log_error("check that your kernel supports capabilities");
+        return -1;
+    }
+    return 0;
+}
+
 #ifdef HAVE_LIBCAP
 static cap_value_t caps_std[] = {
     CAP_NET_BIND_SERVICE,
@@ -188,6 +230,66 @@ static cap_value_t caps_min[] = {
 #define CAPS     1
 #define CAPSMIN  2
 
+
+typedef int     (*fd_cap_free)(void *);
+typedef cap_t   (*fd_cap_init)(void);
+typedef int     (*fd_cap_clear)(cap_t);
+typedef int     (*fd_cap_get_flag)(cap_t, cap_value_t, cap_flag_t, cap_flag_value_t *);
+typedef int     (*fd_cap_set_flag)(cap_t, cap_flag_t, int, const cap_value_t *, cap_flag_value_t);
+typedef int     (*fd_cap_set_proc)(cap_t);
+
+static dso_handle hlibcap = NULL;
+static fd_cap_free  fp_cap_free;
+static fd_cap_init  fp_cap_init;
+static fd_cap_clear fp_cap_clear;
+static fd_cap_get_flag fp_cap_get_flag;
+static fd_cap_set_flag fp_cap_set_flag;
+static fd_cap_set_proc fp_cap_set_proc;
+
+static const char *libcap_locs[] = {
+    "/lib/libcap.so.2",
+    "/lib/libcap.so.1",
+    "/lib/libcap.so",
+    "/usr/lib/libcap.so.2",
+    "/usr/lib/libcap.so.1",
+    "/usr/lib/libcap.so",
+    NULL
+};
+
+static int ld_libcap(void)
+{
+    int i = 0;
+    dso_handle dso = NULL;
+#define CAP_LDD(name) \
+    if ((fp_##name = dso_symbol(dso, #name)) == NULL) { \
+        log_error("cannot locate " #name " in libcap.so -- %s", dso_error());  \
+        dso_unlink(dso);    \
+        return -1;          \
+    } else log_debug("loaded " #name " from libcap.")
+
+    if (hlibcap != NULL)
+        return 0;
+    while (libcap_locs[i] && dso == NULL) {
+        if ((dso = dso_link(libcap_locs[i++])))
+            break;
+    };
+    if (dso == NULL) {
+        log_error("failed loading capabilities library -- %s.", dso_error());
+        return -1;
+    }
+    CAP_LDD(cap_free);
+    CAP_LDD(cap_init);
+    CAP_LDD(cap_clear);
+
+    CAP_LDD(cap_get_flag);
+    CAP_LDD(cap_set_flag);
+    CAP_LDD(cap_set_proc);
+    hlibcap = dso;
+#undef CAP_LDD
+    return 0;
+}
+
+
 static int set_caps(int cap_type)
 {
     cap_t c;
@@ -196,6 +298,9 @@ static int set_caps(int cap_type)
     cap_value_t *caps;
     const char  *type;
 
+    if (ld_libcap()) {
+        return set_legacy_caps(cap_type);
+    }
     if (cap_type == CAPS) {
         ncap = sizeof(caps_std)/sizeof(cap_value_t);
         caps = caps_std;
@@ -212,16 +317,16 @@ static int set_caps(int cap_type)
         type = "null";
         flag = CAP_CLEAR;
     }
-    c = cap_init();
-    cap_clear(c);
-    cap_set_flag(c, CAP_EFFECTIVE,   ncap, caps, flag);
-    cap_set_flag(c, CAP_INHERITABLE, ncap, caps, flag);
-    cap_set_flag(c, CAP_PERMITTED,   ncap, caps, flag);
-    if (cap_set_proc(c) != 0) {
+    c = (*fp_cap_init)();
+    (*fp_cap_clear)(c);
+    (*fp_cap_set_flag)(c, CAP_EFFECTIVE,   ncap, caps, flag);
+    (*fp_cap_set_flag)(c, CAP_INHERITABLE, ncap, caps, flag);
+    (*fp_cap_set_flag)(c, CAP_PERMITTED,   ncap, caps, flag);
+    if ((*fp_cap_set_proc)(c) != 0) {
         log_error("failed setting %s capabilities.", type);
         return -1;
     }
-    cap_free(c);
+    (*fp_cap_free)(c);
     if (cap_type == CAPS)
         log_debug("increased capability set.");
     else if (cap_type == CAPSMIN)
@@ -233,45 +338,13 @@ static int set_caps(int cap_type)
 
 #else /* !HAVE_LIBCAP */
 /* CAPSALL is to allow to read/write at any location */
-#define CAPSALL (1 << CAP_NET_BIND_SERVICE) +   \
-                (1 << CAP_SETUID) +             \
-                (1 << CAP_SETGID) +             \
-                (1 << CAP_DAC_READ_SEARCH) +    \
-                (1 << CAP_DAC_OVERRIDE)
-
-#define CAPSMAX (1 << CAP_NET_BIND_SERVICE) +   \
-                (1 << CAP_DAC_READ_SEARCH) +    \
-                (1 << CAP_DAC_OVERRIDE)
-
-/* That a more reasonable configuration */
-#define CAPS    (1 << CAP_NET_BIND_SERVICE) +   \
-                (1 << CAP_DAC_READ_SEARCH) +    \
-                (1 << CAP_SETUID) +             \
-                (1 << CAP_SETGID)
-
-/* probably the only one Java could use */
-#define CAPSMIN (1 << CAP_NET_BIND_SERVICE) +   \
-                (1 << CAP_DAC_READ_SEARCH)
-
-#define LEGACY_CAP_VERSION  0x19980330
+#define CAPSALL LEGACY_CAPSALL
+#define CAPSMAX LEGACY_CAPSMAX
+#define CAPS    LEGACY_CAPS
+#define CAPSMIN LEGACY_CAPSMIN
 static int set_caps(int caps)
 {
-    struct __user_cap_header_struct caphead;
-    struct __user_cap_data_struct   cap;
-
-    memset(&caphead, 0, sizeof caphead);
-    caphead.version = LEGACY_CAP_VERSION;
-    caphead.pid = 0;
-    memset(&cap, 0, sizeof cap);
-    cap.effective = caps;
-    cap.permitted = caps;
-    cap.inheritable = caps;
-    if (syscall(__NR_capset, &caphead, &cap) < 0) {
-        log_error("set_caps: failed to set capabilities");
-        log_error("check that your kernel supports capabilities");
-        return -1;
-    }
-    return 0;
+    return set_legacy_caps(caps);
 }
 #endif
 
@@ -650,13 +723,6 @@ static int child(arg_data *args, home_data *data, uid_t uid, gid_t gid)
             return ret;
     }
 
-    /* create a new process group to prevent kill 0 killing the monitor process */
-#if defined(OS_FREEBSD) || defined(OS_DARWIN)
-    setpgid(0, 0);
-#else
-    setpgrp();
-#endif
-
 #ifdef OS_LINUX
     /* setuid()/setgid() only apply the current thread so we must do it now */
     if (linuxset_user_group(args->user, uid, gid) != 0)
diff --git a/src/native/unix/native/version.h b/src/native/unix/native/version.h
index 03b9962..35f9778 100644
--- a/src/native/unix/native/version.h
+++ b/src/native/unix/native/version.h
@@ -31,7 +31,7 @@
 #define JSVC_MINOR_VERSION      0
 
 /** patch level */
-#define JSVC_PATCH_VERSION      8
+#define JSVC_PATCH_VERSION     10
 
 /**
  *  This symbol is defined for internal, "development" copies of JSVC.
diff --git a/src/native/windows/README b/src/native/windows/README
index 28612cb..239d209 100644
--- a/src/native/windows/README
+++ b/src/native/windows/README
@@ -1,25 +1,59 @@
-Note: MAKE SURE you first build the java part (using Ant) otherwise the dist
-directory is not created).
+Configuring and Building Commons Daemon on Windows
+==================================================
 
-To build the service utilities for windows you will need:
-- MS Visual C++ (I have used version 5.0).
-- CYGWIN to build the jsvc.exe.
-- A Java Platform 2 compliant SDK to run the service.
+Using Visual Studio, you can build the Commons Daemon.
+The Makefile make file has a bunch of documentation about its
+options, but a trivial build is simply;
 
-The Windows applications are found in:
+  nmake CPU=X86
+  nmake CPU=X86 PREFIX=c:\desired\path\of\daemon install
 
-apps/prunmgr
-apps/prunsrv
 
-The common source files are in
+Needed Tools
+============
 
-src
-include
-resources
+Commons Daemon needs the Microsoft Visual C 6/SP5 to
+build the x86 binaries. This is because this compiler
+doesn't create MSVCRTnn.DLL dependencies which will
+be loaded inside running JVM if used.
+For building AMD64/EMT64 binaries use the Platform SDK
+for Windows Server 2003R2.
 
-The Makefiles in the apps/ directories can be used with MS Visual C++ 5.0.
-They will not work with earlier versions of nmake
 
-Note that later versions of Visual C++ can be set up to build the applications,
-however they may generate executables linked with a later version of the MS "C"
-runtime library (MSVCRTL), and may not work properly with all versions of Java.
+Step by Step
+============
+
+0. These were written for 64-bit XP. YMMV.
+
+1. Install the pre-requisites:
+   - Microsoft Visual C 6
+   - Microsoft Visual C 6 Service Pack 5
+   - Platform SDK for Windows Server 2003 R2
+
+2. Open a new command prompt (to ensure the environment is clean)
+   You'll need to do this for each different platform you want to build
+
+3. Configure the Visual C environment variables
+   Not necessary if the option to add them to the user's environment was
+   selected on install
+   %VC6_DIR%\Bin\VCVARS32.BAT
+   (e.g. "c:\Program Files (x86)\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT")
+
+4. Configure the Platform SDK environment (optional for X86?)
+   - win32
+     <PlatformSdkDir>\SetEnv /SRV32 /RETAIL 
+   - x64
+     <PlatformSdkDir>\SetEnv /X64 /RETAIL 
+   - i64
+     <PlatformSdkDir>\SetEnv /SRV64 /RETAIL 
+
+5. On 64-bit platforms set the following environment variable
+   set EXTRA_CFLAGS=/GS-
+
+6. Build the binary
+   - win32
+     nmake CPU=X86
+   - x64
+     nmake CPU=X64
+   - ia64
+     nmake CPU=I64
diff --git a/src/native/windows/README.dev b/src/native/windows/README.dev
deleted file mode 100644
index 55fddc3..0000000
--- a/src/native/windows/README.dev
+++ /dev/null
@@ -1,63 +0,0 @@
-Apache Commons Daemon
-=====================
-
-
-Configuring and Building Commons Daemon on Windows
-==================================================
-
-Using Visual Studio, you can build the Commons Daemon.
-The Makefile make file has a bunch of documentation about its
-options, but a trivial build is simply;
-
-  nmake CPU=X86
-  nmake CPU=X86 PREFIX=c:\desired\path\of\daemon install
-
-
-Needed Tools
-============
-
-Commons Daemon needs the Microsoft Visual C 6/SP5 to
-build the x86 binaries. This is because this compiler
-doesn't create MSVCRTnn.DLL dependencies which will
-be loaded inside running JVM if used.
-For building AMD64/EMT64 binaries use the Platform SDK
-for Windows Server 2003R2.
-
-
-Step by Step
-============
-
-0. These were written for 64-bit XP. YMMV.
-
-1. Install the pre-requisites:
-   - Microsoft Visual C 6
-   - Microsoft Visual C 6 Service Pack 5
-   - Platform SDK for Windows Server 2003 R2
-
-2. Open a new command prompt (to ensure the environment is clean)
-   You'll need to do this for each different platform you want to build
-
-3. Configure the Visual C environment variables
-   Not necessary if the option to add them to the user's environment was
-   selected on install
-   %VC6_DIR%\Bin\VCVARS32.BAT
-   (e.g. "c:\Program Files (x86)\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT")
-
-4. Configure the Platform SDK environment (optional for X86?)
-   - win32
-     <PlatformSdkDir>\SetEnv /SRV32 /RETAIL 
-   - x64
-     <PlatformSdkDir>\SetEnv /X64 /RETAIL 
-   - i64
-     <PlatformSdkDir>\SetEnv /SRV64 /RETAIL 
-
-5. On 64-bit platforms set the following environment variable
-   set EXTRA_CFLAGS=/GS-
-
-6. Build the binary
-   - win32
-     nmake CPU=X86
-   - x64
-     nmake CPU=X64
-   - ia64
-     nmake CPU=I64
diff --git a/src/native/windows/apps/prunmgr/Makefile b/src/native/windows/apps/prunmgr/Makefile
index 0c6e14a..f9a2ee8 100644
--- a/src/native/windows/apps/prunmgr/Makefile
+++ b/src/native/windows/apps/prunmgr/Makefile
@@ -22,12 +22,19 @@ UNICODE = 1
 !include <..\..\include\Makefile.inc>
 
 !IF !DEFINED(PREFIX) || "$(PREFIX)" == ""
-PREFIX = .\..\..\dist
+PREFIX = .\..\..\..\..\..\target
 !ENDIF
 !IF !DEFINED(SRCDIR) || "$(SRCDIR)" == ""
 SRCDIR = .\..\..
 !ENDIF
 
+!IF "$(CPU)" == "X64"
+PREFIX = $(PREFIX)\amd64
+!ENDIF
+!IF "$(CPU)" == "I64"
+PREFIX = $(PREFIX)\ia64
+!ENDIF
+
 LFLAGS = $(LFLAGS) /version:1.0
 LIBS = $(LIBS) user32.lib gdi32.lib winspool.lib comdlg32.lib comctl32.lib shlwapi.lib netapi32.lib
 INCLUDES = -I$(SRCDIR)\include -I$(SRCDIR)\src $(JAVA_INCLUDES)
diff --git a/src/native/windows/apps/prunmgr/prunmgr.h b/src/native/windows/apps/prunmgr/prunmgr.h
index eec2470..140cc0f 100644
--- a/src/native/windows/apps/prunmgr/prunmgr.h
+++ b/src/native/windows/apps/prunmgr/prunmgr.h
@@ -24,7 +24,7 @@
 #define _PRUNMGR_H
 
 #undef  PRG_VERSION
-#define PRG_VERSION    "1.0.8.0"
+#define PRG_VERSION    "1.0.10.0"
 #define PRG_REGROOT   L"Apache Software Foundation\\Procrun 2.0"
 
 #define IDM_TM_EXIT                     2000
diff --git a/src/native/windows/apps/prunmgr/prunmgr.rc b/src/native/windows/apps/prunmgr/prunmgr.rc
index a8228fc..26775e5 100644
--- a/src/native/windows/apps/prunmgr/prunmgr.rc
+++ b/src/native/windows/apps/prunmgr/prunmgr.rc
@@ -228,9 +228,9 @@ END
 STRINGTABLE
 BEGIN
     IDS_APPLICATION     RSTR_PSM
-    IDS_APPVERSION      "Version 1.0.8"
+    IDS_APPVERSION      "Version 1.0.10"
     IDS_APPFULLNAME     RSTR_PSM " Version " PRG_VERSION
-    IDS_APPCOPYRIGHT    "Copyright (c) 2000-2011 The Apache Software Foundation"
+    IDS_APPCOPYRIGHT    "Copyright (c) 2000-2012 The Apache Software Foundation"
     IDS_APPDESCRIPTION  "Apache Commons Daemon Service Management Tool"
     IDS_ALREAY_RUNING   "An instance of '%S' application is already running"
     IDS_ERRORCMD        "Unknown command line option '%s'\nSee the manual for command line usage."
@@ -259,8 +259,8 @@ BEGIN
 END
 
 1 VERSIONINFO
- FILEVERSION 1,0,8,0
- PRODUCTVERSION 1,0,8,0
+ FILEVERSION 1,0,10,0
+ PRODUCTVERSION 1,0,10,0
  FILEFLAGSMASK 0x3fL
 #if defined(_DEBUG)
  FILEFLAGS 0x03L
@@ -280,7 +280,7 @@ BEGIN
       VALUE "FileDescription", RSTR_PSM "\0"
       VALUE "FileVersion", PRG_VERSION
       VALUE "InternalName", RSTR_PSM "\0"
-      VALUE "LegalCopyright", "Copyright (c) 2000-2011 The Apache Software Foundation.\0"
+      VALUE "LegalCopyright", "Copyright (c) 2000-2012 The Apache Software Foundation.\0"
       VALUE "OriginalFilename", "prunmgr.exe\0"
       VALUE "ProductName", RSTR_PSM "\0"
       VALUE "ProductVersion", PRG_VERSION
diff --git a/src/native/windows/apps/prunsrv/Makefile b/src/native/windows/apps/prunsrv/Makefile
index 6f300a8..2add62b 100644
--- a/src/native/windows/apps/prunsrv/Makefile
+++ b/src/native/windows/apps/prunsrv/Makefile
@@ -22,7 +22,7 @@ UNICODE = 1
 !include <..\..\include\Makefile.inc>
 
 !IF !DEFINED(PREFIX) || "$(PREFIX)" == ""
-PREFIX = .\..\..\dist
+PREFIX = .\..\..\..\..\..\target
 !ENDIF
 !IF !DEFINED(SRCDIR) || "$(SRCDIR)" == ""
 SRCDIR = .\..\..
@@ -32,6 +32,13 @@ SRCDIR = .\..\..
 LFLAGS = $(LFLAGS) /stack:0x64000
 !ENDIF
 
+!IF "$(CPU)" == "X64"
+PREFIX = $(PREFIX)\amd64
+!ENDIF
+!IF "$(CPU)" == "I64"
+PREFIX = $(PREFIX)\ia64
+!ENDIF
+
 LFLAGS = $(LFLAGS) /version:1.0
 LIBS = $(LIBS) user32.lib gdi32.lib winspool.lib comdlg32.lib comctl32.lib shlwapi.lib netapi32.lib
 INCLUDES = -I$(SRCDIR)\include -I$(SRCDIR)\src $(JAVA_INCLUDES)
diff --git a/src/native/windows/apps/prunsrv/prunsrv.c b/src/native/windows/apps/prunsrv/prunsrv.c
index 6e3bf37..334e549 100644
--- a/src/native/windows/apps/prunsrv/prunsrv.c
+++ b/src/native/windows/apps/prunsrv/prunsrv.c
@@ -87,7 +87,7 @@ static LPCWSTR _commands[] = {
 static LPCWSTR _altcmds[] = {
     L"run",         /* 1 Run Service as console application (default)*/
     L"service",     /* 2 Run Service */
-    L"start",       /* 3 Version */
+    L"start",       /* 3 Start Service */
     L"stop",        /* 4 Stop Service */
     L"update",      /* 5 Update Service parameters */
     L"install",     /* 6 Install Service */
@@ -382,7 +382,7 @@ static void printVersion(void)
 {
     fwprintf(stderr, L"Commons Daemon Service Runner version %S/Win%d (%S)\n",
             PRG_VERSION, PRG_BITS, __DATE__);
-    fwprintf(stderr, L"Copyright (c) 2000-2011 The Apache Software Foundation.\n\n"
+    fwprintf(stderr, L"Copyright (c) 2000-2012 The Apache Software Foundation.\n\n"
                      L"For bug reporting instructions, please see:\n"
                      L"<URL:https://issues.apache.org/jira/browse/DAEMON>.");
 }
@@ -1630,9 +1630,9 @@ void __cdecl main(int argc, char **argv)
         goto cleanup;
     }
     apxCmdlineLoadEnvVars(lpCmdline);
-    if (lpCmdline->dwCmdIndex < 5) {
+    if (lpCmdline->dwCmdIndex < 6) {
         if (!loadConfiguration(lpCmdline) &&
-            lpCmdline->dwCmdIndex < 4) {
+            lpCmdline->dwCmdIndex < 5) {
             apxLogWrite(APXLOG_MARK_ERROR "Load configuration failed");
             rv = 2;
             goto cleanup;
diff --git a/src/native/windows/apps/prunsrv/prunsrv.h b/src/native/windows/apps/prunsrv/prunsrv.h
index d862eb7..0d7c8b6 100644
--- a/src/native/windows/apps/prunsrv/prunsrv.h
+++ b/src/native/windows/apps/prunsrv/prunsrv.h
@@ -25,7 +25,7 @@
 #define _PRUNSRV_H
 
 #undef  PRG_VERSION
-#define PRG_VERSION    "1.0.8.0"
+#define PRG_VERSION    "1.0.10.0"
 #define PRG_REGROOT   L"Apache Software Foundation\\Procrun 2.0"
 
 #endif /* _PRUNSRV_H */
diff --git a/src/native/windows/apps/prunsrv/prunsrv.rc b/src/native/windows/apps/prunsrv/prunsrv.rc
index 399aa83..6e666cf 100644
--- a/src/native/windows/apps/prunsrv/prunsrv.rc
+++ b/src/native/windows/apps/prunsrv/prunsrv.rc
@@ -22,8 +22,8 @@
 IDI_MAINICON         ICON                   "../../resources/procrunw.ico"
 
 1 VERSIONINFO
- FILEVERSION 1,0,8,0
- PRODUCTVERSION 1,0,8,0
+ FILEVERSION 1,0,10,0
+ PRODUCTVERSION 1,0,10,0
  FILEFLAGSMASK 0x3fL
 #if defined(_DEBUG)
  FILEFLAGS 0x03L
@@ -43,7 +43,7 @@ BEGIN
       VALUE "FileDescription", RSTR_PRUNSRV "\0"
       VALUE "FileVersion", PRG_VERSION
       VALUE "InternalName", RSTR_PRUNSRV "\0"
-      VALUE "LegalCopyright", "Copyright (c) 2000-2011 The Apache Software Foundation.\0"
+      VALUE "LegalCopyright", "Copyright (c) 2000-2012 The Apache Software Foundation.\0"
       VALUE "OriginalFilename", "prunsrv.exe\0"
       VALUE "ProductName", RSTR_PRUNSRV "\0"
       VALUE "ProductVersion", PRG_VERSION
diff --git a/src/native/windows/include/cmdline.h b/src/native/windows/include/cmdline.h
index 57629bb..0d5af19 100644
--- a/src/native/windows/include/cmdline.h
+++ b/src/native/windows/include/cmdline.h
@@ -30,8 +30,8 @@ __APXBEGIN_DECLS
 #define APXCMDOPT_SRV   0x00000200  /* Save to service registry */
 #define APXCMDOPT_USR   0x00000400  /* Save to user registry */
 
-#define APXCMDOPT_FOUND 0x00001000  /* The option is present in cmdline */
-#define APXCMDOPT_ADD   0x00002000  /* The option is present in cmdline as ++*/
+#define APXCMDOPT_FOUND 0x00001000  /* The option is present in cmdline as -- */
+#define APXCMDOPT_ADD   0x00002000  /* The option is present in cmdline as ++ */
 
 
 typedef struct APXCMDLINEOPT APXCMDLINEOPT;
diff --git a/src/native/windows/src/cmdline.c b/src/native/windows/src/cmdline.c
index cbd88ed..53d7868 100644
--- a/src/native/windows/src/cmdline.c
+++ b/src/native/windows/src/cmdline.c
@@ -179,6 +179,21 @@ LPAPXCMDLINE apxCmdlineParse(
                     lpOptions[l].dwType |= APXCMDOPT_FOUND;
                     break;
                 }
+                if (add) {
+                    if (!(lpOptions[l].dwType & APXCMDOPT_FOUND)) {
+                        /* Only set add flag in case there was no --option
+                         */
+                        lpOptions[l].dwType |= APXCMDOPT_ADD;
+                    }
+                }
+                else if (lpOptions[l].dwType & APXCMDOPT_ADD) {
+                    /* We have ++option --option ...
+                     * Discard earlier values and go over.
+                     */
+                     lpOptions[l].dwType &= ~APXCMDOPT_ADD;
+                     lpOptions[l].dwValue = 0;
+                     lpOptions[l].szValue = 0;
+                }
                 if (lpOptions[l].dwType & APXCMDOPT_STR)
                     lpOptions[l].szValue = val;
                 else if (lpOptions[l].dwType & APXCMDOPT_INT)
@@ -214,8 +229,6 @@ LPAPXCMDLINE apxCmdlineParse(
                     }
                 }
                 lpOptions[l].dwType |= APXCMDOPT_FOUND;
-                if (add)
-                    lpOptions[l].dwType |= APXCMDOPT_ADD;
                 match = l + 1;
                 break;
             }
diff --git a/src/native/windows/src/utils.c b/src/native/windows/src/utils.c
index f0fd49e..b0819d5 100644
--- a/src/native/windows/src/utils.c
+++ b/src/native/windows/src/utils.c
@@ -298,7 +298,7 @@ apxSetEnvironmentVariable(APXHANDLE hPool, LPCTSTR szName, LPCTSTR szValue,
 }
 
 
-/** Convert null separated double null terimated string to LPTSTR array)
+/** Convert null separated double null terminated string to LPTSTR array)
  * returns array size
  */
 DWORD
@@ -318,7 +318,7 @@ apxMultiSzToArrayW(APXHANDLE hPool, LPCWSTR lpString, LPWSTR **lppArray)
 
     *lppArray = (LPWSTR *)buff;
     p = (LPWSTR)(buff + (n + 2) * sizeof(LPWSTR));
-    AplCopyMemory(p, lpString, (l + 1) * sizeof(WCHAR) + sizeof(WCHAR));
+    AplCopyMemory(p, lpString, (l + 1) * sizeof(WCHAR));
     for (i = 0; i < n; i++) {
         (*lppArray)[i] = p;
         while (*p)
@@ -347,7 +347,7 @@ apxMultiSzToArrayA(APXHANDLE hPool, LPCSTR lpString, LPSTR **lppArray)
 
     *lppArray = (LPSTR *)buff;
     p = (LPSTR)(buff + (n + 2) * sizeof(LPSTR));
-    AplCopyMemory(p, lpString, (l + 1) * sizeof(CHAR) + sizeof(CHAR));
+    AplCopyMemory(p, lpString, (l + 1) * sizeof(CHAR));
     for (i = 0; i < n; i++) {
         (*lppArray)[i] = p;
         while (*p)
diff --git a/src/samples/AloneDaemon.sh b/src/samples/AloneDaemon.sh
index d0ba86e..37865fc 100755
--- a/src/samples/AloneDaemon.sh
+++ b/src/samples/AloneDaemon.sh
@@ -1,5 +1,5 @@
 #!/bin/sh
-# 
+#
 # 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.
diff --git a/src/samples/Native.sh b/src/samples/Native.sh
index 79eb3ec..bc3795a 100755
--- a/src/samples/Native.sh
+++ b/src/samples/Native.sh
@@ -1,18 +1,20 @@
-## 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.
-##
+#!/bin/sh
+#
+# 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.
+#
 # for linux ;-) and Mac OS X
 case `uname -s` in
   Darwin)
diff --git a/src/site/resources/images/logo.gif b/src/site/resources/images/logo.gif
new file mode 100644
index 0000000..115dbe5
Binary files /dev/null and b/src/site/resources/images/logo.gif differ
diff --git a/src/site/resources/images/logo.png b/src/site/resources/images/logo.png
new file mode 100644
index 0000000..ce6049b
Binary files /dev/null and b/src/site/resources/images/logo.png differ
diff --git a/src/site/site.xml b/src/site/site.xml
new file mode 100644
index 0000000..b17d327
--- /dev/null
+++ b/src/site/site.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ 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.
+-->
+<project name="Daemon">
+    <bannerRight>
+        <name>Commons Daemon</name>
+        <src>/images/logo.png</src>
+        <href>/index.html</href>
+    </bannerRight>
+
+    <body>
+        <menu name="Daemon">
+            <item name="Overview"                href="/index.html"/>
+            <item name="Download"                href="/download_daemon.cgi"/>
+            <item name="Procrun"                 href="/procrun.html"/>
+            <item name="Jsvc"                    href="/jsvc.html"/>
+            <item name="Native binaries"         href="/binaries.html"/>
+            <item name="FAQ"                     href="/faq.html"/>
+            <item name="Wiki"                    href="http://wiki.apache.org/commons/Daemon"/>
+        </menu>
+
+        <menu name="Development">
+            <item name="Mailing Lists"           href="/mail-lists.html"/>
+            <item name="Issue Tracking"          href="/issue-tracking.html"/>
+            <item name="Source Repository"       href="/source-repository.html"/>
+            <item name="Javadoc (SVN latest)"    href="apidocs/index.html"/>
+        </menu>
+
+    </body>
+
+</project>
diff --git a/src/site/xdoc/binaries.xml b/src/site/xdoc/binaries.xml
new file mode 100644
index 0000000..83854bd
--- /dev/null
+++ b/src/site/xdoc/binaries.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+
+<document>
+
+ <properties>
+  <title>Daemon : binaries</title>
+  <author email="jfrederic.clere at fujitsu-siemens.con">Jean-Frederic Clere</author>
+ </properties>
+
+<body>
+<section name="What to download?">
+<p>
+In the directory
+<a href="http://www.apache.org/dist/commons/daemon/binaries/">binaries</a>
+you will find subdirectories containing archives
+corresponding to your operating system. If your machine is not in the list,
+please mail us and we will try to make it available, or you can try to build it on your own.
+The non-Windows files are compressed tar files. They are named <code>commons-daemon-m.n.p-bin-os-hw.tar.gz</code>.
+For example: In the directory <code>linux</code> we have <code>commons-daemon-1.0.10-bin-linux-i686.tar.gz</code>
+That is a file suitable for a Linux system running on Intel hardware.
+Windows builds are provided as a zip file.
+</p>
+</section>
+
+<section name="How do I get the executable?">
+<subsection name="jsvc">
+<p>
+Do the following:
+<ul>
+  <li>Find the tar.gz file corresponding to your configuration.</li>
+  <li>Download it.</li>
+  <li>Uncompress the tar file and extract the contents (better with gnu tar).
+  There should be an executable file called <code>jsvc</code> and some text files</li>
+  <li>Copy the executable to the location where you want to run it.</li>
+  <li>Write a suitable shell script
+     (see in <code>src/samples</code> and <code>src/native/unix/native/Tomcat.sh</code>)
+     to get your Java application started as a daemon.
+  </li>
+</ul>
+</p>
+</subsection>
+<subsection name="procrun">
+<p>
+The Windows archive (e.g. commons-daemon-1.0.10-bin-windows.zip) contains 2 different executables:
+<ul>
+<li>prunsrv.exe - service application for running applications as services.</li>
+<li>prunmgr.exe - the GUI manager application used to monitor and configure installed services.</li>
+</ul>
+There is only one <code>prunmgr.exe</code> application for all architectures.
+The <code>prunsrv.exe</code> executable is available in 3 different versions for different architectures.
+The version in the top-level directory is for 32-bit (x86) architectures.
+The lower level directories are for 64-bit systems:
+<ul>
+<li>amd64 - AMD/EMT 64-bit</li>
+<li>ia64 - Intel Itanium 64-bit</li>
+</ul>
+The Windows application <code>prunsrv.exe</code> is used to install an application as a service.
+Once installed, <code>prunmgr.exe</code> can be used to monitor and reconfigure the service.
+(see <a href="procrun.html">procrun</a> for more information).
+The Windows binary zip archive should be unpacked into the location from which you wish to run it, for example:
+<code>%ProgramFiles%\Apache Commons Daemon</code>
+</p>
+</subsection>
+</section>
+
+</body>
+</document>
diff --git a/src/site/xdoc/download_daemon.xml b/src/site/xdoc/download_daemon.xml
new file mode 100644
index 0000000..b3f9cec
--- /dev/null
+++ b/src/site/xdoc/download_daemon.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0"?>
+<!--
+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.
+-->
+<!--
+ +======================================================================+
+ |****                                                              ****|
+ |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
+ |****                    DO NOT EDIT DIRECTLY                      ****|
+ |****                                                              ****|
+ +======================================================================+
+ | TEMPLATE FILE: download-page-template.xml                            |
+ | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
+ +======================================================================+
+ |                                                                      |
+ | 1) Re-generate using: mvn commons:download-page                      |
+ |                                                                      |
+ | 2) Set the following properties in the component's pom:              |
+ |    - commons.componentid (required, alphabetic, lower case)          |
+ |    - commons.release.version (required)                              |
+ |    - commons.binary.suffix (optional)                                |
+ |      (defaults to "-bin", set to "" for pre-maven2 releases)         |
+ |                                                                      |
+ | 3) Example Properties                                                |
+ |                                                                      |
+ |  <properties>                                                        |
+ |    <commons.componentid>math</commons.componentid>                   |
+ |    <commons.release.version>1.2</commons.release.version>            |
+ |  </properties>                                                       |
+ |                                                                      |
+ +======================================================================+
+-->
+<document>
+  <properties>
+    <title>Download Commons Daemon</title>
+    <author email="dev at commons.apache.org">Commons Documentation Team</author>
+  </properties>
+  <body>
+    <section name="Download Commons Daemon">
+    <subsection name="Using a Mirror">
+      <p>
+        We recommend you use a mirror to download our release
+        builds, but you <strong>must</strong> verify the integrity of
+        the downloaded files using signatures downloaded from our main
+        distribution directories. Recent releases (48 hours) may not yet
+        be available from the mirrors.
+      </p>
+
+      <p>
+        You are currently using <b>[preferred]</b>.  If you
+        encounter a problem with this mirror, please select another
+        mirror.  If all mirrors are failing, there are <i>backup</i>
+        mirrors (at the end of the mirrors list) that should be
+        available.
+        <br></br>
+        [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"></img></a>[end]
+      </p>
+
+      <form action="[location]" method="get" id="SelectMirror">
+        <p>
+          Other mirrors:
+          <select name="Preferred">
+          [if-any http]
+            [for http]<option value="[http]">[http]</option>[end]
+          [end]
+          [if-any ftp]
+            [for ftp]<option value="[ftp]">[ftp]</option>[end]
+          [end]
+          [if-any backup]
+            [for backup]<option value="[backup]">[backup] (backup)</option>[end]
+          [end]
+          </select>
+          <input type="submit" value="Change"></input>
+        </p>
+      </form>
+
+      <p>
+        The <a href="http://www.apache.org/dist/commons/KEYS">KEYS</a>
+        link links to the code signing keys used to sign the product.
+        The <code>PGP</code> link downloads the OpenPGP compatible signature from our main site.
+        The <code>MD5</code> link downloads the checksum from the main site.
+      </p>
+    </subsection>
+    </section>
+    <section name="Commons Daemon 1.0.10">
+      <subsection name="Binaries">
+        <table>
+          <tr>
+              <td><a href="[preferred]/commons/daemon/binaries/commons-daemon-1.0.10-bin.tar.gz">commons-daemon-1.0.10-bin.tar.gz</a></td>
+              <td><a href="http://www.apache.org/dist/commons/daemon/binaries/commons-daemon-1.0.10-bin.tar.gz.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/commons/daemon/binaries/commons-daemon-1.0.10-bin.tar.gz.asc">pgp</a></td>
+          </tr>
+          <tr>
+              <td><a href="[preferred]/commons/daemon/binaries/commons-daemon-1.0.10-bin.zip">commons-daemon-1.0.10-bin.zip</a></td>
+              <td><a href="http://www.apache.org/dist/commons/daemon/binaries/commons-daemon-1.0.10-bin.zip.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/commons/daemon/binaries/commons-daemon-1.0.10-bin.zip.asc">pgp</a></td>
+          </tr>
+          <tr>
+              <td><a href="[preferred]/commons/daemon/binaries/">Browse native binaries download area...</a></td>
+              <td></td>
+              <td></td>
+          </tr>
+        </table>
+      </subsection>
+      <subsection name="Source">
+        <table>
+          <tr>
+              <td><a href="[preferred]/commons/daemon/source/commons-daemon-1.0.10-src.tar.gz">commons-daemon-1.0.10-src.tar.gz</a></td>
+              <td><a href="http://www.apache.org/dist/commons/daemon/source/commons-daemon-1.0.10-src.tar.gz.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/commons/daemon/source/commons-daemon-1.0.10-src.tar.gz.asc">pgp</a></td>
+          </tr>
+          <tr>
+              <td><a href="[preferred]/commons/daemon/source/commons-daemon-1.0.10-src.zip">commons-daemon-1.0.10-src.zip</a></td>
+              <td><a href="http://www.apache.org/dist/commons/daemon/source/commons-daemon-1.0.10-src.zip.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/commons/daemon/source/commons-daemon-1.0.10-src.zip.asc">pgp</a></td>
+          </tr>
+          <tr>
+              <td><a href="[preferred]/commons/daemon/source/commons-daemon-1.0.10-native-src.tar.gz">commons-daemon-1.0.10-native-src.tar.gz</a></td>
+              <td><a href="http://www.apache.org/dist/commons/daemon/source/commons-daemon-1.0.10-native-src.tar.gz.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/commons/daemon/source/commons-daemon-1.0.10-native-src.tar.gz.asc">pgp</a></td>
+          </tr>
+          <tr>
+              <td><a href="[preferred]/commons/daemon/source/commons-daemon-1.0.10-native-src.zip">commons-daemon-1.0.10-native-src.zip</a></td>
+              <td><a href="http://www.apache.org/dist/commons/daemon/source/commons-daemon-1.0.10-native-src.zip.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/commons/daemon/source/commons-daemon-1.0.10-native-src.zip.asc">pgp</a></td>
+          </tr>
+        </table>
+      </subsection>
+    </section>
+    <section name="Archives">
+        <p>
+          Older releases can be obtained from the archives.
+        </p>
+        <ul>
+          <li class="download"><a href="[preferred]/commons/daemon/">Browse download area...</a></li>
+          <li><a href="http://archive.apache.org/dist/commons/daemon/">Archives...</a></li>
+        </ul>
+    </section>
+  </body>
+</document>
+
diff --git a/src/site/xdoc/faq.xml b/src/site/xdoc/faq.xml
new file mode 100644
index 0000000..9583d3e
--- /dev/null
+++ b/src/site/xdoc/faq.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+
+<document>
+
+ <properties>
+  <title>Daemon : FAQ</title>
+  <author email="jfrederic.clere at fujitsu-siemens.con">Jean-Frederic Clere</author>
+ </properties>
+
+<body>
+<section name="Buildconf problems">
+<p>
+<source>
+$ sh support/buildconf.sh
+autoconf: Undefined macros:
+***BUG in Autoconf--please report*** AC_PATH
+***BUG in Autoconf--please report*** AC_PATH
+***BUG in Autoconf--please report*** AC_PATH
+</source>
+Your version of autoconf is to old, upgrade your autoconf and retry.
+Or run support/buildconf.sh in another machine and copy the daemon tree in
+the machine where you want to compile jsvc.
+</p>
+</section>
+
+<section name="Configure problems">
+<p>
+<source>
+configure: creating ./config.status
+config.status: creating Makefile
+mv: Makefile: set owner/group (was: 1670/0): Operation not permitted
+config.status: creating Makedefs
+mv: Makedefs: set owner/group (was: 1670/0): Operation not permitted
+config.status: creating native/Makefile
+mv: native/Makefile: set owner/group (was: 1670/0): Operation not permitted
+*** All done ***
+Now you can issue "make"
+</source>
+You should ignore those error messages they are normal in FreeBSD.
+config.status creates files in /tmp and move them in the current directory.
+When FreeBSD creates files it sets the group of the files to
+the group of the directory where the files are created.
+So if /tmp is group "wheel" the files are "wheel". When moving the files in
+the current directory (if you are not member of group "wheel")
+the group "wheel" cannot be set on the moved files.
+</p>
+</section>
+<section name="Runtime problems">
+<p>
+On Linux 2.6.x jsvc does not start and write the following error:
+<source>
+jsvc.exec error: syscall failed in set_caps
+jsvc.exec error: Service exit with a return value of 4
+</source>
+CONFIG_SECURITY_CAPABILITIES in missing in your kernel try the following in the kernel sources:
+<ul>
+<li>
+Configure the kernel with "Default Linux Capabilities" and reboot
+  (by make gconfig or make xconfig under "security options" and "Enable different security models")
+</li>
+<li>
+Insert the module "capability":
+<source>
+modprobe capability
+</source>
+</li>
+</ul>
+</p>
+</section>
+
+<section name="Cygwin configuration problems">
+<p>
+The configure of jsvc does not like spaces in directory name.
+To configure with java installed in directory whose name contains a space,
+use the 8 characters name of the directory.
+For example for java in installed in <code>c:\Archivos de programa\java\jdk1.5.0_06</code>:
+<source>
+./configure --with-java=/cygdrive/c/Archiv~1/java/jdk1.5.0_06
+</source>
+</p>
+</section>
+
+</body>
+</document>
diff --git a/src/site/xdoc/index.xml b/src/site/xdoc/index.xml
new file mode 100644
index 0000000..a0884af
--- /dev/null
+++ b/src/site/xdoc/index.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+
+<document>
+
+ <properties>
+  <title>Daemon : Java based daemons or services</title>
+  <author email="jfrederic.clere at fujitsu-siemens.con">Jean-Frederic Clere</author>
+ </properties>
+
+<body>
+<section name="Introduction">
+<p>
+      Since 1994, the Java programming language evolved and became a
+      valid tool to develop reliable and performant server applications as
+      opposed to just applets and client applications. The major disadvantage of
+      the Java platform is that still today the only portable way to
+      start a Java application relies on a single point of entry: the
+      <CODE><EM CLASS="key">public static void</EM>
+      main(<EM CLASS="ref">String</EM>[])</CODE> method.
+</p>
+<p>
+      Having a single-point of entry is a valid solution for client
+      applications, where interactively a user can command to the application
+      to quit (which can terminate the Virtual Machine process at calling the
+      <CODE><EM CLASS="ref">System</EM>.exit(<EM CLASS="key">int</EM>)</CODE>
+      method), but in those cases where the application is not interactive
+      (server applications) there is currently no portable way to notify
+      the Virtual Machine of its imminent shutdown.
+</p>
+<p>
+      A server application written in Java might have to perform several tasks
+      before being able to shutdown the Virtual Machine process. For example
+      in the case of a Servlet container, before the VM process is shut down,
+      sessions might need to be serialized to disk, and web applications need
+      to be destroyed.
+</p>
+<p>
+      One common solution to this problem is to create (for example) a
+      <CODE><EM CLASS="ref">ServerSocket</EM></CODE> and wait for a particular
+      message to be issued. When the message is received, all operations
+      required to shut down the server applications are performed and at the
+      end the <CODE><EM CLASS="ref">System</EM>.exit</CODE> method is called
+      to terminate the Virtual Machine process. This method however, has
+      several disadvantages and risks:
+      <ul>
+      <li>
+      In case of a system-wide shutdown, the Virtual Machine process may be
+      shut down directly by the operating system without notifying the running
+      server application.
+      </li>
+      <li>
+      If an attacker finds out the shutdown message to send to the server
+      and discovers a way to send this message, he can easily interrupt
+      the server's operation, bypassing all the security restrictions
+      implemented in the operating system.
+      </li>
+      </ul>
+</p>
+<p>
+      Most multi-user operating systems already have a way in which server
+      applications are started and stopped. Under Unix based operating systems
+      non interactive server applications are called <em>daemons</em> and are
+      controlled by the operating system with a set of specified
+      <em>signals</em>. Under Windows such programs are called <em>services</em>
+      and are controlled by appropriate calls to specific functions defined in
+      the application binary, but although the ways of dealing with the problem
+      are different, in both cases the operating system can notify a server
+      application of its imminent shutdown, and the application has the
+      ability to perform certain tasks before its process of execution is
+      destroyed.
+</p>
+</section>
+
+<section name="Structure">
+<p>
+      Daemon is made of 2 parts. One written in C that makes the interface to
+      the operating system and the other in Java that provides the
+      Daemon API.
+</p>
+</section>
+
+<section name="Platforms">
+<p>
+      Both Win32 and UNIX like platforms are supported.
+      For Win32 platforms use <a href="procrun.html">procrun</a>.
+      For UNIX like platforms use <a href="jsvc.html">jsvc</a>.
+</p>
+</section>
+<section name="Initial Source of the Package">
+
+<p>The original Java classes came from the Jakarta Tomcat 4.0 project.</p>
+
+<p>The package name for the Daemon component is
+<code>org.apache.commons.daemon</code>.
+</p>
+</section>
+
+</body>
+</document>
diff --git a/src/site/xdoc/issue-tracking.xml b/src/site/xdoc/issue-tracking.xml
new file mode 100644
index 0000000..2ad9465
--- /dev/null
+++ b/src/site/xdoc/issue-tracking.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0"?>
+<!--
+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.
+-->
+<!--
+ +======================================================================+
+ |****                                                              ****|
+ |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
+ |****                    DO NOT EDIT DIRECTLY                      ****|
+ |****                                                              ****|
+ +======================================================================+
+ | TEMPLATE FILE: issue-tracking-template.xml                           |
+ | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
+ +======================================================================+
+ |                                                                      |
+ | 1) Re-generate using: mvn commons:jira-page                          |
+ |                                                                      |
+ | 2) Set the following properties in the component's pom:              |
+ |    - commons.jira.id  (required, alphabetic, upper case)             |
+ |    - commons.jira.pid (required, numeric)                            |
+ |                                                                      |
+ | 3) Example Properties                                                |
+ |                                                                      |
+ |  <properties>                                                        |
+ |    <commons.jira.id>MATH</commons.jira.id>                           |
+ |    <commons.jira.pid>12310485</commons.jira.pid>                     |
+ |  </properties>                                                       |
+ |                                                                      |
+ +======================================================================+
+-->
+<document>
+  <properties>
+    <title>Commons Daemon Issue tracking</title>
+    <author email="dev at commons.apache.org">Commons Documentation Team</author>
+  </properties>
+  <body>
+
+    <section name="Commons Daemon Issue tracking">
+      <p>
+      Commons Daemon uses <a href="http://issues.apache.org/jira/">ASF JIRA</a> for tracking issues.
+      See the <a href="http://issues.apache.org/jira/browse/DAEMON">Commons Daemon JIRA project page</a>.
+      </p>
+
+      <p>
+      To use JIRA you may need to <a href="http://issues.apache.org/jira/secure/Signup!default.jspa">create an account</a>
+      (if you have previously created/updated Commons issues using Bugzilla an account will have been automatically
+      created and you can use the <a href="http://issues.apache.org/jira/secure/ForgotPassword!default.jspa">Forgot Password</a>
+      page to get a new password).
+      </p>
+
+      <p>
+      If you would like to report a bug, or raise an enhancement request with
+      Commons Daemon please do the following:
+      <ol>
+        <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&pid=12310468&sorter/field=issuekey&sorter/order=DESC&status=1&status=3&status=4">Search existing open bugs</a>.
+            If you find your issue listed then please add a comment with your details.</li>
+        <li><a href="mail-lists.html">Search the mailing list archive(s)</a>.
+            You may find your issue or idea has already been discussed.</li>
+        <li>Decide if your issue is a bug or an enhancement.</li>
+        <li>Submit either a <a href="http://issues.apache.org/jira/secure/CreateIssueDetails!init.jspa?pid=12310468&issuetype=1&priority=4&assignee=-1">bug report</a>
+            or <a href="http://issues.apache.org/jira/secure/CreateIssueDetails!init.jspa?pid=12310468&issuetype=4&priority=4&assignee=-1">enhancement request</a>.</li>
+      </ol>
+      </p>
+
+      <p>
+      Please also remember these points:
+      <ul>
+        <li>the more information you provide, the better we can help you</li>
+        <li>test cases are vital, particularly for any proposed enhancements</li>
+        <li>the developers of Commons Daemon are all unpaid volunteers</li>
+      </ul>
+      </p>
+
+      <p>
+      For more information on subversion and creating patches see the
+      <a href="http://www.apache.org/dev/contributors.html">Apache Contributors Guide</a>.
+      </p>
+
+      <p>
+      You may also find these links useful:
+      <ul>
+        <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&pid=12310468&sorter/field=issuekey&sorter/order=DESC&status=1&status=3&status=4">All Open Commons Daemon bugs</a></li>
+        <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&pid=12310468&sorter/field=issuekey&sorter/order=DESC&status=5&status=6">All Resolved Commons Daemon bugs</a></li>
+        <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&pid=12310468&sorter/field=issuekey&sorter/order=DESC">All Commons Daemon bugs</a></li>
+      </ul>
+      </p>
+    </section>
+  </body>
+</document>
diff --git a/src/site/xdoc/jsvc.xml b/src/site/xdoc/jsvc.xml
new file mode 100644
index 0000000..14c2841
--- /dev/null
+++ b/src/site/xdoc/jsvc.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+
+<document>
+
+ <properties>
+  <title>Daemon : Java Service</title>
+  <author email="jfrederic.clere at fujitsu-siemens.con">Jean-Frederic Clere</author>
+ </properties>
+
+<body>
+<section name="Introduction">
+<p>
+      Jsvc is a set of libraries and applications for making Java
+      applications run on UNIX more easily.
+      <br/>
+      Jsvc allows the application (e.g. Tomcat) to perform some privileged operations as root
+      (e.g. bind to a port < 1024), and then switch identity to a non-privileged user.
+      <br/>
+      It can run on Win32 via the Cygwin emulation layer (see
+      <a href="http://www.cygwin.com/"> Cygwin</a> for more information),
+      however Win32 users may prefer to use <a href="procrun.html"> procrun</a>
+      instead, which allows the application to run as a Windows Service.
+</p>
+<p>
+      The sources are located in the src/native/unix subdirectory.
+</p>
+<p>
+      In the future <a href="http://apr.apache.org/"> APR </a> may be used
+      to provide more portable platform support.
+</p>
+</section>
+
+<section name="Building from source">
+<p>
+To build under a UNIX operating system you will need:
+<ul>
+  <li>GNU AutoConf (at least version 2.53)</li>
+  <li>An ANSI-C compliant compiler (GCC is good)</li>
+  <li>GNU Make</li>
+  <li>A Java Platform 2 compliant SDK</li>
+</ul>
+
+
+You need to build the "configure" program with:
+
+<source>
+sh support/buildconf.sh
+</source>
+
+(Note it is possible to replace sh by any compatible shell like bash, ksh).
+
+The result should be something like:
+<source>
+support/buildconf.sh
+support/buildconf.sh: configure script generated successfully
+</source>
+Once the configure script is generated, follow the next section.
+</p>
+</section>
+
+<section name="Building from a release tarball">
+<p>
+To build the binary under a UNIX operating system you will need:
+<ul>
+  <li>An ANSI-C compliant compiler (GCC is good)</li>
+  <li>GNU Make</li>
+  <li>A Java Platform 2 compliant SDK</li>
+</ul>
+
+You have to specify the <code>JAVA_HOME</code> of the SDK
+either with the <code>--with-java=<dir></code> parameter or set the <code>JAVA_HOME</code> environment
+to point to your SDK installation. For example:
+<source>
+./configure --with-java=/usr/java
+</source>
+or
+<source>
+export JAVA_HOME
+./configure
+</source>
+
+If your operating system is supported, configure will go through cleanly,
+otherwise it will report an error (please send us the details of your
+OS/JDK, or a patch against the sources). To build the binaries and
+libraries simply do:
+<source>
+make
+</source>
+This will generate the executable file <code>jsvc</code>.
+</p>
+</section>
+
+<section name="Starting jsvc">
+<p>
+To check the allowed parameters for the jsvc binary simply do:
+<source>
+./jsvc -help
+Usage: jsvc [-options] class [args...]
+
+Where options include:
+
+    -help | --help | -?
+        show this help page (implies -nodetach)
+    -jvm <JVM name>
+        use a specific Java Virtual Machine. Available JVMs:
+            'client' 'server'
+    -client
+        use a client Java Virtual Machine.
+    -server
+        use a server Java Virtual Machine.
+    -cp / -classpath <directories and zip/jar files>
+        set search path for service classes and resouces
+    -home <directory>
+        set the path of your JDK or JRE installation (or set
+        the JAVA_HOME environment variable)
+    -version
+        show the current Java environment version (to check
+        correctness of -home and -jvm. Implies -nodetach)
+    -showversion
+        show the current Java environment version (to check
+        correctness of -home and -jvm) and continue execution.
+    -nodetach
+        don't detach from parent process and become a daemon
+    -debug
+        verbosely print debugging information
+    -check
+        only check service (implies -nodetach)
+    -user <user>
+        user used to run the daemon (defaults to current user)
+    -verbose[:class|gc|jni]
+        enable verbose output
+    -outfile </full/path/to/file>
+        Location for output from stdout (defaults to /dev/null)
+        Use the value '&2' to simulate '1>&2'
+    -errfile </full/path/to/file>
+        Location for output from stderr (defaults to /dev/null)
+        Use the value '&1' to simulate '2>&1'
+    -pidfile </full/path/to/file>
+        Location for output from the file containing the pid of jsvc
+        (defaults to /var/run/jsvc.pid)
+    -D<name>=<value>
+        set a Java system property
+    -X<option>
+        set Virtual Machine specific option
+    -ea[:<packagename>...|:<classname>]
+    -enableassertions[:<packagename>...|:<classname>]
+        enable assertions
+    -da[:<packagename>...|:<classname>]
+    -disableassertions[:<packagename>...|:<classname>]
+        disable assertions
+    -esa | -enablesystemassertions
+        enable system assertions
+    -dsa | -disablesystemassertions
+        disable system assertions
+    -agentlib:<libname>[=<options>]
+        load native agent library <libname>, e.g. -agentlib:hprof
+    -agentpath:<pathname>[=<options>]
+        load native agent library by full pathname
+    -javaagent:<jarpath>[=<options>]
+        load Java programming language agent, see java.lang.instrument
+    -procname <procname>
+        use the specified process name (works only for Linux)
+    -wait <waittime>
+        wait waittime seconds for the service to start
+        waittime should multiple of 10 (min=10)
+    -stop
+        stop the service using the file given in the -pidfile option
+    -keepstdin
+        does not redirect stdin to /dev/null
+
+</source>
+</p>
+<subsection name="Mac OS X universal binaries">
+<p>
+If jsvc was build with universal binary support the proper way of
+starting <code>jsvc</code> is by using Mac OS X <code>arch</code> command:
+</p>
+<source>
+    arch -arch i386 ./jsvc -jvm server <original jsvc parameters>
+
+    for running 64-bit JVM use the:
+    arch -arch x86_64 ./jsvc -jvm server <original jsvc parameters>
+
+</source>
+<p>
+Use <code>-jvm server</code> because default <code>client</code> JVM is
+not present for all architectures.
+</p>
+</subsection>
+</section>
+<section name="Using jsvc">
+<p>
+There two ways to use jsvc: via a Class that implements the Daemon interface or
+via calling a Class that has the required methods.
+For example Tomcat-4.1.x uses the Daemon interface
+whereas Tomcat-5.0.x provides a Class whose methods are called by jsvc directly.
+</p>
+<subsection name="Via Daemon interface">
+<p>
+Do the following:
+<ul>
+  <li>Write a Class that implements the Daemon interface (MyClass).</li>
+  <li>Put it in a jarfile (my.jar).</li>
+  <li>Call jsvc like:
+  <source>
+./jsvc -cp commons-daemon.jar:my.jar MyClass
+  </source>
+  </li>
+</ul>
+</p>
+</subsection>
+<subsection name="Directly">
+<p>
+Write a Class (MyClass) that implements the following methods:
+<ul>
+  <li>void init(String[] arguments): Here open configuration files, create a trace file, create
+      ServerSockets, Threads</li>
+  <li>void start(): Start the Thread, accept incoming connections</li>
+  <li>void stop(): Inform the Thread to terminate the run(), close the ServerSockets</li>
+  <li><code>void destroy()</code>: Destroy any object created in init()</li>
+</ul>
+Store it in a jarfile and use as above:
+<source>
+./jsvc -cp my.jar MyClass
+</source>
+</p>
+</subsection>
+</section>
+<section name="How jsvc works">
+<p>
+Jsvc uses 3 processes: a launcher process, a controller process and a controlled process.
+The controlled process is also the main java thread, if the JVM crashes
+the controller will restart it in the next minute.
+Jsvc is a daemon process so it should be started as root and the <code>-user</code> parameter
+allows to downgrade to an unprivilegded user.
+When the <code>-wait</code> parameter is used, the launcher process waits until the controller says
+"I am ready", otherwise it returns after creating the controller process.
+</p>
+
+<subsection name="Forks in commons-daemon">
+<p>
+Launcher process:
+<source>
+main()
+{
+  fork()
+  parent: wait_child(), wait until JAVA service started when the child says "I am ready".
+  child: controller process.
+}
+</source>
+
+Controller process:
+<source>
+  while (fork()) {
+    parent: wait_for_child.
+      if exited and restart needed continue
+      else exit.
+    child: exit(child()). controlled process.
+  }
+</source>
+
+Controlled process:
+<source>
+In child(): controlled process.
+  init_JVM().
+  load_service().
+  start_service().
+  say "I am ready"
+  wait for signal or poll for stop
+  stop_service().
+  destroy_service().
+  destroy_JVM().
+  exit (with different codes so that parent knows if it has to restart us).
+</source>
+Note: The controller process uses signals to stop the controlled process.
+</p>
+</subsection>
+
+<subsection name="Downgrading user">
+<p>
+On Linux <code>setuid()</code>/<code>setgid()</code> + capabilities are used. On other unix <code>setgid</code>/<code>initgroups</code> are used.
+
+We have something like:
+<source>
+/* as root */
+init_JVM().
+load_service. /*  java_load() calls the load method */
+downgrade user (set_caps() or set_user_group())
+/* as the user $USER (from -user $USER parameter) */
+umask()
+start_service. /* java_start() calls the start method */
+</source>
+</p>
+</subsection>
+</section>
+
+</body>
+</document>
diff --git a/src/site/xdoc/mail-lists.xml b/src/site/xdoc/mail-lists.xml
new file mode 100644
index 0000000..8ba0706
--- /dev/null
+++ b/src/site/xdoc/mail-lists.xml
@@ -0,0 +1,202 @@
+<?xml version="1.0"?>
+<!--
+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.
+-->
+<!--
+ +======================================================================+
+ |****                                                              ****|
+ |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
+ |****                    DO NOT EDIT DIRECTLY                      ****|
+ |****                                                              ****|
+ +======================================================================+
+ | TEMPLATE FILE: mail-lists-template.xml                               |
+ | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
+ +======================================================================+
+ |                                                                      |
+ | 1) Re-generate using: mvn commons:mail-page                          |
+ |                                                                      |
+ | 2) Set the following properties in the component's pom:              |
+ |    - commons.componentid (required, alphabetic, lower case)          |
+ |                                                                      |
+ | 3) Example Properties                                                |
+ |                                                                      |
+ |  <properties>                                                        |
+ |    <commons.componentid>math</commons.componentid>                   |
+ |  </properties>                                                       |
+ |                                                                      |
+ +======================================================================+
+-->
+<document>
+  <properties>
+    <title>Commons Daemon Mailing Lists</title>
+    <author email="dev at commons.apache.org">Commons Documentation Team</author>
+  </properties>
+  <body>
+
+    <section name="Overview">
+      <p>
+        <a href="index.html">Commons Daemon</a> shares mailing lists with all the other 
+        <a href="http://commons.apache.org/components.html">Commons Components</a>.
+        To make it easier for people to only read messages related to components they are interested in,
+        the convention in Commons is to prefix the subject line of messages with the component's name,
+        for example:
+        <ul>
+          <li>[daemon] Problem with the ...</li>
+        </ul>
+      </p>
+      <p>
+        Questions related to the usage of Commons Daemon should be posted to the
+        <a href="http://mail-archives.apache.org/mod_mbox/commons-user/">User List</a>.
+        <br />
+        The <a href="http://mail-archives.apache.org/mod_mbox/commons-dev/">Developer List</a>
+        is for questions and discussion related to the development of Commons Daemon.
+        <br />
+        Please do not cross-post; developers are also subscribed to the user list.
+      </p>
+      <p>
+        <strong>Note:</strong> please don't send patches or attachments to any of the mailing lists.
+        Patches are best handled via the <a href="issue-tracking.html">Issue Tracking</a> system. 
+        Otherwise, please upload the file to a public server and include the URL in the mail. 
+      </p>
+    </section>
+
+    <section name="Commons Daemon Mailing Lists">
+      <p>
+        <strong>Please prefix the subject line of any messages for <a href="index.html">Commons Daemon</a>
+        with <i>[daemon]</i></strong> - <i>thanks!</i>
+        <br />
+        <br />
+      </p>
+
+      <table>
+        <tr>
+          <th>Name</th>
+          <th>Subscribe</th>
+          <th>Unsubscribe</th>
+          <th>Post</th>
+          <th>Archive</th>
+          <th>Other Archives</th>
+        </tr>
+
+
+        <tr>
+          <td>
+            <strong>Commons User List</strong>
+            <br /><br />
+            Questions on using Commons Daemon.
+            <br /><br />
+          </td>
+          <td><a href="mailto:user-subscribe at commons.apache.org">Subscribe</a></td>
+          <td><a href="mailto:user-unsubscribe at commons.apache.org">Unsubscribe</a></td>
+          <td><a href="mailto:user at commons.apache.org?subject=[daemon]">Post</a></td>
+          <td><a href="http://mail-archives.apache.org/mod_mbox/commons-user/">mail-archives.apache.org</a></td>
+          <td><a href="http://markmail.org/list/org.apache.commons.users/">markmail.org</a><br />
+              <a href="http://www.mail-archive.com/user@commons.apache.org/">www.mail-archive.com</a><br />
+              <a href="http://news.gmane.org/gmane.comp.jakarta.commons.devel">news.gmane.org</a>
+          </td>
+        </tr>
+
+
+        <tr>
+          <td>
+            <strong>Commons Developer List</strong>
+            <br /><br />
+            Discussion of development of Commons Daemon.
+            <br /><br />
+          </td>
+          <td><a href="mailto:dev-subscribe at commons.apache.org">Subscribe</a></td>
+          <td><a href="mailto:dev-unsubscribe at commons.apache.org">Unsubscribe</a></td>
+          <td><a href="mailto:dev at commons.apache.org?subject=[daemon]">Post</a></td>
+          <td><a href="http://mail-archives.apache.org/mod_mbox/commons-dev/">mail-archives.apache.org</a></td>
+          <td><a href="http://markmail.org/list/org.apache.commons.dev/">markmail.org</a><br />
+              <a href="http://www.mail-archive.com/dev@commons.apache.org/">www.mail-archive.com</a><br />
+              <a href="http://news.gmane.org/gmane.comp.jakarta.commons.devel">news.gmane.org</a>
+          </td>
+        </tr>
+
+
+        <tr>
+          <td>
+            <strong>Commons Issues List</strong>
+            <br /><br />
+            Only for e-mails automatically generated by the <a href="issue-tracking.html">issue tracking</a> system.
+            <br /><br />
+          </td>
+          <td><a href="mailto:issues-subscribe at commons.apache.org">Subscribe</a></td>
+          <td><a href="mailto:issues-unsubscribe at commons.apache.org">Unsubscribe</a></td>
+          <td><i>read only</i></td>
+          <td><a href="http://mail-archives.apache.org/mod_mbox/commons-issues/">mail-archives.apache.org</a></td>
+          <td><a href="http://markmail.org/list/org.apache.commons.issues/">markmail.org</a><br />
+              <a href="http://www.mail-archive.com/issues@commons.apache.org/">www.mail-archive.com</a>
+          </td>
+        </tr>
+
+
+        <tr>
+          <td>
+            <strong>Commons Commits List</strong>
+            <br /><br />
+            Only for e-mails automatically generated by the <a href="source-repository.html">source control</a> sytem.
+            <br /><br />
+          </td>
+          <td><a href="mailto:commits-subscribe at commons.apache.org">Subscribe</a></td>
+          <td><a href="mailto:commits-unsubscribe at commons.apache.org">Unsubscribe</a></td>
+          <td><i>read only</i></td>
+          <td><a href="http://mail-archives.apache.org/mod_mbox/commons-commits/">mail-archives.apache.org</a></td>
+          <td><a href="http://markmail.org/list/org.apache.commons.commits/">markmail.org</a><br />
+              <a href="http://www.mail-archive.com/commits@commons.apache.org/">www.mail-archive.com</a>
+          </td>
+        </tr>
+
+      </table>
+
+    </section>
+    <section name="Apache Mailing Lists">
+      <p>
+        Other mailing lists which you may find useful include:
+      </p>
+
+      <table>
+        <tr>
+          <th>Name</th>
+          <th>Subscribe</th>
+          <th>Unsubscribe</th>
+          <th>Post</th>
+          <th>Archive</th>
+          <th>Other Archives</th>
+        </tr>
+        <tr>
+          <td>
+            <strong>Apache Announce List</strong>
+            <br /><br />
+            General announcements of Apache project releases.
+            <br /><br />
+          </td>
+          <td><a class="externalLink" href="mailto:announce-subscribe at apache.org">Subscribe</a></td> 
+          <td><a class="externalLink" href="mailto:announce-unsubscribe at apache.org">Unsubscribe</a></td> 
+          <td><i>read only</i></td>
+          <td><a class="externalLink" href="http://mail-archives.apache.org/mod_mbox/www-announce/">mail-archives.apache.org</a></td> 
+          <td><a class="externalLink" href="http://markmail.org/list/org.apache.announce/">markmail.org</a><br />
+              <a class="externalLink" href="http://old.nabble.com/Apache-News-and-Announce-f109.html">old.nabble.com</a><br />
+              <a class="externalLink" href="http://www.mail-archive.com/announce@apache.org/">www.mail-archive.com</a><br />
+              <a class="externalLink" href="http://news.gmane.org/gmane.comp.apache.announce">news.gmane.org</a>
+          </td>
+        </tr>
+      </table>
+
+    </section>
+  </body>
+</document>
diff --git a/src/site/xdoc/procrun.xml b/src/site/xdoc/procrun.xml
new file mode 100644
index 0000000..7e90ce8
--- /dev/null
+++ b/src/site/xdoc/procrun.xml
@@ -0,0 +1,688 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+
+<document>
+ <properties>
+  <title>Daemon : Procrun</title>
+  <author email="mturk at apache.org">Mladen Turk</author>
+ </properties>
+
+<body>
+<section name="Introduction">
+<p>
+    Procrun is a set of applications that allow Windows users to wrap
+    (mostly) Java applications (e.g. Tomcat) as a Windows service.
+    <br></br>
+    The service can be set to automatically start when the machine boots
+    and will continue to run with no user logged onto the machine.
+</p>
+</section>
+
+<section name="Procrun monitor application">
+<p>
+    <b>Prunmgr</b> is a GUI application for monitoring and configuring procrun
+    services.
+</p>
+<p>
+    Each command line directive is in the form of <b>//XX[//ServiceName]</b>
+</p>
+<p>
+    If the <code>//ServiceName</code> parameter is omitted, then the service name is
+    assumed to be the name of the file.
+    <br/>
+    The Prunsrv application behaves in the same way,
+    so to allow both applications to reside in the same directory, the Prunmgr application
+    will remove a trailing <b>w</b> (lower-case w) from the name.
+    <br/>
+    For example if the Prunmgr application is renamed as <code>TestService.exe</code>
+    - or as <code>TestServicew.exe</code> -
+    then the default service name is <code>TestService</code>.
+</p>
+    <p>The available command line options are:</p>
+<p>
+    <table>
+    <tr><th>//ES</th>
+        <td>Edit service configuration</td>
+        <td>This is the default operation. It is called if the no option is
+            provided.
+            Starts the GUI application which allows the service configuration
+            to be modified, started and stopped.
+        </td>
+    </tr>
+    <tr><th>//MS</th>
+        <td>Monitor service</td>
+        <td>Starts the GUI application and minimizes it to the system tray.
+        </td>
+    </tr>
+    <tr><th>//MR</th>
+        <td>Monitor & run service</td>
+        <td>Starts the GUI application and minimizes it to the system tray.
+            Start the service if it is not currently running.
+        </td>
+    </tr>
+    <tr><th>//MQ</th>
+        <td>Monitor Quit</td>
+        <td>Stop any running monitor for the service.
+        </td>
+    </tr>
+    </table>
+</p>
+</section>
+
+<section name="Procrun service application">
+<p>
+    <b>Prunsrv</b> is a service application for running applications as services.
+    It can convert any application (not just Java applications) to run as a service.
+</p>
+
+<subsection name="Command line arguments">
+<p>
+    Each command line directive is in the form of <b>//XX[//ServiceName]</b>.
+</p>
+<p>
+    If the <code>//ServiceName</code> parameter is omitted, then the service name is
+    assumed to be the name of the file.
+    <br/>
+    For example if the application is renamed as <code>TestService.exe</code>,
+    then the default service name is <code>TestService</code>.
+</p>
+    <p>The available command line options are:</p>
+<p>
+    <table>
+    <tr><th>//TS</th>
+        <td>Run the service as a console application</td>
+        <td>This is the default operation. It is called if the no option is provided.
+        </td>
+    </tr>
+    <tr><th>//RS</th>
+        <td>Run the service</td>
+        <td>Called only from ServiceManager</td>
+    </tr>
+    <tr><th>//ES</th>
+        <td>Start (execute) the service</td>
+        <td></td>
+    </tr>
+    <tr><th>//SS</th>
+        <td>Stop the service</td>
+        <td></td>
+    </tr>
+    <tr><th>//US</th>
+        <td>Update service parameters</td>
+        <td></td>
+    </tr>
+    <tr><th>//IS</th>
+        <td>Install service</td>
+        <td></td>
+    </tr>
+    <tr><th>//DS</th>
+        <td>Delete service</td>
+        <td>Stops the service first if it is currently running</td>
+    </tr>
+    <tr><th>//PP[//seconds]</th>
+        <td>Pause</td>
+        <td>Default is 60 seconds</td>
+    </tr>
+    <tr><th>//VS</th>
+        <td>Version</td>
+        <td>Print version and exit (since version 1.0.3)</td>
+    </tr>
+    <tr><th>//?</th>
+        <td>Help</td>
+        <td>Print usage and exit (since version 1.0.3)</td>
+    </tr>
+    </table>
+</p>
+    <p>Starting with version <b>1.0.8</b> a more traditional command line can
+    be used in the form: <b>command [ServiceName]</b>.
+</p>
+<p>
+    <table>
+    <tr><th>run</th>
+        <td>Run the service as a console application</td>
+        <td>This is the default operation. It is called if the no option is provided
+        and has the same effect as calling <b>//TS</b>.
+        </td>
+    </tr>
+    <tr><th>service</th>
+        <td>Run the service</td>
+        <td>Called only from ServiceManager</td>
+    </tr>
+    <tr><th>start</th>
+        <td>Start the service</td>
+        <td>Synonym for <b>//ES</b></td>
+    </tr>
+    <tr><th>stop</th>
+        <td>Stop the service</td>
+        <td>Synonym for <b>//SS</b></td>
+    </tr>
+    <tr><th>update</th>
+        <td>Update service parameters</td>
+        <td>Synonym for <b>//US</b></td>
+    </tr>
+    <tr><th>install</th>
+        <td>Install service</td>
+        <td>Synonym for <b>//IS</b></td>
+    </tr>
+    <tr><th>delete</th>
+        <td>Delete service</td>
+        <td>Stops the service first if it is currently running</td>
+    </tr>
+    <tr><th>pause [seconds]</th>
+        <td>Pause</td>
+        <td>Default is 60 seconds</td>
+    </tr>
+    <tr><th>version</th>
+        <td>Version</td>
+        <td>Print version and exit</td>
+    </tr>
+    <tr><th>help</th>
+        <td>Help</td>
+        <td>Print usage and exit</td>
+    </tr>
+    </table>
+</p>
+</subsection>
+<subsection name="Command line parameters">
+<p>
+    Each command parameter is prefixed with <b>--</b> (or <b>++</b>, see below).
+    <br/>
+    If an environment variable exists with the same name as a command line parameter but
+    prefixed with <code>PR_</code> it will <b>override</b> the equivalent command line parameter.
+    <br/>
+    For example:
+<source>set PR_CLASSPATH=xx.jar</source>
+</p>
+<p>is equivalent to providing
+<source>--Classpath=xx.jar</source>
+</p>
+<p> as a command line parameter.</p>
+<p>
+If a parameter is repeated, then normally the last value takes precedence.
+However some parameters can take multiple values - for example StartParams and JvmOptions.
+If these parameters are prefixed with <b>++</b>, then the value will be appended to the existing value.
+For example:
+<source>
+--Startup=manual --Startup=auto --JvmOptions=-Done=1 ++JvmOptions=-Dtwo=2
+</source>
+will result in the following values being used:
+<source>
+Startup:
+auto
+
+JvmOptions:
+-Done=1
+-Dtwo=2
+</source>
+<br/>
+Only multi-valued parameters support this; they are indicated in the table below by <b><code>++</code></b>.
+<br></br>
+If <b><code>++</code></b> is used for a parameter that does not support multiple values,
+then it is treated the same as <b><code>--</code></b>. No error is reported.
+<br/>
+Configuration is overwritten in case <b><code>--</code></b> is used.
+For example:
+<source>
+--JvmOptions=-Dthree=3 ++JvmOptions=-Dfour=4
+</source>
+will always overwrite the JvmOptions. The resulting configuration will be:
+<source>
+Startup:
+auto
+
+JvmOptions:
+-Dthree=3
+-Dfour=4
+</source>
+However if on  <b><code>++</code></b> is used the values will be appended. For example calling the
+following after the first example
+<source>
+++JvmOptions=-Dthree=3 ++JvmOptions=-Dfour=2
+</source>
+will result in the following values being used:
+<source>
+Startup:
+auto
+
+JvmOptions:
+-Done=1
+-Dtwo=2
+-Dthree=3
+-Dfour=4
+</source>
+<br/>
+In case you intermix the <b><code>++</code></b> and <b><code>--</code></b> options, the
+last <b><code>--</code></b> parameter will cause option reset. For example:
+<source>
+--Startup=manual --Startup=auto --JvmOptions=-Done=1 ++JvmOptions=-Dtwo=2 --JvmOptions=-Dthree=3 ++JvmOptions=-Dfour=2
+</source>
+will result in the following values being used:
+<source>
+Startup:
+auto
+
+JvmOptions:
+-Dthree=3
+-Dfour=4
+</source>
+</p>
+<p>
+When updating a service (//US or update command), using <b><code>--</code></b> 
+will replace any existing parameter with the new setting.
+<br/>
+For multi-valued parameters, using the <b><code>++</code></b> option qualifier 
+will add the new value(s) to any existing value(s).
+</p>
+<p>
+    <table>
+    <tr>
+    <th>Parameter Name  </th>
+    <th>Default</th>
+    <th>Description</th>
+    </tr>
+    <tr>
+    <td>--Description</td>
+    <td></td>
+    <td>Service name description (maximum 1024 characters)</td>
+    </tr>
+    <tr>
+    <td>--DisplayName</td>
+    <td>ServiceName</td>
+    <td>Service display name</td>
+    </tr>
+    <tr>
+    <td>--Install</td>
+    <td>procrun.exe //RS//ServiceName</td>
+    <td>Install image</td>
+    </tr>
+    <tr>
+    <td>--Startup</td>
+    <td>manual</td>
+    <td>Service startup mode can be either <b>auto</b> or <b>manual</b></td>
+    </tr>
+    <tr>
+    <td>--Type</td>
+    <td></td>
+    <td>Service type can be <b>interactive</b> to allow the service to interact with the desktop.
+    Use this option only with Local system accounts.</td>
+    </tr>
+    <tr>
+    <td>++DependsOn</td>
+    <td></td>
+    <td>List of services that this service depends on. Dependent services
+        are separated using either <b>#</b> or <b>;</b> characters</td>
+    </tr>
+    <tr>
+    <td>++Environment</td>
+    <td></td>
+    <td>List of environment variables that will be provided to the service
+        in the form <b>key=value</b>. They are separated using either
+        <b>#</b> or <b>;</b> characters.
+        If you need to embed either # or ; character within a value put them inside single quotes.
+    </td>
+    </tr>
+    <tr>
+    <td>--User</td>
+    <td></td>
+    <td>User account used for running executable. It is used only for
+        StartMode <b>Java</b> or <b>exe</b> and enables running applications
+        as a service under an account without the LogonAsService privilege.</td>
+    </tr>
+    <tr>
+    <td>--Password</td>
+    <td></td>
+    <td>Password for user account set by --User parameter</td>
+    </tr>
+    <tr>
+    <td>--ServiceUser</td>
+    <td></td>
+    <td>Specifies the name of the account under which the service should run.
+        Use an account name in the form <i>DomainName\UserName</i>.
+        The service process will be logged on as this user.
+        if the account belongs to the built-in domain, you can specify <i>.\UserName</i>
+    </td>
+    </tr>
+    <tr>
+    <td>--ServicePassword</td>
+    <td></td>
+    <td>Password for user account set by --ServiceUser parameter</td>
+    </tr>
+    <tr>
+    <td>--LibraryPath</td>
+    <td></td>
+    <td>Directory added to the search path used to locate the DLLs for the JVM.
+        This directory is added both in front of the <b>PATH</b> environment variable
+        and as a parameter to the <b>SetDLLDirectory</b> function.
+    </td>
+    </tr>
+    <tr>
+    <td>--JavaHome</td>
+    <td>JAVA_HOME</td>
+    <td>Set a different JAVA_HOME than defined by JAVA_HOME environment
+        variable</td>
+    </tr>
+    <tr>
+    <td>--Jvm</td>
+    <td>auto</td>
+    <td>Use either <b>auto</b> (i.e. find the JVM from the Windows registry) or specify the full path to the <b>jvm.dll</b>.
+        You can use environment variable expansion here.</td>
+    </tr>
+    <tr>
+    <td>++JvmOptions</td>
+    <td>-Xrs</td>
+    <td>List of options in the form of <b>-D</b> or <b>-X</b> that will be
+        passed to the JVM. The options are separated using either
+        <b>#</b> or <b>;</b> characters. if you need to embed either # or ;
+        character put them inside single quotes. (Not used in <b>exe</b> mode.)</td>
+    </tr>
+    <tr>
+    <td>--Classpath</td>
+    <td></td>
+    <td>Set the Java classpath. (Not used in <b>exe</b> mode.)</td>
+    </tr>
+    <tr>
+    <td>--JvmMs</td>
+    <td></td>
+    <td>Initial memory pool size in MB. (Not used in <b>exe</b> mode.)</td>
+    </tr>
+    <tr>
+    <td>--JvmMx</td>
+    <td></td>
+    <td>Maximum memory pool size in MB. (Not used in <b>exe</b> mode.)</td>
+    </tr>
+    <tr>
+    <td>--JvmSs</td>
+    <td></td>
+    <td>Thread stack size in KB. (Not used in <b>exe</b> mode.)</td>
+    </tr>
+    <tr>
+    <td>--StartMode</td>
+    <td></td>
+    <td>One of <b>jvm</b>, <b>Java</b> or <b>exe</b>.
+    The modes are:
+    <ul>
+    <li>jvm - start Java in-process. Depends on jvm.dll, see <b>--Jvm</b>.</li>
+    <li>Java - same as exe, but automatically uses the default Java executable, i.e. %JAVA_HOME%\bin\java.exe.
+    Make sure JAVA_HOME is set correctly, or use --JavaHome to provide the correct location.
+    If neither is set, procrun will try to find the default JDK (not JRE) from the Windows registry.</li>
+    <li>exe - run the image as a separate process</li>
+    </ul>
+    </td>
+    </tr>
+    <tr>
+    <tr>
+    <td>--StartImage</td>
+    <td></td>
+    <td>Executable that will be run. Only applies to <b>exe</b> mode.</td>
+    </tr>
+    <tr>
+    <td>--StartPath</td>
+    <td></td>
+    <td>Working path for the start image executable.</td>
+    </tr>
+    <tr>
+    <td>--StartClass</td>
+    <td>Main</td>
+    <td>Class that contains the startup method.
+    Applies to the <b>jvm</b> and <b>Java</b> modes.  (Not used in <b>exe</b> mode.)
+    </td>
+    </tr>
+    <tr>
+    <td>--StartMethod</td>
+    <td>main</td>
+    <td>Name of method to be called when service is started.
+    It must be <code>static void</code> and have argument <code>(String args[])</code>.
+    Only applies to <b>jvm</b> mode - in <b>Java</b> mode, the <b>main</b> method is always used.
+    <br />
+    <b>Note:</b> in <code>jvm</code> mode, the start method should not return until the stop method
+    has been called.
+    </td>
+    </tr>
+    <tr>
+    <td>++StartParams</td>
+    <td></td>
+    <td>List of parameters that will be passed to either StartImage or
+        StartClass. Parameters are separated using either <b>#</b> or
+        <b>;</b> character.</td>
+    </tr>
+    <tr>
+    <td>--StopMode</td>
+    <td></td>
+    <td>One of <b>jvm</b>, <b>Java</b> or <b>exe</b>.
+    See <b>--StartMode</b> for further details.
+    </td>
+    </tr>
+    <td>--StopImage</td>
+    <td></td>
+    <td>Executable that will be run on Stop service signal. Only applies to <b>exe</b> mode.</td>
+    </tr>
+    <tr>
+    <td>--StopPath</td>
+    <td></td>
+    <td>Working path for the stop image executable. Does not apply to <b>jvm</b> mode.</td>
+    </tr>
+    <tr>
+    <td>--StopClass</td>
+    <td>Main</td>
+    <td>Class that will be used on Stop service signal.
+    Applies to the <b>jvm</b> and <b>Java</b> modes.
+    </td>
+    </tr>
+    <tr>
+    <td>--StopMethod</td>
+    <td>main</td>
+    <td>Name of method to be called when service is stopped.
+    It must be <code>static void</code> and have argument <code>(String args[])</code>.
+    Only applies to <b>jvm</b> mode.
+    In <b>Java</b> mode, the <b>main</b> method is always used.
+    </td>
+    </tr>
+    <tr>
+    <td>++StopParams</td>
+    <td></td>
+    <td>List of parameters that will be passed to either StopImage or
+        StopClass. Parameters are separated using either <b>#</b> or
+        <b>;</b> character.</td>
+    </tr>
+    <tr>
+    <td>--StopTimeout</td>
+    <td>No Timeout</td>
+    <td>Defines the timeout in seconds that procrun waits for service to
+        exit gracefully.</td>
+    </tr>
+    <tr>
+    <td>--LogPath</td>
+    <td>%SystemRoot%\System32\LogFiles\Apache</td>
+    <td>Defines the path for logging. Creates the directory if necessary.</td>
+    </tr>
+    <tr>
+    <td>--LogPrefix</td>
+    <td>commons-daemon</td>
+    <td>Defines the service log filename prefix. The log file is created in the LogPath directory with
+    <code>.YEAR-MONTH-DAY.log</code> suffix</td>
+    </tr>
+    <tr>
+    <td>--LogLevel</td>
+    <td>Info</td>
+    <td>Defines the logging level and can be either <b>Error</b>,
+        <b>Info</b>, <b>Warn</b> or <b>Debug</b>. (Case insensitive).
+    </td>
+    </tr>
+    <tr>
+    <td>--LogJniMessages</td>
+    <td>0</td>
+    <td>Set this non-zero (e.g. 1) to capture JVM jni debug messages in the procrun log file.
+    Is not needed if stdout/stderr redirection is being used.
+    <!-- TODO: what if only one of stdout/stderr is being redirected? -->
+    Only applies to <b>jvm</b> mode.
+    </td>
+    </tr>
+    <tr>
+    <td>--StdOutput</td>
+    <td></td>
+    <td>Redirected stdout filename. If named <b>auto</b> file is created
+    inside <b>LogPath</b> with the name <b>service-stdout.YEAR-MONTH-DAY.log</b>.</td>
+    </tr>
+    <tr>
+    <td>--StdError</td>
+    <td></td>
+    <td>Redirected stderr filename. If named <b>auto</b> file is created
+    in the <b>LogPath</b> directory with the name <b>service-stderr.YEAR-MONTH-DAY.log</b>.</td>
+    </tr>
+    <tr>
+    <td>--PidFile</td>
+    <td></td>
+    <td>Defines the file name for storing the running process id.
+    Actual file is created in the <b>LogPath</b> directory</td>
+    </tr>
+    </table>
+</p>
+</subsection>
+<subsection name="Installing services">
+<p>
+To install the service, you need to use the <b>//IS</b> parameter.
+</p>
+<p>
+<screen>
+<h4>Install the service named 'TestService'</h4>
+<source>
+prunsrv //IS//TestService --DisplayName="Test Service" \
+        --Install=prunsrv.exe --Jvm=auto --StartMode=jvm --StopMode=jvm \
+        --StartClass=org.apache.SomeStartClass --StartParams=arg1;arg2;arg3 \
+        --StopClass=org.apache.SomeStopClass --StopParams=arg1#arg2
+</source>
+</screen>
+</p>
+</subsection>
+<subsection name="Updating services">
+<p>
+To update the service parameters, you need to use the <b>//US</b> parameter.
+</p>
+<p>
+<screen>
+<h4>Update the service named 'TestService'</h4>
+<source>
+prunsrv //US//TestService --Description="Some Dummy Test Service" \
+        --Startup=auto --Classpath=%CLASSPATH%;test.jar
+</source>
+</screen>
+</p>
+</subsection>
+<subsection name="Removing services">
+<p>
+To remove the service, you need to use the <b>//DS</b> parameter.
+If the service is running it will be stopped and then deleted.
+</p>
+<p>
+<screen>
+<h4>Remove the service named 'TestService'</h4>
+<source>prunsrv //DS//TestService</source>
+</screen>
+</p>
+</subsection>
+
+<subsection name="Debugging services">
+<p>
+To run the service in console mode, you need to use the <b>//TS</b> parameter.
+The service shutdown can be initiated by pressing <b>CTRL+C</b> or
+<b>CTRL+BREAK</b>.
+If you rename the prunsrv.exe to testservice.exe then you can just execute the
+testservice.exe and this command mode will be executed by default.
+</p>
+<p>
+<screen>
+<h4>Run the service named 'TestService' in console mode</h4>
+<source>prunsrv //TS//TestService [additional arguments]</source>
+</screen>
+</p>
+</subsection>
+
+</section>
+
+<section name="Using Procrun in jvm mode">
+<p>
+To interface with the Procrun service application (prunsrv) using the <b>jvm</b> mode,
+you need to create a class with the appropriate method(s).
+For example:
+<source>
+class MyClass;
+// N.B. error handling not shown
+static void main(String [] args){
+    String mode = args[0];
+    if ("start".equals(mode){
+        // process service start function
+    }
+    etc.
+}
+</source>
+This should be configured as follows:
+<source>
+--Classpath MyClass.jar
+--StartMode jvm --StartClass MyClass --StartParams start
+--StopMode  jvm --StopClass  MyClass --StopParams  stop
+</source>
+The above example uses a single 'main' method, and uses a string parameter to specify whether the service function
+is start or stop.
+<br></br>
+Alternatively, you can use different method names for the service start and stop functions:
+<source>
+class MyClass;
+// N.B. error handling not shown
+static void start(String [] args){
+        // process service start function
+    }
+static void stop(String [] args){
+        // process service stop function
+    }
+}
+</source>
+This should be configured as follows:
+<source>
+--Classpath MyClass.jar
+--StartMode jvm --StartClass MyClass --StartMethod start
+--StopMode  jvm --StopClass  MyClass --StopMethod  stop
+</source>
+Note that the method handling service start should create and start a separate thread
+to carry out the processing, and then return.
+The start and stop methods are called from different threads.
+</p>
+</section>
+
+<section name="Using Procrun in Java or exe mode">
+<p>
+When using the <b>Java</b> or <b>exe</b> modes, the Procrun service application (prunsrv)
+launches the target application in a separate process.
+The "stop" application needs to communicate somehow with the "start" application to tell it to stop.
+For example, using RPC.
+</p>
+</section>
+
+<section name="Windows Registry Usage">
+<p>
+The basic Service definitions are maintained under the registry key:
+<source>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<ServiceName></source>
+Additional parameters are stored in the registry at:
+<source>HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\ProcRun 2.0\<ServiceName>\Parameters</source>
+</p>
+<p>
+On 64-bit Windows procrun always uses 32-bit registry view for storing the configuration.
+This means that parameters will be stored inside:
+<source>HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\ProcRun 2.0\<ServiceName></source>
+</p>
+</section>
+</body>
+</document>
diff --git a/src/test/java/org/apache/commons/daemon/SimpleDaemon.java b/src/test/java/org/apache/commons/daemon/SimpleDaemon.java
index 0acea37..d7069d3 100644
--- a/src/test/java/org/apache/commons/daemon/SimpleDaemon.java
+++ b/src/test/java/org/apache/commons/daemon/SimpleDaemon.java
@@ -15,8 +15,6 @@
  *  limitations under the License.
  */
 
-/* @version $Id: SimpleDaemon.java 1130635 2011-06-02 16:29:44Z mturk $ */
-
 package org.apache.commons.daemon;
 
 import java.io.*;
@@ -29,6 +27,9 @@ import org.apache.commons.daemon.Daemon;
 import org.apache.commons.daemon.DaemonController;
 import org.apache.commons.daemon.DaemonContext;
 
+/**
+ *  @version $Id: SimpleDaemon.java 1204006 2011-11-19 16:09:15Z ggregory $ 
+ */
 public class SimpleDaemon implements Daemon, Runnable, DaemonUserSignal {
 
     private ServerSocket server=null;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/commons-daemon.git



More information about the pkg-java-commits mailing list