Modified: 
websites/production/commons/content/proper/commons-daemon/apidocs/src-html/org/apache/commons/daemon/support/DaemonWrapper.html
==============================================================================
--- 
websites/production/commons/content/proper/commons-daemon/apidocs/src-html/org/apache/commons/daemon/support/DaemonWrapper.html
 (original)
+++ 
websites/production/commons/content/proper/commons-daemon/apidocs/src-html/org/apache/commons/daemon/support/DaemonWrapper.html
 Tue Jan 14 12:30:25 2025
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML>
-<html lang="en">
+<html lang>
 <head>
-<!-- Generated by javadoc (17) -->
+<!-- Generated by javadoc (23) -->
 <title>Source code</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta name="description" content="source: package: 
org.apache.commons.daemon.support, class: DaemonWrapper">
 <meta name="generator" content="javadoc/SourceToHTMLConverter">
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" 
title="Style">
+<link rel="stylesheet" type="text/css" 
href="../../../../../../resource-files/stylesheet.css" title="Style">
 </head>
 <body class="source-page">
 <main role="main">
@@ -60,242 +60,245 @@
 <span class="source-line-no">047</span><span id="line-47">    private final 
Invoker             startup;</span>
 <span class="source-line-no">048</span><span id="line-48">    private final 
Invoker             shutdown;</span>
 <span class="source-line-no">049</span><span id="line-49"></span>
-<span class="source-line-no">050</span><span id="line-50">    public 
DaemonWrapper()</span>
-<span class="source-line-no">051</span><span id="line-51">    {</span>
-<span class="source-line-no">052</span><span id="line-52">        config   = 
new DaemonConfiguration();</span>
-<span class="source-line-no">053</span><span id="line-53">        startup  = 
new Invoker();</span>
-<span class="source-line-no">054</span><span id="line-54">        shutdown = 
new Invoker();</span>
-<span class="source-line-no">055</span><span id="line-55">    }</span>
-<span class="source-line-no">056</span><span id="line-56"></span>
-<span class="source-line-no">057</span><span id="line-57">    /**</span>
-<span class="source-line-no">058</span><span id="line-58">     * Called from 
DaemonLoader on init stage.</span>
-<span class="source-line-no">059</span><span id="line-59">     * 
&lt;p&gt;</span>
-<span class="source-line-no">060</span><span id="line-60">     * Accepts the 
following configuration arguments:</span>
-<span class="source-line-no">061</span><span id="line-61">     * 
&lt;ul&gt;</span>
-<span class="source-line-no">062</span><span id="line-62">     * 
&lt;li&gt;-daemon-properties: - load DaemonConfiguration properties from the 
specified file to act as defaults&lt;/li&gt;</span>
-<span class="source-line-no">063</span><span id="line-63">     * 
&lt;li&gt;-start: set start class name&lt;/li&gt;</span>
-<span class="source-line-no">064</span><span id="line-64">     * 
&lt;li&gt;-start-method: set start method name&lt;/li&gt;</span>
-<span class="source-line-no">065</span><span id="line-65">     * 
&lt;li&gt;-stop: set stop class name&lt;/li&gt;</span>
-<span class="source-line-no">066</span><span id="line-66">     * 
&lt;li&gt;-stop-method: set stop method name&lt;/li&gt;</span>
-<span class="source-line-no">067</span><span id="line-67">     * 
&lt;li&gt;-stop-argument: set optional argument to stop method&lt;/li&gt;</span>
-<span class="source-line-no">068</span><span id="line-68">     * 
&lt;li&gt;Anything else is treated as a startup argument&lt;/li&gt;</span>
-<span class="source-line-no">069</span><span id="line-69">     * 
&lt;/ul&gt;</span>
-<span class="source-line-no">070</span><span id="line-70">     * 
&lt;p&gt;</span>
-<span class="source-line-no">071</span><span id="line-71">     * The following 
"-daemon-properties" are recognized:</span>
-<span class="source-line-no">072</span><span id="line-72">     * 
&lt;ul&gt;</span>
-<span class="source-line-no">073</span><span id="line-73">     * 
&lt;li&gt;args (startup argument)&lt;/li&gt;</span>
-<span class="source-line-no">074</span><span id="line-74">     * 
&lt;li&gt;start&lt;/li&gt;</span>
-<span class="source-line-no">075</span><span id="line-75">     * 
&lt;li&gt;start.method&lt;/li&gt;</span>
-<span class="source-line-no">076</span><span id="line-76">     * 
&lt;li&gt;stop&lt;/li&gt;</span>
-<span class="source-line-no">077</span><span id="line-77">     * 
&lt;li&gt;stop.method&lt;/li&gt;</span>
-<span class="source-line-no">078</span><span id="line-78">     * 
&lt;li&gt;stop.args&lt;/li&gt;</span>
-<span class="source-line-no">079</span><span id="line-79">     * 
&lt;/ul&gt;</span>
-<span class="source-line-no">080</span><span id="line-80">     * These are 
used to set the corresponding item if it has not already been</span>
-<span class="source-line-no">081</span><span id="line-81">     * set by the 
command arguments. &lt;b&gt;However, note that args and stop.args are</span>
-<span class="source-line-no">082</span><span id="line-82">     * appended to 
any existing values.&lt;/b&gt;</span>
-<span class="source-line-no">083</span><span id="line-83">     */</span>
-<span class="source-line-no">084</span><span id="line-84">    @Override</span>
-<span class="source-line-no">085</span><span id="line-85">    public void 
init(final DaemonContext context)</span>
-<span class="source-line-no">086</span><span id="line-86">        throws 
Exception</span>
-<span class="source-line-no">087</span><span id="line-87">    {</span>
-<span class="source-line-no">088</span><span id="line-88">        final 
String[] args = context.getArguments();</span>
-<span class="source-line-no">089</span><span id="line-89"></span>
-<span class="source-line-no">090</span><span id="line-90">        if (args != 
null) {</span>
-<span class="source-line-no">091</span><span id="line-91">            int 
i;</span>
-<span class="source-line-no">092</span><span id="line-92">            // Parse 
our arguments and remove them</span>
-<span class="source-line-no">093</span><span id="line-93">            // from 
the final argument array we are</span>
-<span class="source-line-no">094</span><span id="line-94">            // 
passing to our child.</span>
-<span class="source-line-no">095</span><span id="line-95">            
arguments:</span>
-<span class="source-line-no">096</span><span id="line-96">            for (i = 
0; i &lt; args.length; i++) {</span>
-<span class="source-line-no">097</span><span id="line-97">                if 
(args[i].equals("--")) {</span>
-<span class="source-line-no">098</span><span id="line-98">                    
// Done with argument processing</span>
-<span class="source-line-no">099</span><span id="line-99">                    
break;</span>
-<span class="source-line-no">100</span><span id="line-100">                
}</span>
-<span class="source-line-no">101</span><span id="line-101">                
switch (args[i]) {</span>
-<span class="source-line-no">102</span><span id="line-102">                    
case "-daemon-properties":</span>
-<span class="source-line-no">103</span><span id="line-103">                    
    if (++i == args.length) {</span>
-<span class="source-line-no">104</span><span id="line-104">                    
        throw new IllegalArgumentException(args[i - 1]);</span>
-<span class="source-line-no">105</span><span id="line-105">                    
    }</span>
-<span class="source-line-no">106</span><span id="line-106">                    
    configFileName = args[i];</span>
-<span class="source-line-no">107</span><span id="line-107">                    
    break;</span>
-<span class="source-line-no">108</span><span id="line-108">                    
case "-start":</span>
-<span class="source-line-no">109</span><span id="line-109">                    
    if (++i == args.length) {</span>
-<span class="source-line-no">110</span><span id="line-110">                    
        throw new IllegalArgumentException(args[i - 1]);</span>
-<span class="source-line-no">111</span><span id="line-111">                    
    }</span>
-<span class="source-line-no">112</span><span id="line-112">                    
    startup.setClassName(args[i]);</span>
-<span class="source-line-no">113</span><span id="line-113">                    
    break;</span>
-<span class="source-line-no">114</span><span id="line-114">                    
case "-start-method":</span>
-<span class="source-line-no">115</span><span id="line-115">                    
    if (++i == args.length) {</span>
-<span class="source-line-no">116</span><span id="line-116">                    
        throw new IllegalArgumentException(args[i - 1]);</span>
-<span class="source-line-no">117</span><span id="line-117">                    
    }</span>
-<span class="source-line-no">118</span><span id="line-118">                    
    startup.setMethodName(args[i]);</span>
-<span class="source-line-no">119</span><span id="line-119">                    
    break;</span>
-<span class="source-line-no">120</span><span id="line-120">                    
case "-stop":</span>
-<span class="source-line-no">121</span><span id="line-121">                    
    if (++i == args.length) {</span>
-<span class="source-line-no">122</span><span id="line-122">                    
        throw new IllegalArgumentException(args[i - 1]);</span>
-<span class="source-line-no">123</span><span id="line-123">                    
    }</span>
-<span class="source-line-no">124</span><span id="line-124">                    
    shutdown.setClassName(args[i]);</span>
-<span class="source-line-no">125</span><span id="line-125">                    
    break;</span>
-<span class="source-line-no">126</span><span id="line-126">                    
case "-stop-method":</span>
-<span class="source-line-no">127</span><span id="line-127">                    
    if (++i == args.length) {</span>
-<span class="source-line-no">128</span><span id="line-128">                    
        throw new IllegalArgumentException(args[i - 1]);</span>
-<span class="source-line-no">129</span><span id="line-129">                    
    }</span>
-<span class="source-line-no">130</span><span id="line-130">                    
    shutdown.setMethodName(args[i]);</span>
-<span class="source-line-no">131</span><span id="line-131">                    
    break;</span>
-<span class="source-line-no">132</span><span id="line-132">                    
case "-stop-argument":</span>
-<span class="source-line-no">133</span><span id="line-133">                    
    if (++i == args.length) {</span>
-<span class="source-line-no">134</span><span id="line-134">                    
        throw new IllegalArgumentException(args[i - 1]);</span>
-<span class="source-line-no">135</span><span id="line-135">                    
    }</span>
-<span class="source-line-no">136</span><span id="line-136">                    
    final String[] aa = new String[1];</span>
-<span class="source-line-no">137</span><span id="line-137">                    
    aa[0] = args[i];</span>
-<span class="source-line-no">138</span><span id="line-138">                    
    shutdown.addArguments(aa);</span>
-<span class="source-line-no">139</span><span id="line-139">                    
    break;</span>
-<span class="source-line-no">140</span><span id="line-140">                    
default:</span>
-<span class="source-line-no">141</span><span id="line-141">                    
    // This is not our option.</span>
-<span class="source-line-no">142</span><span id="line-142">                    
    // Everything else will be forwarded to the main</span>
-<span class="source-line-no">143</span><span id="line-143">                    
    break arguments;</span>
-<span class="source-line-no">144</span><span id="line-144">                
}</span>
-<span class="source-line-no">145</span><span id="line-145">            }</span>
-<span class="source-line-no">146</span><span id="line-146">            if 
(args.length &gt; i) {</span>
-<span class="source-line-no">147</span><span id="line-147">                
final String[] copy = new String[args.length - i];</span>
-<span class="source-line-no">148</span><span id="line-148">                
System.arraycopy(args, i, copy, 0, copy.length);</span>
-<span class="source-line-no">149</span><span id="line-149">                
startup.addArguments(copy);</span>
-<span class="source-line-no">150</span><span id="line-150">            }</span>
-<span class="source-line-no">151</span><span id="line-151">        }</span>
-<span class="source-line-no">152</span><span id="line-152">        if 
(config.load(configFileName)) {</span>
-<span class="source-line-no">153</span><span id="line-153">            // 
Setup params if not set via cmdline.</span>
-<span class="source-line-no">154</span><span id="line-154">            
startup.setClassName(config.getProperty(START_CLASS));</span>
-<span class="source-line-no">155</span><span id="line-155">            
startup.setMethodName(config.getProperty(START_METHOD));</span>
-<span class="source-line-no">156</span><span id="line-156">            // 
Merge the config with command line arguments</span>
-<span class="source-line-no">157</span><span id="line-157">            
startup.addArguments(config.getPropertyArray(ARGS));</span>
-<span class="source-line-no">158</span><span id="line-158"></span>
-<span class="source-line-no">159</span><span id="line-159">            
shutdown.setClassName(config.getProperty(STOP_CLASS));</span>
-<span class="source-line-no">160</span><span id="line-160">            
shutdown.setMethodName(config.getProperty(STOP_METHOD));</span>
-<span class="source-line-no">161</span><span id="line-161">            
shutdown.addArguments(config.getPropertyArray(STOP_ARGS));</span>
-<span class="source-line-no">162</span><span id="line-162">        }</span>
-<span class="source-line-no">163</span><span id="line-163">        
startup.validate();</span>
-<span class="source-line-no">164</span><span id="line-164">        
shutdown.validate();</span>
-<span class="source-line-no">165</span><span id="line-165">    }</span>
-<span class="source-line-no">166</span><span id="line-166"></span>
-<span class="source-line-no">167</span><span id="line-167">    /**</span>
-<span class="source-line-no">168</span><span id="line-168">     */</span>
-<span class="source-line-no">169</span><span id="line-169">    @Override</span>
-<span class="source-line-no">170</span><span id="line-170">    public void 
start()</span>
-<span class="source-line-no">171</span><span id="line-171">        throws 
Exception</span>
-<span class="source-line-no">172</span><span id="line-172">    {</span>
-<span class="source-line-no">173</span><span id="line-173">        
startup.invoke();</span>
-<span class="source-line-no">174</span><span id="line-174">    }</span>
-<span class="source-line-no">175</span><span id="line-175"></span>
-<span class="source-line-no">176</span><span id="line-176">    /**</span>
-<span class="source-line-no">177</span><span id="line-177">     */</span>
-<span class="source-line-no">178</span><span id="line-178">    @Override</span>
-<span class="source-line-no">179</span><span id="line-179">    public void 
stop()</span>
-<span class="source-line-no">180</span><span id="line-180">        throws 
Exception</span>
-<span class="source-line-no">181</span><span id="line-181">    {</span>
-<span class="source-line-no">182</span><span id="line-182">        
shutdown.invoke();</span>
-<span class="source-line-no">183</span><span id="line-183">    }</span>
-<span class="source-line-no">184</span><span id="line-184"></span>
-<span class="source-line-no">185</span><span id="line-185">    /**</span>
-<span class="source-line-no">186</span><span id="line-186">     */</span>
-<span class="source-line-no">187</span><span id="line-187">    @Override</span>
-<span class="source-line-no">188</span><span id="line-188">    public void 
destroy()</span>
-<span class="source-line-no">189</span><span id="line-189">    {</span>
-<span class="source-line-no">190</span><span id="line-190">        // Nothing 
for the moment</span>
-<span class="source-line-no">191</span><span id="line-191">        
System.err.println("DaemonWrapper: instance " + this.hashCode() + " 
destroy");</span>
-<span class="source-line-no">192</span><span id="line-192">    }</span>
-<span class="source-line-no">193</span><span id="line-193"></span>
-<span class="source-line-no">194</span><span id="line-194">    // Internal 
class for wrapping the start/stop methods</span>
-<span class="source-line-no">195</span><span id="line-195">    static class 
Invoker</span>
-<span class="source-line-no">196</span><span id="line-196">    {</span>
-<span class="source-line-no">197</span><span id="line-197">        private 
String      name;</span>
-<span class="source-line-no">198</span><span id="line-198">        private 
String      call;</span>
-<span class="source-line-no">199</span><span id="line-199">        private 
String[]    args;</span>
-<span class="source-line-no">200</span><span id="line-200">        private 
Method      inst;</span>
-<span class="source-line-no">201</span><span id="line-201">        private 
Class&lt;?&gt;    main;</span>
-<span class="source-line-no">202</span><span id="line-202"></span>
-<span class="source-line-no">203</span><span id="line-203">        protected 
Invoker()</span>
-<span class="source-line-no">204</span><span id="line-204">        {</span>
-<span class="source-line-no">205</span><span id="line-205">        }</span>
-<span class="source-line-no">206</span><span id="line-206"></span>
-<span class="source-line-no">207</span><span id="line-207">        protected 
void setClassName(final String name)</span>
-<span class="source-line-no">208</span><span id="line-208">        {</span>
-<span class="source-line-no">209</span><span id="line-209">            if 
(this.name == null) {</span>
-<span class="source-line-no">210</span><span id="line-210">                
this.name = name;</span>
-<span class="source-line-no">211</span><span id="line-211">            }</span>
-<span class="source-line-no">212</span><span id="line-212">        }</span>
-<span class="source-line-no">213</span><span id="line-213">        protected 
void setMethodName(final String name)</span>
-<span class="source-line-no">214</span><span id="line-214">        {</span>
-<span class="source-line-no">215</span><span id="line-215">            if 
(this.call == null) {</span>
-<span class="source-line-no">216</span><span id="line-216">                
this.call = name;</span>
-<span class="source-line-no">217</span><span id="line-217">            }</span>
-<span class="source-line-no">218</span><span id="line-218">        }</span>
-<span class="source-line-no">219</span><span id="line-219">        protected 
void addArguments(final String[] args)</span>
-<span class="source-line-no">220</span><span id="line-220">        {</span>
-<span class="source-line-no">221</span><span id="line-221">            if 
(args != null) {</span>
-<span class="source-line-no">222</span><span id="line-222">                
final ArrayList&lt;String&gt; aa = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">223</span><span id="line-223">                if 
(this.args != null) {</span>
-<span class="source-line-no">224</span><span id="line-224">                    
aa.addAll(Arrays.asList(this.args));</span>
-<span class="source-line-no">225</span><span id="line-225">                
}</span>
-<span class="source-line-no">226</span><span id="line-226">                
aa.addAll(Arrays.asList(args));</span>
-<span class="source-line-no">227</span><span id="line-227">                
this.args = aa.toArray(DaemonConfiguration.EMPTY_STRING_ARRAY);</span>
-<span class="source-line-no">228</span><span id="line-228">            }</span>
-<span class="source-line-no">229</span><span id="line-229">        }</span>
-<span class="source-line-no">230</span><span id="line-230"></span>
-<span class="source-line-no">231</span><span id="line-231">        protected 
void invoke()</span>
-<span class="source-line-no">232</span><span id="line-232">            throws 
Exception</span>
-<span class="source-line-no">233</span><span id="line-233">        {</span>
-<span class="source-line-no">234</span><span id="line-234">            if 
(name.equals("System") &amp;&amp; call.equals("exit")) {</span>
-<span class="source-line-no">235</span><span id="line-235">                // 
Just call a System.exit()</span>
-<span class="source-line-no">236</span><span id="line-236">                // 
The start method was probably installed</span>
-<span class="source-line-no">237</span><span id="line-237">                // 
a shutdown hook.</span>
-<span class="source-line-no">238</span><span id="line-238">                
System.exit(0);</span>
-<span class="source-line-no">239</span><span id="line-239">            }</span>
-<span class="source-line-no">240</span><span id="line-240">            else 
{</span>
-<span class="source-line-no">241</span><span id="line-241">                
Object obj   = null;</span>
-<span class="source-line-no">242</span><span id="line-242">                if 
((inst.getModifiers() &amp; Modifier.STATIC) == 0) {</span>
-<span class="source-line-no">243</span><span id="line-243">                    
// We only need object instance for non-static methods.</span>
-<span class="source-line-no">244</span><span id="line-244">                    
obj = main.getConstructor().newInstance();</span>
-<span class="source-line-no">245</span><span id="line-245">                
}</span>
-<span class="source-line-no">246</span><span id="line-246">                
final Object[] arg = new Object[1];</span>
-<span class="source-line-no">247</span><span id="line-247"></span>
-<span class="source-line-no">248</span><span id="line-248">                
arg[0] = args;</span>
-<span class="source-line-no">249</span><span id="line-249">                
inst.invoke(obj, arg);</span>
-<span class="source-line-no">250</span><span id="line-250">            }</span>
-<span class="source-line-no">251</span><span id="line-251">        }</span>
-<span class="source-line-no">252</span><span id="line-252">        // Load the 
class using reflection</span>
-<span class="source-line-no">253</span><span id="line-253">        protected 
void validate()</span>
-<span class="source-line-no">254</span><span id="line-254">            throws 
Exception</span>
-<span class="source-line-no">255</span><span id="line-255">        {</span>
-<span class="source-line-no">256</span><span id="line-256">            /* 
Check the class name */</span>
-<span class="source-line-no">257</span><span id="line-257">            if 
(name == null) {</span>
-<span class="source-line-no">258</span><span id="line-258">                
name = "System";</span>
-<span class="source-line-no">259</span><span id="line-259">                
call = "exit";</span>
-<span class="source-line-no">260</span><span id="line-260">                
return;</span>
-<span class="source-line-no">261</span><span id="line-261">            }</span>
-<span class="source-line-no">262</span><span id="line-262">            if 
(args == null) {</span>
-<span class="source-line-no">263</span><span id="line-263">                
args = new String[0];</span>
+<span class="source-line-no">050</span><span id="line-50">    /**</span>
+<span class="source-line-no">051</span><span id="line-51">     * Constructs a 
new initialized instance.</span>
+<span class="source-line-no">052</span><span id="line-52">     */</span>
+<span class="source-line-no">053</span><span id="line-53">    public 
DaemonWrapper()</span>
+<span class="source-line-no">054</span><span id="line-54">    {</span>
+<span class="source-line-no">055</span><span id="line-55">        config   = 
new DaemonConfiguration();</span>
+<span class="source-line-no">056</span><span id="line-56">        startup  = 
new Invoker();</span>
+<span class="source-line-no">057</span><span id="line-57">        shutdown = 
new Invoker();</span>
+<span class="source-line-no">058</span><span id="line-58">    }</span>
+<span class="source-line-no">059</span><span id="line-59"></span>
+<span class="source-line-no">060</span><span id="line-60">    /**</span>
+<span class="source-line-no">061</span><span id="line-61">     * Called from 
DaemonLoader on init stage.</span>
+<span class="source-line-no">062</span><span id="line-62">     * 
&lt;p&gt;</span>
+<span class="source-line-no">063</span><span id="line-63">     * Accepts the 
following configuration arguments:</span>
+<span class="source-line-no">064</span><span id="line-64">     * 
&lt;ul&gt;</span>
+<span class="source-line-no">065</span><span id="line-65">     * 
&lt;li&gt;-daemon-properties: - load DaemonConfiguration properties from the 
specified file to act as defaults&lt;/li&gt;</span>
+<span class="source-line-no">066</span><span id="line-66">     * 
&lt;li&gt;-start: set start class name&lt;/li&gt;</span>
+<span class="source-line-no">067</span><span id="line-67">     * 
&lt;li&gt;-start-method: set start method name&lt;/li&gt;</span>
+<span class="source-line-no">068</span><span id="line-68">     * 
&lt;li&gt;-stop: set stop class name&lt;/li&gt;</span>
+<span class="source-line-no">069</span><span id="line-69">     * 
&lt;li&gt;-stop-method: set stop method name&lt;/li&gt;</span>
+<span class="source-line-no">070</span><span id="line-70">     * 
&lt;li&gt;-stop-argument: set optional argument to stop method&lt;/li&gt;</span>
+<span class="source-line-no">071</span><span id="line-71">     * 
&lt;li&gt;Anything else is treated as a startup argument&lt;/li&gt;</span>
+<span class="source-line-no">072</span><span id="line-72">     * 
&lt;/ul&gt;</span>
+<span class="source-line-no">073</span><span id="line-73">     * 
&lt;p&gt;</span>
+<span class="source-line-no">074</span><span id="line-74">     * The following 
"-daemon-properties" are recognized:</span>
+<span class="source-line-no">075</span><span id="line-75">     * 
&lt;ul&gt;</span>
+<span class="source-line-no">076</span><span id="line-76">     * 
&lt;li&gt;args (startup argument)&lt;/li&gt;</span>
+<span class="source-line-no">077</span><span id="line-77">     * 
&lt;li&gt;start&lt;/li&gt;</span>
+<span class="source-line-no">078</span><span id="line-78">     * 
&lt;li&gt;start.method&lt;/li&gt;</span>
+<span class="source-line-no">079</span><span id="line-79">     * 
&lt;li&gt;stop&lt;/li&gt;</span>
+<span class="source-line-no">080</span><span id="line-80">     * 
&lt;li&gt;stop.method&lt;/li&gt;</span>
+<span class="source-line-no">081</span><span id="line-81">     * 
&lt;li&gt;stop.args&lt;/li&gt;</span>
+<span class="source-line-no">082</span><span id="line-82">     * 
&lt;/ul&gt;</span>
+<span class="source-line-no">083</span><span id="line-83">     * These are 
used to set the corresponding item if it has not already been</span>
+<span class="source-line-no">084</span><span id="line-84">     * set by the 
command arguments. &lt;b&gt;However, note that args and stop.args are</span>
+<span class="source-line-no">085</span><span id="line-85">     * appended to 
any existing values.&lt;/b&gt;</span>
+<span class="source-line-no">086</span><span id="line-86">     */</span>
+<span class="source-line-no">087</span><span id="line-87">    @Override</span>
+<span class="source-line-no">088</span><span id="line-88">    public void 
init(final DaemonContext context)</span>
+<span class="source-line-no">089</span><span id="line-89">        throws 
Exception</span>
+<span class="source-line-no">090</span><span id="line-90">    {</span>
+<span class="source-line-no">091</span><span id="line-91">        final 
String[] args = context.getArguments();</span>
+<span class="source-line-no">092</span><span id="line-92"></span>
+<span class="source-line-no">093</span><span id="line-93">        if (args != 
null) {</span>
+<span class="source-line-no">094</span><span id="line-94">            int 
i;</span>
+<span class="source-line-no">095</span><span id="line-95">            // Parse 
our arguments and remove them</span>
+<span class="source-line-no">096</span><span id="line-96">            // from 
the final argument array we are</span>
+<span class="source-line-no">097</span><span id="line-97">            // 
passing to our child.</span>
+<span class="source-line-no">098</span><span id="line-98">            
arguments:</span>
+<span class="source-line-no">099</span><span id="line-99">            for (i = 
0; i &lt; args.length; i++) {</span>
+<span class="source-line-no">100</span><span id="line-100">                if 
(args[i].equals("--")) {</span>
+<span class="source-line-no">101</span><span id="line-101">                    
// Done with argument processing</span>
+<span class="source-line-no">102</span><span id="line-102">                    
break;</span>
+<span class="source-line-no">103</span><span id="line-103">                
}</span>
+<span class="source-line-no">104</span><span id="line-104">                
switch (args[i]) {</span>
+<span class="source-line-no">105</span><span id="line-105">                    
case "-daemon-properties":</span>
+<span class="source-line-no">106</span><span id="line-106">                    
    if (++i == args.length) {</span>
+<span class="source-line-no">107</span><span id="line-107">                    
        throw new IllegalArgumentException(args[i - 1]);</span>
+<span class="source-line-no">108</span><span id="line-108">                    
    }</span>
+<span class="source-line-no">109</span><span id="line-109">                    
    configFileName = args[i];</span>
+<span class="source-line-no">110</span><span id="line-110">                    
    break;</span>
+<span class="source-line-no">111</span><span id="line-111">                    
case "-start":</span>
+<span class="source-line-no">112</span><span id="line-112">                    
    if (++i == args.length) {</span>
+<span class="source-line-no">113</span><span id="line-113">                    
        throw new IllegalArgumentException(args[i - 1]);</span>
+<span class="source-line-no">114</span><span id="line-114">                    
    }</span>
+<span class="source-line-no">115</span><span id="line-115">                    
    startup.setClassName(args[i]);</span>
+<span class="source-line-no">116</span><span id="line-116">                    
    break;</span>
+<span class="source-line-no">117</span><span id="line-117">                    
case "-start-method":</span>
+<span class="source-line-no">118</span><span id="line-118">                    
    if (++i == args.length) {</span>
+<span class="source-line-no">119</span><span id="line-119">                    
        throw new IllegalArgumentException(args[i - 1]);</span>
+<span class="source-line-no">120</span><span id="line-120">                    
    }</span>
+<span class="source-line-no">121</span><span id="line-121">                    
    startup.setMethodName(args[i]);</span>
+<span class="source-line-no">122</span><span id="line-122">                    
    break;</span>
+<span class="source-line-no">123</span><span id="line-123">                    
case "-stop":</span>
+<span class="source-line-no">124</span><span id="line-124">                    
    if (++i == args.length) {</span>
+<span class="source-line-no">125</span><span id="line-125">                    
        throw new IllegalArgumentException(args[i - 1]);</span>
+<span class="source-line-no">126</span><span id="line-126">                    
    }</span>
+<span class="source-line-no">127</span><span id="line-127">                    
    shutdown.setClassName(args[i]);</span>
+<span class="source-line-no">128</span><span id="line-128">                    
    break;</span>
+<span class="source-line-no">129</span><span id="line-129">                    
case "-stop-method":</span>
+<span class="source-line-no">130</span><span id="line-130">                    
    if (++i == args.length) {</span>
+<span class="source-line-no">131</span><span id="line-131">                    
        throw new IllegalArgumentException(args[i - 1]);</span>
+<span class="source-line-no">132</span><span id="line-132">                    
    }</span>
+<span class="source-line-no">133</span><span id="line-133">                    
    shutdown.setMethodName(args[i]);</span>
+<span class="source-line-no">134</span><span id="line-134">                    
    break;</span>
+<span class="source-line-no">135</span><span id="line-135">                    
case "-stop-argument":</span>
+<span class="source-line-no">136</span><span id="line-136">                    
    if (++i == args.length) {</span>
+<span class="source-line-no">137</span><span id="line-137">                    
        throw new IllegalArgumentException(args[i - 1]);</span>
+<span class="source-line-no">138</span><span id="line-138">                    
    }</span>
+<span class="source-line-no">139</span><span id="line-139">                    
    final String[] aa = new String[1];</span>
+<span class="source-line-no">140</span><span id="line-140">                    
    aa[0] = args[i];</span>
+<span class="source-line-no">141</span><span id="line-141">                    
    shutdown.addArguments(aa);</span>
+<span class="source-line-no">142</span><span id="line-142">                    
    break;</span>
+<span class="source-line-no">143</span><span id="line-143">                    
default:</span>
+<span class="source-line-no">144</span><span id="line-144">                    
    // This is not our option.</span>
+<span class="source-line-no">145</span><span id="line-145">                    
    // Everything else will be forwarded to the main</span>
+<span class="source-line-no">146</span><span id="line-146">                    
    break arguments;</span>
+<span class="source-line-no">147</span><span id="line-147">                
}</span>
+<span class="source-line-no">148</span><span id="line-148">            }</span>
+<span class="source-line-no">149</span><span id="line-149">            if 
(args.length &gt; i) {</span>
+<span class="source-line-no">150</span><span id="line-150">                
final String[] copy = new String[args.length - i];</span>
+<span class="source-line-no">151</span><span id="line-151">                
System.arraycopy(args, i, copy, 0, copy.length);</span>
+<span class="source-line-no">152</span><span id="line-152">                
startup.addArguments(copy);</span>
+<span class="source-line-no">153</span><span id="line-153">            }</span>
+<span class="source-line-no">154</span><span id="line-154">        }</span>
+<span class="source-line-no">155</span><span id="line-155">        if 
(config.load(configFileName)) {</span>
+<span class="source-line-no">156</span><span id="line-156">            // 
Setup params if not set via cmdline.</span>
+<span class="source-line-no">157</span><span id="line-157">            
startup.setClassName(config.getProperty(START_CLASS));</span>
+<span class="source-line-no">158</span><span id="line-158">            
startup.setMethodName(config.getProperty(START_METHOD));</span>
+<span class="source-line-no">159</span><span id="line-159">            // 
Merge the config with command line arguments</span>
+<span class="source-line-no">160</span><span id="line-160">            
startup.addArguments(config.getPropertyArray(ARGS));</span>
+<span class="source-line-no">161</span><span id="line-161"></span>
+<span class="source-line-no">162</span><span id="line-162">            
shutdown.setClassName(config.getProperty(STOP_CLASS));</span>
+<span class="source-line-no">163</span><span id="line-163">            
shutdown.setMethodName(config.getProperty(STOP_METHOD));</span>
+<span class="source-line-no">164</span><span id="line-164">            
shutdown.addArguments(config.getPropertyArray(STOP_ARGS));</span>
+<span class="source-line-no">165</span><span id="line-165">        }</span>
+<span class="source-line-no">166</span><span id="line-166">        
startup.validate();</span>
+<span class="source-line-no">167</span><span id="line-167">        
shutdown.validate();</span>
+<span class="source-line-no">168</span><span id="line-168">    }</span>
+<span class="source-line-no">169</span><span id="line-169"></span>
+<span class="source-line-no">170</span><span id="line-170">    /**</span>
+<span class="source-line-no">171</span><span id="line-171">     */</span>
+<span class="source-line-no">172</span><span id="line-172">    @Override</span>
+<span class="source-line-no">173</span><span id="line-173">    public void 
start()</span>
+<span class="source-line-no">174</span><span id="line-174">        throws 
Exception</span>
+<span class="source-line-no">175</span><span id="line-175">    {</span>
+<span class="source-line-no">176</span><span id="line-176">        
startup.invoke();</span>
+<span class="source-line-no">177</span><span id="line-177">    }</span>
+<span class="source-line-no">178</span><span id="line-178"></span>
+<span class="source-line-no">179</span><span id="line-179">    /**</span>
+<span class="source-line-no">180</span><span id="line-180">     */</span>
+<span class="source-line-no">181</span><span id="line-181">    @Override</span>
+<span class="source-line-no">182</span><span id="line-182">    public void 
stop()</span>
+<span class="source-line-no">183</span><span id="line-183">        throws 
Exception</span>
+<span class="source-line-no">184</span><span id="line-184">    {</span>
+<span class="source-line-no">185</span><span id="line-185">        
shutdown.invoke();</span>
+<span class="source-line-no">186</span><span id="line-186">    }</span>
+<span class="source-line-no">187</span><span id="line-187"></span>
+<span class="source-line-no">188</span><span id="line-188">    /**</span>
+<span class="source-line-no">189</span><span id="line-189">     */</span>
+<span class="source-line-no">190</span><span id="line-190">    @Override</span>
+<span class="source-line-no">191</span><span id="line-191">    public void 
destroy()</span>
+<span class="source-line-no">192</span><span id="line-192">    {</span>
+<span class="source-line-no">193</span><span id="line-193">        // Nothing 
for the moment</span>
+<span class="source-line-no">194</span><span id="line-194">        
System.err.println("DaemonWrapper: instance " + hashCode() + " destroy");</span>
+<span class="source-line-no">195</span><span id="line-195">    }</span>
+<span class="source-line-no">196</span><span id="line-196"></span>
+<span class="source-line-no">197</span><span id="line-197">    // Internal 
class for wrapping the start/stop methods</span>
+<span class="source-line-no">198</span><span id="line-198">    static class 
Invoker</span>
+<span class="source-line-no">199</span><span id="line-199">    {</span>
+<span class="source-line-no">200</span><span id="line-200">        private 
String      name;</span>
+<span class="source-line-no">201</span><span id="line-201">        private 
String      call;</span>
+<span class="source-line-no">202</span><span id="line-202">        private 
String[]    args;</span>
+<span class="source-line-no">203</span><span id="line-203">        private 
Method      inst;</span>
+<span class="source-line-no">204</span><span id="line-204">        private 
Class&lt;?&gt;    main;</span>
+<span class="source-line-no">205</span><span id="line-205"></span>
+<span class="source-line-no">206</span><span id="line-206">        protected 
Invoker()</span>
+<span class="source-line-no">207</span><span id="line-207">        {</span>
+<span class="source-line-no">208</span><span id="line-208">        }</span>
+<span class="source-line-no">209</span><span id="line-209"></span>
+<span class="source-line-no">210</span><span id="line-210">        protected 
void setClassName(final String name)</span>
+<span class="source-line-no">211</span><span id="line-211">        {</span>
+<span class="source-line-no">212</span><span id="line-212">            if 
(this.name == null) {</span>
+<span class="source-line-no">213</span><span id="line-213">                
this.name = name;</span>
+<span class="source-line-no">214</span><span id="line-214">            }</span>
+<span class="source-line-no">215</span><span id="line-215">        }</span>
+<span class="source-line-no">216</span><span id="line-216">        protected 
void setMethodName(final String name)</span>
+<span class="source-line-no">217</span><span id="line-217">        {</span>
+<span class="source-line-no">218</span><span id="line-218">            if 
(this.call == null) {</span>
+<span class="source-line-no">219</span><span id="line-219">                
this.call = name;</span>
+<span class="source-line-no">220</span><span id="line-220">            }</span>
+<span class="source-line-no">221</span><span id="line-221">        }</span>
+<span class="source-line-no">222</span><span id="line-222">        protected 
void addArguments(final String[] args)</span>
+<span class="source-line-no">223</span><span id="line-223">        {</span>
+<span class="source-line-no">224</span><span id="line-224">            if 
(args != null) {</span>
+<span class="source-line-no">225</span><span id="line-225">                
final ArrayList&lt;String&gt; aa = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">226</span><span id="line-226">                if 
(this.args != null) {</span>
+<span class="source-line-no">227</span><span id="line-227">                    
aa.addAll(Arrays.asList(this.args));</span>
+<span class="source-line-no">228</span><span id="line-228">                
}</span>
+<span class="source-line-no">229</span><span id="line-229">                
aa.addAll(Arrays.asList(args));</span>
+<span class="source-line-no">230</span><span id="line-230">                
this.args = aa.toArray(DaemonConfiguration.EMPTY_STRING_ARRAY);</span>
+<span class="source-line-no">231</span><span id="line-231">            }</span>
+<span class="source-line-no">232</span><span id="line-232">        }</span>
+<span class="source-line-no">233</span><span id="line-233"></span>
+<span class="source-line-no">234</span><span id="line-234">        protected 
void invoke()</span>
+<span class="source-line-no">235</span><span id="line-235">            throws 
Exception</span>
+<span class="source-line-no">236</span><span id="line-236">        {</span>
+<span class="source-line-no">237</span><span id="line-237">            if 
(name.equals("System") &amp;&amp; call.equals("exit")) {</span>
+<span class="source-line-no">238</span><span id="line-238">                // 
Just call a System.exit()</span>
+<span class="source-line-no">239</span><span id="line-239">                // 
The start method was probably installed</span>
+<span class="source-line-no">240</span><span id="line-240">                // 
a shutdown hook.</span>
+<span class="source-line-no">241</span><span id="line-241">                
System.exit(0);</span>
+<span class="source-line-no">242</span><span id="line-242">            }</span>
+<span class="source-line-no">243</span><span id="line-243">            else 
{</span>
+<span class="source-line-no">244</span><span id="line-244">                
Object obj   = null;</span>
+<span class="source-line-no">245</span><span id="line-245">                if 
((inst.getModifiers() &amp; Modifier.STATIC) == 0) {</span>
+<span class="source-line-no">246</span><span id="line-246">                    
// We only need object instance for non-static methods.</span>
+<span class="source-line-no">247</span><span id="line-247">                    
obj = main.getConstructor().newInstance();</span>
+<span class="source-line-no">248</span><span id="line-248">                
}</span>
+<span class="source-line-no">249</span><span id="line-249">                
final Object[] arg = new Object[1];</span>
+<span class="source-line-no">250</span><span id="line-250"></span>
+<span class="source-line-no">251</span><span id="line-251">                
arg[0] = args;</span>
+<span class="source-line-no">252</span><span id="line-252">                
inst.invoke(obj, arg);</span>
+<span class="source-line-no">253</span><span id="line-253">            }</span>
+<span class="source-line-no">254</span><span id="line-254">        }</span>
+<span class="source-line-no">255</span><span id="line-255">        // Load the 
class using reflection</span>
+<span class="source-line-no">256</span><span id="line-256">        protected 
void validate()</span>
+<span class="source-line-no">257</span><span id="line-257">            throws 
Exception</span>
+<span class="source-line-no">258</span><span id="line-258">        {</span>
+<span class="source-line-no">259</span><span id="line-259">            /* 
Check the class name */</span>
+<span class="source-line-no">260</span><span id="line-260">            if 
(name == null) {</span>
+<span class="source-line-no">261</span><span id="line-261">                
name = "System";</span>
+<span class="source-line-no">262</span><span id="line-262">                
call = "exit";</span>
+<span class="source-line-no">263</span><span id="line-263">                
return;</span>
 <span class="source-line-no">264</span><span id="line-264">            }</span>
-<span class="source-line-no">265</span><span id="line-265">            if 
(call == null) {</span>
-<span class="source-line-no">266</span><span id="line-266">                
call = "main";</span>
+<span class="source-line-no">265</span><span id="line-265">            if 
(args == null) {</span>
+<span class="source-line-no">266</span><span id="line-266">                
args = new String[0];</span>
 <span class="source-line-no">267</span><span id="line-267">            }</span>
-<span class="source-line-no">268</span><span id="line-268"></span>
-<span class="source-line-no">269</span><span id="line-269">            // Get 
the ClassLoader loading this class</span>
-<span class="source-line-no">270</span><span id="line-270">            final 
ClassLoader classLoader = DaemonWrapper.class.getClassLoader();</span>
-<span class="source-line-no">271</span><span id="line-271">            
Objects.requireNonNull(classLoader, "classLoader");</span>
-<span class="source-line-no">272</span><span id="line-272">            final 
Class&lt;?&gt;[] ca = new Class[1];</span>
-<span class="source-line-no">273</span><span id="line-273">            ca[0] = 
args.getClass();</span>
-<span class="source-line-no">274</span><span id="line-274">            // Find 
the required class</span>
-<span class="source-line-no">275</span><span id="line-275">            main = 
classLoader.loadClass(name);</span>
-<span class="source-line-no">276</span><span id="line-276">            if 
(main == null) {</span>
-<span class="source-line-no">277</span><span id="line-277">                
throw new ClassNotFoundException(name);</span>
-<span class="source-line-no">278</span><span id="line-278">            }</span>
-<span class="source-line-no">279</span><span id="line-279">            // Find 
the required method.</span>
-<span class="source-line-no">280</span><span id="line-280">            // 
NoSuchMethodException will be thrown if matching method</span>
-<span class="source-line-no">281</span><span id="line-281">            // is 
not found.</span>
-<span class="source-line-no">282</span><span id="line-282">            inst = 
main.getMethod(call, ca);</span>
-<span class="source-line-no">283</span><span id="line-283">        }</span>
-<span class="source-line-no">284</span><span id="line-284">    }</span>
-<span class="source-line-no">285</span><span id="line-285">}</span>
+<span class="source-line-no">268</span><span id="line-268">            if 
(call == null) {</span>
+<span class="source-line-no">269</span><span id="line-269">                
call = "main";</span>
+<span class="source-line-no">270</span><span id="line-270">            }</span>
+<span class="source-line-no">271</span><span id="line-271"></span>
+<span class="source-line-no">272</span><span id="line-272">            // Get 
the ClassLoader loading this class</span>
+<span class="source-line-no">273</span><span id="line-273">            final 
ClassLoader classLoader = DaemonWrapper.class.getClassLoader();</span>
+<span class="source-line-no">274</span><span id="line-274">            
Objects.requireNonNull(classLoader, "classLoader");</span>
+<span class="source-line-no">275</span><span id="line-275">            final 
Class&lt;?&gt;[] ca = new Class[1];</span>
+<span class="source-line-no">276</span><span id="line-276">            ca[0] = 
args.getClass();</span>
+<span class="source-line-no">277</span><span id="line-277">            // Find 
the required class</span>
+<span class="source-line-no">278</span><span id="line-278">            main = 
classLoader.loadClass(name);</span>
+<span class="source-line-no">279</span><span id="line-279">            if 
(main == null) {</span>
+<span class="source-line-no">280</span><span id="line-280">                
throw new ClassNotFoundException(name);</span>
+<span class="source-line-no">281</span><span id="line-281">            }</span>
+<span class="source-line-no">282</span><span id="line-282">            // Find 
the required method.</span>
+<span class="source-line-no">283</span><span id="line-283">            // 
NoSuchMethodException will be thrown if matching method</span>
+<span class="source-line-no">284</span><span id="line-284">            // is 
not found.</span>
+<span class="source-line-no">285</span><span id="line-285">            inst = 
main.getMethod(call, ca);</span>
+<span class="source-line-no">286</span><span id="line-286">        }</span>
+<span class="source-line-no">287</span><span id="line-287">    }</span>
+<span class="source-line-no">288</span><span id="line-288">}</span>
 
 
 

Modified: 
websites/production/commons/content/proper/commons-daemon/binaries.html
==============================================================================
--- websites/production/commons/content/proper/commons-daemon/binaries.html 
(original)
+++ websites/production/commons/content/proper/commons-daemon/binaries.html Tue 
Jan 14 12:30:25 2025
@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia at 24 May 2024
+ | Generated by Apache Maven Doxia at 14 January 2025
  | Rendered using Apache Maven Fluido Skin 1.3.0
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en">
@@ -8,7 +8,7 @@
     <meta charset="iso-8859-1" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
             <meta name="author" content="Jean-Frederic Clere" />
-                <meta name="Date-Revision-yyyymmdd" content="20240524" />
+                <meta name="Date-Revision-yyyymmdd" content="20250114" />
             <meta http-equiv="Content-Language" content="en" />
         <title>Daemon &#x2013; Daemon : binaries</title>
 
@@ -41,8 +41,8 @@
           <a class="brand" 
href="https://commons.apache.org/proper/commons-daemon/";>Apache Commons Daemon 
&trade;</a>
           <ul class="nav">      
                     
-          <li id="publishDate">Last Published: 24 May 2024</li>
-    <li class="divider">|</li> <li id="projectVersion">Version: 1.4.0</li>
+          <li id="publishDate">Last Published: 14 January 2025</li>
+    <li class="divider">|</li> <li id="projectVersion">Version: 1.4.1</li>
   </ul>
           <div class="pull-right">  <ul class="nav">
             <li>
@@ -257,7 +257,7 @@ corresponding to your operating system.
 <h3><a name="procrun"></a>procrun</h3>
 
 <p>
-The Windows archive (e.g. commons-daemon-1.4.0-bin-windows.zip) contains 2 
different executables:
+The Windows archive (e.g. commons-daemon-1.4.1-bin-windows.zip) contains 2 
different executables:
 </p>
 <ul>
 
@@ -289,7 +289,7 @@ The Windows binary zip archive should be
     </div>
 
     <div class="footer">
-      <p>Copyright &copy;                    2002-2024
+      <p>Copyright &copy;                    2002-2025
                       <a href="https://www.apache.org/";>The Apache Software 
Foundation</a>.
             All Rights Reserved.</p>
                                         


Reply via email to