Modified: 
websites/production/commons/content/proper/commons-daemon/apidocs/src-html/org/apache/commons/daemon/support/DaemonLoader.Controller.html
==============================================================================
--- 
websites/production/commons/content/proper/commons-daemon/apidocs/src-html/org/apache/commons/daemon/support/DaemonLoader.Controller.html
 (original)
+++ 
websites/production/commons/content/proper/commons-daemon/apidocs/src-html/org/apache/commons/daemon/support/DaemonLoader.Controller.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: DaemonLoader, class: Controller">
 <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">
@@ -54,373 +54,420 @@
 <span class="source-line-no">041</span><span id="line-41">    private static 
Method destroy; //@GuardedBy("this")</span>
 <span class="source-line-no">042</span><span id="line-42">    private static 
Method signal; //@GuardedBy("this")</span>
 <span class="source-line-no">043</span><span id="line-43"></span>
-<span class="source-line-no">044</span><span id="line-44">    public static 
void version()</span>
-<span class="source-line-no">045</span><span id="line-45">    {</span>
-<span class="source-line-no">046</span><span id="line-46">        
System.err.println("java version \"" +</span>
-<span class="source-line-no">047</span><span id="line-47">                     
      System.getProperty("java.version") + "\"");</span>
-<span class="source-line-no">048</span><span id="line-48">        
System.err.println(System.getProperty("java.runtime.name") +</span>
-<span class="source-line-no">049</span><span id="line-49">                     
      " (build " +</span>
-<span class="source-line-no">050</span><span id="line-50">                     
      System.getProperty("java.runtime.version") + ")");</span>
-<span class="source-line-no">051</span><span id="line-51">        
System.err.println(System.getProperty("java.vm.name") +</span>
+<span class="source-line-no">044</span><span id="line-44">    /**</span>
+<span class="source-line-no">045</span><span id="line-45">     * Prints 
version information to {@link System#err}.</span>
+<span class="source-line-no">046</span><span id="line-46">     */</span>
+<span class="source-line-no">047</span><span id="line-47">    public static 
void version()</span>
+<span class="source-line-no">048</span><span id="line-48">    {</span>
+<span class="source-line-no">049</span><span id="line-49">        
System.err.println("java version \"" +</span>
+<span class="source-line-no">050</span><span id="line-50">                     
      System.getProperty("java.version") + "\"");</span>
+<span class="source-line-no">051</span><span id="line-51">        
System.err.println(System.getProperty("java.runtime.name") +</span>
 <span class="source-line-no">052</span><span id="line-52">                     
      " (build " +</span>
-<span class="source-line-no">053</span><span id="line-53">                     
      System.getProperty("java.vm.version") +</span>
-<span class="source-line-no">054</span><span id="line-54">                     
      ", " + System.getProperty("java.vm.info") + ")");</span>
-<span class="source-line-no">055</span><span id="line-55">        
System.err.println("commons daemon version \"" +</span>
-<span class="source-line-no">056</span><span id="line-56">                
System.getProperty("commons.daemon.version") + "\"");</span>
-<span class="source-line-no">057</span><span id="line-57">        
System.err.println("commons daemon process (id: " +</span>
-<span class="source-line-no">058</span><span id="line-58">                     
      System.getProperty("commons.daemon.process.id") +</span>
-<span class="source-line-no">059</span><span id="line-59">                     
      ", parent: " +</span>
-<span class="source-line-no">060</span><span id="line-60">                     
      System.getProperty("commons.daemon.process.parent") + ")");</span>
-<span class="source-line-no">061</span><span id="line-61">    }</span>
-<span class="source-line-no">062</span><span id="line-62"></span>
-<span class="source-line-no">063</span><span id="line-63">    public static 
boolean check(final String className)</span>
-<span class="source-line-no">064</span><span id="line-64">    {</span>
-<span class="source-line-no">065</span><span id="line-65">        try {</span>
-<span class="source-line-no">066</span><span id="line-66">            /* Check 
the class name */</span>
-<span class="source-line-no">067</span><span id="line-67">            
Objects.requireNonNull(className, "className");</span>
-<span class="source-line-no">068</span><span id="line-68">            /* Gets 
the ClassLoader loading this class */</span>
-<span class="source-line-no">069</span><span id="line-69">            final 
ClassLoader cl = DaemonLoader.class.getClassLoader();</span>
-<span class="source-line-no">070</span><span id="line-70">            if (cl 
== null) {</span>
-<span class="source-line-no">071</span><span id="line-71">                
System.err.println("Cannot retrieve ClassLoader instance");</span>
-<span class="source-line-no">072</span><span id="line-72">                
return false;</span>
-<span class="source-line-no">073</span><span id="line-73">            }</span>
-<span class="source-line-no">074</span><span id="line-74"></span>
-<span class="source-line-no">075</span><span id="line-75">            /* Find 
the required class */</span>
-<span class="source-line-no">076</span><span id="line-76">            final 
Class&lt;?&gt; c = cl.loadClass(className);</span>
-<span class="source-line-no">077</span><span id="line-77"></span>
-<span class="source-line-no">078</span><span id="line-78">            /* This 
should _never_ happen, but double-checking doesn't harm */</span>
-<span class="source-line-no">079</span><span id="line-79">            if (c == 
null) {</span>
-<span class="source-line-no">080</span><span id="line-80">                
throw new ClassNotFoundException(className);</span>
-<span class="source-line-no">081</span><span id="line-81">            }</span>
-<span class="source-line-no">082</span><span id="line-82"></span>
-<span class="source-line-no">083</span><span id="line-83">            /* 
Create a new instance of the daemon */</span>
-<span class="source-line-no">084</span><span id="line-84">            
c.getConstructor().newInstance();</span>
-<span class="source-line-no">085</span><span id="line-85"></span>
-<span class="source-line-no">086</span><span id="line-86">        } catch 
(final Throwable t) {</span>
-<span class="source-line-no">087</span><span id="line-87">            /* In 
case we encounter ANY error, we dump the stack trace and</span>
-<span class="source-line-no">088</span><span id="line-88">             * 
return false (load, start and stop won't be called).</span>
-<span class="source-line-no">089</span><span id="line-89">             
*/</span>
-<span class="source-line-no">090</span><span id="line-90">            
t.printStackTrace(System.err);</span>
-<span class="source-line-no">091</span><span id="line-91">            return 
false;</span>
-<span class="source-line-no">092</span><span id="line-92">        }</span>
-<span class="source-line-no">093</span><span id="line-93">        /* The class 
was loaded and instantiated correctly, we can return</span>
-<span class="source-line-no">094</span><span id="line-94">         */</span>
-<span class="source-line-no">095</span><span id="line-95">        return 
true;</span>
-<span class="source-line-no">096</span><span id="line-96">    }</span>
-<span class="source-line-no">097</span><span id="line-97"></span>
-<span class="source-line-no">098</span><span id="line-98">    public static 
boolean signal()</span>
-<span class="source-line-no">099</span><span id="line-99">    {</span>
-<span class="source-line-no">100</span><span id="line-100">        try {</span>
-<span class="source-line-no">101</span><span id="line-101">            if 
(signal != null) {</span>
-<span class="source-line-no">102</span><span id="line-102">                
signal.invoke(daemon);</span>
-<span class="source-line-no">103</span><span id="line-103">                
return true;</span>
-<span class="source-line-no">104</span><span id="line-104">            }</span>
-<span class="source-line-no">105</span><span id="line-105">            
System.out.println("Daemon doesn't support signaling");</span>
-<span class="source-line-no">106</span><span id="line-106">        } catch 
(final Throwable ex) {</span>
-<span class="source-line-no">107</span><span id="line-107">            
System.err.println("Cannot send signal: " + ex);</span>
-<span class="source-line-no">108</span><span id="line-108">            
ex.printStackTrace(System.err);</span>
-<span class="source-line-no">109</span><span id="line-109">        }</span>
-<span class="source-line-no">110</span><span id="line-110">        return 
false;</span>
-<span class="source-line-no">111</span><span id="line-111">    }</span>
-<span class="source-line-no">112</span><span id="line-112"></span>
-<span class="source-line-no">113</span><span id="line-113">    public static 
boolean load(final String className, String[] args)</span>
-<span class="source-line-no">114</span><span id="line-114">    {</span>
-<span class="source-line-no">115</span><span id="line-115">        try {</span>
-<span class="source-line-no">116</span><span id="line-116">            /* 
Check if the underlying library supplied a valid list of</span>
-<span class="source-line-no">117</span><span id="line-117">               
arguments */</span>
-<span class="source-line-no">118</span><span id="line-118">            if 
(args == null) {</span>
-<span class="source-line-no">119</span><span id="line-119">                
args = new String[0];</span>
-<span class="source-line-no">120</span><span id="line-120">            }</span>
-<span class="source-line-no">121</span><span id="line-121"></span>
-<span class="source-line-no">122</span><span id="line-122">            /* 
Check the class name */</span>
-<span class="source-line-no">123</span><span id="line-123">            
Objects.requireNonNull(className, "className");</span>
-<span class="source-line-no">124</span><span id="line-124"></span>
-<span class="source-line-no">125</span><span id="line-125">            /* Gets 
the ClassLoader loading this class */</span>
-<span class="source-line-no">126</span><span id="line-126">            final 
ClassLoader cl = DaemonLoader.class.getClassLoader();</span>
-<span class="source-line-no">127</span><span id="line-127">            if (cl 
== null) {</span>
-<span class="source-line-no">128</span><span id="line-128">                
System.err.println("Cannot retrieve ClassLoader instance");</span>
-<span class="source-line-no">129</span><span id="line-129">                
return false;</span>
-<span class="source-line-no">130</span><span id="line-130">            }</span>
-<span class="source-line-no">131</span><span id="line-131">            final 
Class&lt;?&gt; c;</span>
-<span class="source-line-no">132</span><span id="line-132">            if 
(className.charAt(0) == '@') {</span>
-<span class="source-line-no">133</span><span id="line-133">                /* 
Wrap the class with DaemonWrapper</span>
-<span class="source-line-no">134</span><span id="line-134">                 * 
and modify arguments to include the real class name.</span>
-<span class="source-line-no">135</span><span id="line-135">                 
*/</span>
-<span class="source-line-no">136</span><span id="line-136">                c = 
DaemonWrapper.class;</span>
-<span class="source-line-no">137</span><span id="line-137">                
final String[] a = new String[args.length + 2];</span>
-<span class="source-line-no">138</span><span id="line-138">                
a[0] = "-start";</span>
-<span class="source-line-no">139</span><span id="line-139">                
a[1] = className.substring(1);</span>
-<span class="source-line-no">140</span><span id="line-140">                
System.arraycopy(args, 0, a, 2, args.length);</span>
-<span class="source-line-no">141</span><span id="line-141">                
args = a;</span>
-<span class="source-line-no">142</span><span id="line-142">            }</span>
-<span class="source-line-no">143</span><span id="line-143">            else 
{</span>
-<span class="source-line-no">144</span><span id="line-144">                c = 
cl.loadClass(className);</span>
-<span class="source-line-no">145</span><span id="line-145">            }</span>
-<span class="source-line-no">146</span><span id="line-146">            /* This 
should _never_ happen, but double-checking doesn't harm */</span>
-<span class="source-line-no">147</span><span id="line-147">            if (c 
== null) {</span>
-<span class="source-line-no">148</span><span id="line-148">                
throw new ClassNotFoundException(className);</span>
-<span class="source-line-no">149</span><span id="line-149">            }</span>
-<span class="source-line-no">150</span><span id="line-150">            /* 
Check interfaces */</span>
-<span class="source-line-no">151</span><span id="line-151">            boolean 
isdaemon = false;</span>
-<span class="source-line-no">152</span><span id="line-152"></span>
-<span class="source-line-no">153</span><span id="line-153">            try 
{</span>
-<span class="source-line-no">154</span><span id="line-154">                
final Class&lt;?&gt; dclass = 
cl.loadClass("org.apache.commons.daemon.Daemon");</span>
-<span class="source-line-no">155</span><span id="line-155">                
isdaemon = dclass.isAssignableFrom(c);</span>
-<span class="source-line-no">156</span><span id="line-156">            }</span>
-<span class="source-line-no">157</span><span id="line-157">            catch 
(final Exception ignored) {</span>
-<span class="source-line-no">158</span><span id="line-158">                // 
Swallow if Daemon not found.</span>
-<span class="source-line-no">159</span><span id="line-159">            }</span>
-<span class="source-line-no">160</span><span id="line-160"></span>
-<span class="source-line-no">161</span><span id="line-161">            /* 
Check methods */</span>
-<span class="source-line-no">162</span><span id="line-162">            final 
Class&lt;?&gt;[] myclass = new Class[1];</span>
-<span class="source-line-no">163</span><span id="line-163">            if 
(isdaemon) {</span>
-<span class="source-line-no">164</span><span id="line-164">                
myclass[0] = DaemonContext.class;</span>
-<span class="source-line-no">165</span><span id="line-165">            }</span>
-<span class="source-line-no">166</span><span id="line-166">            else 
{</span>
-<span class="source-line-no">167</span><span id="line-167">                
myclass[0] = args.getClass();</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">            init    
= c.getMethod("init", myclass);</span>
-<span class="source-line-no">171</span><span id="line-171"></span>
-<span class="source-line-no">172</span><span id="line-172">            start   
= c.getMethod("start");</span>
-<span class="source-line-no">173</span><span id="line-173">            stop    
= c.getMethod("stop");</span>
-<span class="source-line-no">174</span><span id="line-174">            destroy 
= c.getMethod("destroy");</span>
-<span class="source-line-no">175</span><span id="line-175"></span>
-<span class="source-line-no">176</span><span id="line-176">            try 
{</span>
-<span class="source-line-no">177</span><span id="line-177">                
signal = c.getMethod("signal");</span>
-<span class="source-line-no">178</span><span id="line-178">            } catch 
(final NoSuchMethodException ignored) {</span>
-<span class="source-line-no">179</span><span id="line-179">                // 
Signalling will be disabled.</span>
+<span class="source-line-no">053</span><span id="line-53">                     
      System.getProperty("java.runtime.version") + ")");</span>
+<span class="source-line-no">054</span><span id="line-54">        
System.err.println(System.getProperty("java.vm.name") +</span>
+<span class="source-line-no">055</span><span id="line-55">                     
      " (build " +</span>
+<span class="source-line-no">056</span><span id="line-56">                     
      System.getProperty("java.vm.version") +</span>
+<span class="source-line-no">057</span><span id="line-57">                     
      ", " + System.getProperty("java.vm.info") + ")");</span>
+<span class="source-line-no">058</span><span id="line-58">        
System.err.println("commons daemon version \"" +</span>
+<span class="source-line-no">059</span><span id="line-59">                
System.getProperty("commons.daemon.version") + "\"");</span>
+<span class="source-line-no">060</span><span id="line-60">        
System.err.println("commons daemon process (id: " +</span>
+<span class="source-line-no">061</span><span id="line-61">                     
      System.getProperty("commons.daemon.process.id") +</span>
+<span class="source-line-no">062</span><span id="line-62">                     
      ", parent: " +</span>
+<span class="source-line-no">063</span><span id="line-63">                     
      System.getProperty("commons.daemon.process.parent") + ")");</span>
+<span class="source-line-no">064</span><span id="line-64">    }</span>
+<span class="source-line-no">065</span><span id="line-65"></span>
+<span class="source-line-no">066</span><span id="line-66">    /**</span>
+<span class="source-line-no">067</span><span id="line-67">     * Checks 
whether the given class name can be instantiated with a zero-argument 
constructor.</span>
+<span class="source-line-no">068</span><span id="line-68">     *</span>
+<span class="source-line-no">069</span><span id="line-69">     * @param 
className The class name.</span>
+<span class="source-line-no">070</span><span id="line-70">     * @return true 
if the given class name can be instantiated, false otherwise.</span>
+<span class="source-line-no">071</span><span id="line-71">     */</span>
+<span class="source-line-no">072</span><span id="line-72">    public static 
boolean check(final String className)</span>
+<span class="source-line-no">073</span><span id="line-73">    {</span>
+<span class="source-line-no">074</span><span id="line-74">        try {</span>
+<span class="source-line-no">075</span><span id="line-75">            /* Check 
the class name */</span>
+<span class="source-line-no">076</span><span id="line-76">            
Objects.requireNonNull(className, "className");</span>
+<span class="source-line-no">077</span><span id="line-77">            /* Gets 
the ClassLoader loading this class */</span>
+<span class="source-line-no">078</span><span id="line-78">            final 
ClassLoader cl = DaemonLoader.class.getClassLoader();</span>
+<span class="source-line-no">079</span><span id="line-79">            if (cl 
== null) {</span>
+<span class="source-line-no">080</span><span id="line-80">                
System.err.println("Cannot retrieve ClassLoader instance");</span>
+<span class="source-line-no">081</span><span id="line-81">                
return false;</span>
+<span class="source-line-no">082</span><span id="line-82">            }</span>
+<span class="source-line-no">083</span><span id="line-83"></span>
+<span class="source-line-no">084</span><span id="line-84">            /* Find 
the required class */</span>
+<span class="source-line-no">085</span><span id="line-85">            final 
Class&lt;?&gt; c = cl.loadClass(className);</span>
+<span class="source-line-no">086</span><span id="line-86"></span>
+<span class="source-line-no">087</span><span id="line-87">            /* This 
should _never_ happen, but double-checking doesn't harm */</span>
+<span class="source-line-no">088</span><span id="line-88">            if (c == 
null) {</span>
+<span class="source-line-no">089</span><span id="line-89">                
throw new ClassNotFoundException(className);</span>
+<span class="source-line-no">090</span><span id="line-90">            }</span>
+<span class="source-line-no">091</span><span id="line-91"></span>
+<span class="source-line-no">092</span><span id="line-92">            /* 
Create a new instance of the daemon */</span>
+<span class="source-line-no">093</span><span id="line-93">            
c.getConstructor().newInstance();</span>
+<span class="source-line-no">094</span><span id="line-94"></span>
+<span class="source-line-no">095</span><span id="line-95">        } catch 
(final Throwable t) {</span>
+<span class="source-line-no">096</span><span id="line-96">            /* In 
case we encounter ANY error, we dump the stack trace and</span>
+<span class="source-line-no">097</span><span id="line-97">             * 
return false (load, start and stop won't be called).</span>
+<span class="source-line-no">098</span><span id="line-98">             
*/</span>
+<span class="source-line-no">099</span><span id="line-99">            
t.printStackTrace(System.err);</span>
+<span class="source-line-no">100</span><span id="line-100">            return 
false;</span>
+<span class="source-line-no">101</span><span id="line-101">        }</span>
+<span class="source-line-no">102</span><span id="line-102">        /* The 
class was loaded and instantiated correctly, we can return</span>
+<span class="source-line-no">103</span><span id="line-103">         */</span>
+<span class="source-line-no">104</span><span id="line-104">        return 
true;</span>
+<span class="source-line-no">105</span><span id="line-105">    }</span>
+<span class="source-line-no">106</span><span id="line-106"></span>
+<span class="source-line-no">107</span><span id="line-107">    /**</span>
+<span class="source-line-no">108</span><span id="line-108">     * Invokes the 
wrapped {@code signal} method.</span>
+<span class="source-line-no">109</span><span id="line-109">     *</span>
+<span class="source-line-no">110</span><span id="line-110">     * @return 
whether the call succeeded.</span>
+<span class="source-line-no">111</span><span id="line-111">     */</span>
+<span class="source-line-no">112</span><span id="line-112">    public static 
boolean signal()</span>
+<span class="source-line-no">113</span><span id="line-113">    {</span>
+<span class="source-line-no">114</span><span id="line-114">        try {</span>
+<span class="source-line-no">115</span><span id="line-115">            if 
(signal != null) {</span>
+<span class="source-line-no">116</span><span id="line-116">                
signal.invoke(daemon);</span>
+<span class="source-line-no">117</span><span id="line-117">                
return true;</span>
+<span class="source-line-no">118</span><span id="line-118">            }</span>
+<span class="source-line-no">119</span><span id="line-119">            
System.out.println("Daemon doesn't support signaling");</span>
+<span class="source-line-no">120</span><span id="line-120">        } catch 
(final Throwable ex) {</span>
+<span class="source-line-no">121</span><span id="line-121">            
System.err.println("Cannot send signal: " + ex);</span>
+<span class="source-line-no">122</span><span id="line-122">            
ex.printStackTrace(System.err);</span>
+<span class="source-line-no">123</span><span id="line-123">        }</span>
+<span class="source-line-no">124</span><span id="line-124">        return 
false;</span>
+<span class="source-line-no">125</span><span id="line-125">    }</span>
+<span class="source-line-no">126</span><span id="line-126"></span>
+<span class="source-line-no">127</span><span id="line-127">    /**</span>
+<span class="source-line-no">128</span><span id="line-128">     * Loads the 
given class by name, initializing wrapper methods.</span>
+<span class="source-line-no">129</span><span id="line-129">     *</span>
+<span class="source-line-no">130</span><span id="line-130">     * @param 
className The class name to load.</span>
+<span class="source-line-no">131</span><span id="line-131">     * @param args 
arguments for the context.</span>
+<span class="source-line-no">132</span><span id="line-132">     * @return 
whether the operation succeeded.</span>
+<span class="source-line-no">133</span><span id="line-133">     */</span>
+<span class="source-line-no">134</span><span id="line-134">    public static 
boolean load(final String className, String[] args)</span>
+<span class="source-line-no">135</span><span id="line-135">    {</span>
+<span class="source-line-no">136</span><span id="line-136">        try {</span>
+<span class="source-line-no">137</span><span id="line-137">            /* 
Check if the underlying library supplied a valid list of</span>
+<span class="source-line-no">138</span><span id="line-138">               
arguments */</span>
+<span class="source-line-no">139</span><span id="line-139">            if 
(args == null) {</span>
+<span class="source-line-no">140</span><span id="line-140">                
args = new String[0];</span>
+<span class="source-line-no">141</span><span id="line-141">            }</span>
+<span class="source-line-no">142</span><span id="line-142"></span>
+<span class="source-line-no">143</span><span id="line-143">            /* 
Check the class name */</span>
+<span class="source-line-no">144</span><span id="line-144">            
Objects.requireNonNull(className, "className");</span>
+<span class="source-line-no">145</span><span id="line-145"></span>
+<span class="source-line-no">146</span><span id="line-146">            /* Gets 
the ClassLoader loading this class */</span>
+<span class="source-line-no">147</span><span id="line-147">            final 
ClassLoader cl = DaemonLoader.class.getClassLoader();</span>
+<span class="source-line-no">148</span><span id="line-148">            if (cl 
== null) {</span>
+<span class="source-line-no">149</span><span id="line-149">                
System.err.println("Cannot retrieve ClassLoader instance");</span>
+<span class="source-line-no">150</span><span id="line-150">                
return false;</span>
+<span class="source-line-no">151</span><span id="line-151">            }</span>
+<span class="source-line-no">152</span><span id="line-152">            final 
Class&lt;?&gt; c;</span>
+<span class="source-line-no">153</span><span id="line-153">            if 
(className.charAt(0) == '@') {</span>
+<span class="source-line-no">154</span><span id="line-154">                /* 
Wrap the class with DaemonWrapper</span>
+<span class="source-line-no">155</span><span id="line-155">                 * 
and modify arguments to include the real class name.</span>
+<span class="source-line-no">156</span><span id="line-156">                 
*/</span>
+<span class="source-line-no">157</span><span id="line-157">                c = 
DaemonWrapper.class;</span>
+<span class="source-line-no">158</span><span id="line-158">                
final String[] a = new String[args.length + 2];</span>
+<span class="source-line-no">159</span><span id="line-159">                
a[0] = "-start";</span>
+<span class="source-line-no">160</span><span id="line-160">                
a[1] = className.substring(1);</span>
+<span class="source-line-no">161</span><span id="line-161">                
System.arraycopy(args, 0, a, 2, args.length);</span>
+<span class="source-line-no">162</span><span id="line-162">                
args = a;</span>
+<span class="source-line-no">163</span><span id="line-163">            }</span>
+<span class="source-line-no">164</span><span id="line-164">            else 
{</span>
+<span class="source-line-no">165</span><span id="line-165">                c = 
cl.loadClass(className);</span>
+<span class="source-line-no">166</span><span id="line-166">            }</span>
+<span class="source-line-no">167</span><span id="line-167">            /* This 
should _never_ happen, but double-checking doesn't harm */</span>
+<span class="source-line-no">168</span><span id="line-168">            if (c 
== null) {</span>
+<span class="source-line-no">169</span><span id="line-169">                
throw new ClassNotFoundException(className);</span>
+<span class="source-line-no">170</span><span id="line-170">            }</span>
+<span class="source-line-no">171</span><span id="line-171">            /* 
Check interfaces */</span>
+<span class="source-line-no">172</span><span id="line-172">            boolean 
isdaemon = false;</span>
+<span class="source-line-no">173</span><span id="line-173"></span>
+<span class="source-line-no">174</span><span id="line-174">            try 
{</span>
+<span class="source-line-no">175</span><span id="line-175">                
final Class&lt;?&gt; dclass = 
cl.loadClass("org.apache.commons.daemon.Daemon");</span>
+<span class="source-line-no">176</span><span id="line-176">                
isdaemon = dclass.isAssignableFrom(c);</span>
+<span class="source-line-no">177</span><span id="line-177">            }</span>
+<span class="source-line-no">178</span><span id="line-178">            catch 
(final Exception ignored) {</span>
+<span class="source-line-no">179</span><span id="line-179">                // 
Swallow if Daemon not found.</span>
 <span class="source-line-no">180</span><span id="line-180">            }</span>
 <span class="source-line-no">181</span><span id="line-181"></span>
-<span class="source-line-no">182</span><span id="line-182">            /* 
Create a new instance of the daemon */</span>
-<span class="source-line-no">183</span><span id="line-183">            daemon 
= c.getConstructor().newInstance();</span>
-<span class="source-line-no">184</span><span id="line-184"></span>
-<span class="source-line-no">185</span><span id="line-185">            if 
(isdaemon) {</span>
-<span class="source-line-no">186</span><span id="line-186">                // 
Create a new controller instance</span>
-<span class="source-line-no">187</span><span id="line-187">                
controller = new Controller();</span>
-<span class="source-line-no">188</span><span id="line-188"></span>
-<span class="source-line-no">189</span><span id="line-189">                // 
Set the availability flag in the controller</span>
-<span class="source-line-no">190</span><span id="line-190">                
controller.setAvailable(false);</span>
-<span class="source-line-no">191</span><span id="line-191"></span>
-<span class="source-line-no">192</span><span id="line-192">                /* 
Create context */</span>
-<span class="source-line-no">193</span><span id="line-193">                
final Context context = new Context();</span>
-<span class="source-line-no">194</span><span id="line-194">                
context.setArguments(args);</span>
-<span class="source-line-no">195</span><span id="line-195">                
context.setController(controller);</span>
-<span class="source-line-no">196</span><span id="line-196"></span>
-<span class="source-line-no">197</span><span id="line-197">                // 
Now we want to call the init method in the class</span>
-<span class="source-line-no">198</span><span id="line-198">                
final Object[] arg = new Object[1];</span>
-<span class="source-line-no">199</span><span id="line-199">                
arg[0] = context;</span>
-<span class="source-line-no">200</span><span id="line-200">                
init.invoke(daemon, arg);</span>
-<span class="source-line-no">201</span><span id="line-201">            }</span>
-<span class="source-line-no">202</span><span id="line-202">            else 
{</span>
-<span class="source-line-no">203</span><span id="line-203">                
final Object[] arg = new Object[1];</span>
-<span class="source-line-no">204</span><span id="line-204">                
arg[0] = args;</span>
-<span class="source-line-no">205</span><span id="line-205">                
init.invoke(daemon, arg);</span>
-<span class="source-line-no">206</span><span id="line-206">            }</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">        catch 
(final InvocationTargetException e) {</span>
-<span class="source-line-no">210</span><span id="line-210">            final 
Throwable thrown = e.getTargetException();</span>
-<span class="source-line-no">211</span><span id="line-211">            // 
DaemonInitExceptions can fail with a nicer message</span>
-<span class="source-line-no">212</span><span id="line-212">            if 
(thrown instanceof DaemonInitException) {</span>
-<span class="source-line-no">213</span><span id="line-213">                
failed(((DaemonInitException) thrown).getMessageWithCause());</span>
-<span class="source-line-no">214</span><span id="line-214">            }</span>
-<span class="source-line-no">215</span><span id="line-215">            else 
{</span>
-<span class="source-line-no">216</span><span id="line-216">                
thrown.printStackTrace(System.err);</span>
-<span class="source-line-no">217</span><span id="line-217">            }</span>
-<span class="source-line-no">218</span><span id="line-218">            return 
false;</span>
-<span class="source-line-no">219</span><span id="line-219">        }</span>
-<span class="source-line-no">220</span><span id="line-220">        catch 
(final Throwable t) {</span>
-<span class="source-line-no">221</span><span id="line-221">            // In 
case we encounter ANY error, we dump the stack trace and</span>
-<span class="source-line-no">222</span><span id="line-222">            // 
return false (load, start and stop won't be called).</span>
-<span class="source-line-no">223</span><span id="line-223">            
t.printStackTrace(System.err);</span>
-<span class="source-line-no">224</span><span id="line-224">            return 
false;</span>
-<span class="source-line-no">225</span><span id="line-225">        }</span>
-<span class="source-line-no">226</span><span id="line-226">        // The 
class was loaded and instantiated correctly, we can return</span>
-<span class="source-line-no">227</span><span id="line-227">        return 
true;</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">    public static 
boolean start()</span>
-<span class="source-line-no">231</span><span id="line-231">    {</span>
-<span class="source-line-no">232</span><span id="line-232">        try {</span>
-<span class="source-line-no">233</span><span id="line-233">            // 
Attempt to start the daemon</span>
-<span class="source-line-no">234</span><span id="line-234">            
start.invoke(daemon);</span>
-<span class="source-line-no">235</span><span id="line-235"></span>
-<span class="source-line-no">236</span><span id="line-236">            // Set 
the availability flag in the controller</span>
-<span class="source-line-no">237</span><span id="line-237">            if 
(controller != null) {</span>
-<span class="source-line-no">238</span><span id="line-238">                
controller.setAvailable(true);</span>
-<span class="source-line-no">239</span><span id="line-239">            }</span>
-<span class="source-line-no">240</span><span id="line-240"></span>
-<span class="source-line-no">241</span><span id="line-241">        } catch 
(final Throwable t) {</span>
-<span class="source-line-no">242</span><span id="line-242">            // In 
case we encounter ANY error, we dump the stack trace and</span>
-<span class="source-line-no">243</span><span id="line-243">            // 
return false (load, start and stop won't be called).</span>
-<span class="source-line-no">244</span><span id="line-244">            
t.printStackTrace(System.err);</span>
-<span class="source-line-no">245</span><span id="line-245">            return 
false;</span>
-<span class="source-line-no">246</span><span id="line-246">        }</span>
+<span class="source-line-no">182</span><span id="line-182">            /* 
Check methods */</span>
+<span class="source-line-no">183</span><span id="line-183">            final 
Class&lt;?&gt;[] myclass = new Class[1];</span>
+<span class="source-line-no">184</span><span id="line-184">            if 
(isdaemon) {</span>
+<span class="source-line-no">185</span><span id="line-185">                
myclass[0] = DaemonContext.class;</span>
+<span class="source-line-no">186</span><span id="line-186">            }</span>
+<span class="source-line-no">187</span><span id="line-187">            else 
{</span>
+<span class="source-line-no">188</span><span id="line-188">                
myclass[0] = args.getClass();</span>
+<span class="source-line-no">189</span><span id="line-189">            }</span>
+<span class="source-line-no">190</span><span id="line-190"></span>
+<span class="source-line-no">191</span><span id="line-191">            init    
= c.getMethod("init", myclass);</span>
+<span class="source-line-no">192</span><span id="line-192">            start   
= c.getMethod("start");</span>
+<span class="source-line-no">193</span><span id="line-193">            stop    
= c.getMethod("stop");</span>
+<span class="source-line-no">194</span><span id="line-194">            destroy 
= c.getMethod("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">            try 
{</span>
+<span class="source-line-no">197</span><span id="line-197">                
signal = c.getMethod("signal");</span>
+<span class="source-line-no">198</span><span id="line-198">            } catch 
(final NoSuchMethodException ignored) {</span>
+<span class="source-line-no">199</span><span id="line-199">                // 
Signaling will be disabled.</span>
+<span class="source-line-no">200</span><span id="line-200">            }</span>
+<span class="source-line-no">201</span><span id="line-201"></span>
+<span class="source-line-no">202</span><span id="line-202">            /* 
Create a new instance of the daemon */</span>
+<span class="source-line-no">203</span><span id="line-203">            daemon 
= c.getConstructor().newInstance();</span>
+<span class="source-line-no">204</span><span id="line-204"></span>
+<span class="source-line-no">205</span><span id="line-205">            if 
(isdaemon) {</span>
+<span class="source-line-no">206</span><span id="line-206">                // 
Create a new controller instance</span>
+<span class="source-line-no">207</span><span id="line-207">                
controller = new Controller();</span>
+<span class="source-line-no">208</span><span id="line-208"></span>
+<span class="source-line-no">209</span><span id="line-209">                // 
Set the availability flag in the controller</span>
+<span class="source-line-no">210</span><span id="line-210">                
controller.setAvailable(false);</span>
+<span class="source-line-no">211</span><span id="line-211"></span>
+<span class="source-line-no">212</span><span id="line-212">                /* 
Create context */</span>
+<span class="source-line-no">213</span><span id="line-213">                
final Context context = new Context();</span>
+<span class="source-line-no">214</span><span id="line-214">                
context.setArguments(args);</span>
+<span class="source-line-no">215</span><span id="line-215">                
context.setController(controller);</span>
+<span class="source-line-no">216</span><span id="line-216"></span>
+<span class="source-line-no">217</span><span id="line-217">                // 
Now we want to call the init method in the class</span>
+<span class="source-line-no">218</span><span id="line-218">                
final Object[] arg = new Object[1];</span>
+<span class="source-line-no">219</span><span id="line-219">                
arg[0] = context;</span>
+<span class="source-line-no">220</span><span id="line-220">                
init.invoke(daemon, arg);</span>
+<span class="source-line-no">221</span><span id="line-221">            }</span>
+<span class="source-line-no">222</span><span id="line-222">            else 
{</span>
+<span class="source-line-no">223</span><span id="line-223">                
final Object[] arg = new Object[1];</span>
+<span class="source-line-no">224</span><span id="line-224">                
arg[0] = args;</span>
+<span class="source-line-no">225</span><span id="line-225">                
init.invoke(daemon, arg);</span>
+<span class="source-line-no">226</span><span id="line-226">            }</span>
+<span class="source-line-no">227</span><span id="line-227"></span>
+<span class="source-line-no">228</span><span id="line-228">        }</span>
+<span class="source-line-no">229</span><span id="line-229">        catch 
(final InvocationTargetException e) {</span>
+<span class="source-line-no">230</span><span id="line-230">            final 
Throwable thrown = e.getTargetException();</span>
+<span class="source-line-no">231</span><span id="line-231">            // 
DaemonInitExceptions can fail with a nicer message</span>
+<span class="source-line-no">232</span><span id="line-232">            if 
(thrown instanceof DaemonInitException) {</span>
+<span class="source-line-no">233</span><span id="line-233">                
failed(((DaemonInitException) thrown).getMessageWithCause());</span>
+<span class="source-line-no">234</span><span id="line-234">            }</span>
+<span class="source-line-no">235</span><span id="line-235">            else 
{</span>
+<span class="source-line-no">236</span><span id="line-236">                
thrown.printStackTrace(System.err);</span>
+<span class="source-line-no">237</span><span id="line-237">            }</span>
+<span class="source-line-no">238</span><span id="line-238">            return 
false;</span>
+<span class="source-line-no">239</span><span id="line-239">        }</span>
+<span class="source-line-no">240</span><span id="line-240">        catch 
(final Throwable t) {</span>
+<span class="source-line-no">241</span><span id="line-241">            // In 
case we encounter ANY error, we dump the stack trace and</span>
+<span class="source-line-no">242</span><span id="line-242">            // 
return false (load, start and stop won't be called).</span>
+<span class="source-line-no">243</span><span id="line-243">            
t.printStackTrace(System.err);</span>
+<span class="source-line-no">244</span><span id="line-244">            return 
false;</span>
+<span class="source-line-no">245</span><span id="line-245">        }</span>
+<span class="source-line-no">246</span><span id="line-246">        // The 
class was loaded and instantiated correctly, we can return</span>
 <span class="source-line-no">247</span><span id="line-247">        return 
true;</span>
 <span class="source-line-no">248</span><span id="line-248">    }</span>
 <span class="source-line-no">249</span><span id="line-249"></span>
-<span class="source-line-no">250</span><span id="line-250">    public static 
boolean stop()</span>
-<span class="source-line-no">251</span><span id="line-251">    {</span>
-<span class="source-line-no">252</span><span id="line-252">        try {</span>
-<span class="source-line-no">253</span><span id="line-253">            // Set 
the availability flag in the controller</span>
-<span class="source-line-no">254</span><span id="line-254">            if 
(controller != null) {</span>
-<span class="source-line-no">255</span><span id="line-255">                
controller.setAvailable(false);</span>
-<span class="source-line-no">256</span><span id="line-256">            }</span>
-<span class="source-line-no">257</span><span id="line-257"></span>
-<span class="source-line-no">258</span><span id="line-258">            /* 
Attempt to stop the daemon */</span>
-<span class="source-line-no">259</span><span id="line-259">            
stop.invoke(daemon);</span>
-<span class="source-line-no">260</span><span id="line-260">        }</span>
-<span class="source-line-no">261</span><span id="line-261">        catch 
(final Throwable t) {</span>
-<span class="source-line-no">262</span><span id="line-262">            // In 
case we encounter ANY error, we dump the stack trace and</span>
-<span class="source-line-no">263</span><span id="line-263">            // 
return false (load, start and stop won't be called).</span>
-<span class="source-line-no">264</span><span id="line-264">            
t.printStackTrace(System.err);</span>
-<span class="source-line-no">265</span><span id="line-265">            return 
false;</span>
-<span class="source-line-no">266</span><span id="line-266">        }</span>
-<span class="source-line-no">267</span><span id="line-267">        return 
true;</span>
-<span class="source-line-no">268</span><span id="line-268">    }</span>
-<span class="source-line-no">269</span><span id="line-269"></span>
-<span class="source-line-no">270</span><span id="line-270">    public static 
boolean destroy()</span>
-<span class="source-line-no">271</span><span id="line-271">    {</span>
-<span class="source-line-no">272</span><span id="line-272">        try {</span>
-<span class="source-line-no">273</span><span id="line-273">            /* 
Attempt to stop the daemon */</span>
-<span class="source-line-no">274</span><span id="line-274">            
destroy.invoke(daemon);</span>
-<span class="source-line-no">275</span><span id="line-275"></span>
-<span class="source-line-no">276</span><span id="line-276">            daemon 
= null;</span>
-<span class="source-line-no">277</span><span id="line-277">            
controller = null;</span>
-<span class="source-line-no">278</span><span id="line-278">        } catch 
(final Throwable t) {</span>
-<span class="source-line-no">279</span><span id="line-279">            // In 
case we encounter ANY error, we dump the stack trace and</span>
-<span class="source-line-no">280</span><span id="line-280">            // 
return false (load, start and stop won't be called).</span>
-<span class="source-line-no">281</span><span id="line-281">            
t.printStackTrace(System.err);</span>
-<span class="source-line-no">282</span><span id="line-282">            return 
false;</span>
-<span class="source-line-no">283</span><span id="line-283">        }</span>
-<span class="source-line-no">284</span><span id="line-284">        return 
true;</span>
-<span class="source-line-no">285</span><span id="line-285">    }</span>
-<span class="source-line-no">286</span><span id="line-286"></span>
-<span class="source-line-no">287</span><span id="line-287">    private static 
native void shutdown(boolean reload);</span>
-<span class="source-line-no">288</span><span id="line-288">    private static 
native void failed(String message);</span>
-<span class="source-line-no">289</span><span id="line-289"></span>
-<span class="source-line-no">290</span><span id="line-290">    public static 
class Controller</span>
-<span class="source-line-no">291</span><span id="line-291">        implements 
DaemonController</span>
-<span class="source-line-no">292</span><span id="line-292">    {</span>
-<span class="source-line-no">293</span><span id="line-293"></span>
-<span class="source-line-no">294</span><span id="line-294">        private 
boolean available;</span>
-<span class="source-line-no">295</span><span id="line-295"></span>
-<span class="source-line-no">296</span><span id="line-296">        private 
Controller()</span>
-<span class="source-line-no">297</span><span id="line-297">        {</span>
-<span class="source-line-no">298</span><span id="line-298">            
this.setAvailable(false);</span>
-<span class="source-line-no">299</span><span id="line-299">        }</span>
-<span class="source-line-no">300</span><span id="line-300"></span>
-<span class="source-line-no">301</span><span id="line-301">        private 
boolean isAvailable()</span>
-<span class="source-line-no">302</span><span id="line-302">        {</span>
-<span class="source-line-no">303</span><span id="line-303">            
synchronized (this) {</span>
-<span class="source-line-no">304</span><span id="line-304">                
return this.available;</span>
-<span class="source-line-no">305</span><span id="line-305">            }</span>
-<span class="source-line-no">306</span><span id="line-306">        }</span>
-<span class="source-line-no">307</span><span id="line-307"></span>
-<span class="source-line-no">308</span><span id="line-308">        private 
void setAvailable(final boolean available)</span>
-<span class="source-line-no">309</span><span id="line-309">        {</span>
-<span class="source-line-no">310</span><span id="line-310">            
synchronized (this) {</span>
-<span class="source-line-no">311</span><span id="line-311">                
this.available = available;</span>
-<span class="source-line-no">312</span><span id="line-312">            }</span>
-<span class="source-line-no">313</span><span id="line-313">        }</span>
-<span class="source-line-no">314</span><span id="line-314"></span>
-<span class="source-line-no">315</span><span id="line-315">        
@Override</span>
-<span class="source-line-no">316</span><span id="line-316">        public void 
shutdown()</span>
-<span class="source-line-no">317</span><span id="line-317">            throws 
IllegalStateException</span>
-<span class="source-line-no">318</span><span id="line-318">        {</span>
-<span class="source-line-no">319</span><span id="line-319">            
synchronized (this) {</span>
-<span class="source-line-no">320</span><span id="line-320">                if 
(!this.isAvailable()) {</span>
-<span class="source-line-no">321</span><span id="line-321">                    
throw new IllegalStateException();</span>
-<span class="source-line-no">322</span><span id="line-322">                
}</span>
-<span class="source-line-no">323</span><span id="line-323">                
this.setAvailable(false);</span>
-<span class="source-line-no">324</span><span id="line-324">                
DaemonLoader.shutdown(false);</span>
-<span class="source-line-no">325</span><span id="line-325">            }</span>
-<span class="source-line-no">326</span><span id="line-326">        }</span>
+<span class="source-line-no">250</span><span id="line-250">    /**</span>
+<span class="source-line-no">251</span><span id="line-251">     * Invokes the 
wrapped {@code start} method.</span>
+<span class="source-line-no">252</span><span id="line-252">     *</span>
+<span class="source-line-no">253</span><span id="line-253">     * @return 
whether the call succeeded.</span>
+<span class="source-line-no">254</span><span id="line-254">     */</span>
+<span class="source-line-no">255</span><span id="line-255">    public static 
boolean start()</span>
+<span class="source-line-no">256</span><span id="line-256">    {</span>
+<span class="source-line-no">257</span><span id="line-257">        try {</span>
+<span class="source-line-no">258</span><span id="line-258">            // 
Attempt to start the daemon</span>
+<span class="source-line-no">259</span><span id="line-259">            
start.invoke(daemon);</span>
+<span class="source-line-no">260</span><span id="line-260">            // Set 
the availability flag in the controller</span>
+<span class="source-line-no">261</span><span id="line-261">            if 
(controller != null) {</span>
+<span class="source-line-no">262</span><span id="line-262">                
controller.setAvailable(true);</span>
+<span class="source-line-no">263</span><span id="line-263">            }</span>
+<span class="source-line-no">264</span><span id="line-264">        } catch 
(final Throwable t) {</span>
+<span class="source-line-no">265</span><span id="line-265">            // In 
case we encounter ANY error, we dump the stack trace and</span>
+<span class="source-line-no">266</span><span id="line-266">            // 
return false (load, start and stop won't be called).</span>
+<span class="source-line-no">267</span><span id="line-267">            
t.printStackTrace(System.err);</span>
+<span class="source-line-no">268</span><span id="line-268">            return 
false;</span>
+<span class="source-line-no">269</span><span id="line-269">        }</span>
+<span class="source-line-no">270</span><span id="line-270">        return 
true;</span>
+<span class="source-line-no">271</span><span id="line-271">    }</span>
+<span class="source-line-no">272</span><span id="line-272"></span>
+<span class="source-line-no">273</span><span id="line-273">    /**</span>
+<span class="source-line-no">274</span><span id="line-274">     * Invokes the 
wrapped {@code stop} method.</span>
+<span class="source-line-no">275</span><span id="line-275">     *</span>
+<span class="source-line-no">276</span><span id="line-276">     * @return 
whether the call succeeded.</span>
+<span class="source-line-no">277</span><span id="line-277">     */</span>
+<span class="source-line-no">278</span><span id="line-278">    public static 
boolean stop()</span>
+<span class="source-line-no">279</span><span id="line-279">    {</span>
+<span class="source-line-no">280</span><span id="line-280">        try {</span>
+<span class="source-line-no">281</span><span id="line-281">            // Set 
the availability flag in the controller</span>
+<span class="source-line-no">282</span><span id="line-282">            if 
(controller != null) {</span>
+<span class="source-line-no">283</span><span id="line-283">                
controller.setAvailable(false);</span>
+<span class="source-line-no">284</span><span id="line-284">            }</span>
+<span class="source-line-no">285</span><span id="line-285">            /* 
Attempt to stop the daemon */</span>
+<span class="source-line-no">286</span><span id="line-286">            
stop.invoke(daemon);</span>
+<span class="source-line-no">287</span><span id="line-287">        }</span>
+<span class="source-line-no">288</span><span id="line-288">        catch 
(final Throwable t) {</span>
+<span class="source-line-no">289</span><span id="line-289">            // In 
case we encounter ANY error, we dump the stack trace and</span>
+<span class="source-line-no">290</span><span id="line-290">            // 
return false (load, start and stop won't be called).</span>
+<span class="source-line-no">291</span><span id="line-291">            
t.printStackTrace(System.err);</span>
+<span class="source-line-no">292</span><span id="line-292">            return 
false;</span>
+<span class="source-line-no">293</span><span id="line-293">        }</span>
+<span class="source-line-no">294</span><span id="line-294">        return 
true;</span>
+<span class="source-line-no">295</span><span id="line-295">    }</span>
+<span class="source-line-no">296</span><span id="line-296"></span>
+<span class="source-line-no">297</span><span id="line-297">    /**</span>
+<span class="source-line-no">298</span><span id="line-298">     * Invokes the 
wrapped {@code destroy} method.</span>
+<span class="source-line-no">299</span><span id="line-299">     *</span>
+<span class="source-line-no">300</span><span id="line-300">     * @return 
whether the call succeeded.</span>
+<span class="source-line-no">301</span><span id="line-301">     */</span>
+<span class="source-line-no">302</span><span id="line-302">    public static 
boolean destroy()</span>
+<span class="source-line-no">303</span><span id="line-303">    {</span>
+<span class="source-line-no">304</span><span id="line-304">        try {</span>
+<span class="source-line-no">305</span><span id="line-305">            /* 
Attempt to stop the daemon */</span>
+<span class="source-line-no">306</span><span id="line-306">            
destroy.invoke(daemon);</span>
+<span class="source-line-no">307</span><span id="line-307">            daemon 
= null;</span>
+<span class="source-line-no">308</span><span id="line-308">            
controller = null;</span>
+<span class="source-line-no">309</span><span id="line-309">        } catch 
(final Throwable t) {</span>
+<span class="source-line-no">310</span><span id="line-310">            // In 
case we encounter ANY error, we dump the stack trace and</span>
+<span class="source-line-no">311</span><span id="line-311">            // 
return false (load, start and stop won't be called).</span>
+<span class="source-line-no">312</span><span id="line-312">            
t.printStackTrace(System.err);</span>
+<span class="source-line-no">313</span><span id="line-313">            return 
false;</span>
+<span class="source-line-no">314</span><span id="line-314">        }</span>
+<span class="source-line-no">315</span><span id="line-315">        return 
true;</span>
+<span class="source-line-no">316</span><span id="line-316">    }</span>
+<span class="source-line-no">317</span><span id="line-317"></span>
+<span class="source-line-no">318</span><span id="line-318">    private static 
native void shutdown(boolean reload);</span>
+<span class="source-line-no">319</span><span id="line-319">    private static 
native void failed(String message);</span>
+<span class="source-line-no">320</span><span id="line-320"></span>
+<span class="source-line-no">321</span><span id="line-321">    /**</span>
+<span class="source-line-no">322</span><span id="line-322">     * A 
DaemonController that acts on the the global {@link DaemonLoader} state.</span>
+<span class="source-line-no">323</span><span id="line-323">     */</span>
+<span class="source-line-no">324</span><span id="line-324">    public static 
class Controller</span>
+<span class="source-line-no">325</span><span id="line-325">        implements 
DaemonController</span>
+<span class="source-line-no">326</span><span id="line-326">    {</span>
 <span class="source-line-no">327</span><span id="line-327"></span>
-<span class="source-line-no">328</span><span id="line-328">        
@Override</span>
-<span class="source-line-no">329</span><span id="line-329">        public void 
reload()</span>
-<span class="source-line-no">330</span><span id="line-330">            throws 
IllegalStateException</span>
+<span class="source-line-no">328</span><span id="line-328">        private 
boolean available;</span>
+<span class="source-line-no">329</span><span id="line-329"></span>
+<span class="source-line-no">330</span><span id="line-330">        private 
Controller()</span>
 <span class="source-line-no">331</span><span id="line-331">        {</span>
-<span class="source-line-no">332</span><span id="line-332">            
synchronized (this) {</span>
-<span class="source-line-no">333</span><span id="line-333">                if 
(!this.isAvailable()) {</span>
-<span class="source-line-no">334</span><span id="line-334">                    
throw new IllegalStateException();</span>
-<span class="source-line-no">335</span><span id="line-335">                
}</span>
-<span class="source-line-no">336</span><span id="line-336">                
this.setAvailable(false);</span>
-<span class="source-line-no">337</span><span id="line-337">                
DaemonLoader.shutdown(true);</span>
-<span class="source-line-no">338</span><span id="line-338">            }</span>
-<span class="source-line-no">339</span><span id="line-339">        }</span>
-<span class="source-line-no">340</span><span id="line-340"></span>
-<span class="source-line-no">341</span><span id="line-341">        
@Override</span>
-<span class="source-line-no">342</span><span id="line-342">        public void 
fail()</span>
+<span class="source-line-no">332</span><span id="line-332">            
setAvailable(false);</span>
+<span class="source-line-no">333</span><span id="line-333">        }</span>
+<span class="source-line-no">334</span><span id="line-334"></span>
+<span class="source-line-no">335</span><span id="line-335">        private 
boolean isAvailable()</span>
+<span class="source-line-no">336</span><span id="line-336">        {</span>
+<span class="source-line-no">337</span><span id="line-337">            
synchronized (this) {</span>
+<span class="source-line-no">338</span><span id="line-338">                
return this.available;</span>
+<span class="source-line-no">339</span><span id="line-339">            }</span>
+<span class="source-line-no">340</span><span id="line-340">        }</span>
+<span class="source-line-no">341</span><span id="line-341"></span>
+<span class="source-line-no">342</span><span id="line-342">        private 
void setAvailable(final boolean available)</span>
 <span class="source-line-no">343</span><span id="line-343">        {</span>
-<span class="source-line-no">344</span><span id="line-344">            
fail(null, null);</span>
-<span class="source-line-no">345</span><span id="line-345">        }</span>
-<span class="source-line-no">346</span><span id="line-346"></span>
-<span class="source-line-no">347</span><span id="line-347">        
@Override</span>
-<span class="source-line-no">348</span><span id="line-348">        public void 
fail(final String message)</span>
-<span class="source-line-no">349</span><span id="line-349">        {</span>
-<span class="source-line-no">350</span><span id="line-350">            
fail(message, null);</span>
-<span class="source-line-no">351</span><span id="line-351">        }</span>
-<span class="source-line-no">352</span><span id="line-352"></span>
-<span class="source-line-no">353</span><span id="line-353">        
@Override</span>
-<span class="source-line-no">354</span><span id="line-354">        public void 
fail(final Exception exception)</span>
-<span class="source-line-no">355</span><span id="line-355">        {</span>
-<span class="source-line-no">356</span><span id="line-356">            
fail(null, exception);</span>
-<span class="source-line-no">357</span><span id="line-357">        }</span>
-<span class="source-line-no">358</span><span id="line-358"></span>
-<span class="source-line-no">359</span><span id="line-359">        
@Override</span>
-<span class="source-line-no">360</span><span id="line-360">        public void 
fail(final String message, final Exception exception)</span>
-<span class="source-line-no">361</span><span id="line-361">        {</span>
-<span class="source-line-no">362</span><span id="line-362">            
synchronized (this) {</span>
-<span class="source-line-no">363</span><span id="line-363">                
this.setAvailable(false);</span>
-<span class="source-line-no">364</span><span id="line-364">                
String msg = message;</span>
-<span class="source-line-no">365</span><span id="line-365">                if 
(exception != null) {</span>
-<span class="source-line-no">366</span><span id="line-366">                    
if (msg != null) {</span>
-<span class="source-line-no">367</span><span id="line-367">                    
    msg = msg + ": " + exception.toString();</span>
-<span class="source-line-no">368</span><span id="line-368">                    
}</span>
-<span class="source-line-no">369</span><span id="line-369">                    
else {</span>
-<span class="source-line-no">370</span><span id="line-370">                    
    msg = exception.toString();</span>
-<span class="source-line-no">371</span><span id="line-371">                    
}</span>
-<span class="source-line-no">372</span><span id="line-372">                
}</span>
-<span class="source-line-no">373</span><span id="line-373">                
failed(msg);</span>
-<span class="source-line-no">374</span><span id="line-374">            }</span>
-<span class="source-line-no">375</span><span id="line-375">        }</span>
-<span class="source-line-no">376</span><span id="line-376"></span>
-<span class="source-line-no">377</span><span id="line-377">    }</span>
-<span class="source-line-no">378</span><span id="line-378"></span>
-<span class="source-line-no">379</span><span id="line-379">    public static 
class Context</span>
-<span class="source-line-no">380</span><span id="line-380">        implements 
DaemonContext</span>
-<span class="source-line-no">381</span><span id="line-381">    {</span>
-<span class="source-line-no">382</span><span id="line-382"></span>
-<span class="source-line-no">383</span><span id="line-383">        private 
DaemonController daemonController;</span>
-<span class="source-line-no">384</span><span id="line-384"></span>
-<span class="source-line-no">385</span><span id="line-385">        private 
String[] args;</span>
+<span class="source-line-no">344</span><span id="line-344">            
synchronized (this) {</span>
+<span class="source-line-no">345</span><span id="line-345">                
this.available = available;</span>
+<span class="source-line-no">346</span><span id="line-346">            }</span>
+<span class="source-line-no">347</span><span id="line-347">        }</span>
+<span class="source-line-no">348</span><span id="line-348"></span>
+<span class="source-line-no">349</span><span id="line-349">        
@Override</span>
+<span class="source-line-no">350</span><span id="line-350">        public void 
shutdown()</span>
+<span class="source-line-no">351</span><span id="line-351">            throws 
IllegalStateException</span>
+<span class="source-line-no">352</span><span id="line-352">        {</span>
+<span class="source-line-no">353</span><span id="line-353">            
synchronized (this) {</span>
+<span class="source-line-no">354</span><span id="line-354">                if 
(!isAvailable()) {</span>
+<span class="source-line-no">355</span><span id="line-355">                    
throw new IllegalStateException();</span>
+<span class="source-line-no">356</span><span id="line-356">                
}</span>
+<span class="source-line-no">357</span><span id="line-357">                
setAvailable(false);</span>
+<span class="source-line-no">358</span><span id="line-358">                
DaemonLoader.shutdown(false);</span>
+<span class="source-line-no">359</span><span id="line-359">            }</span>
+<span class="source-line-no">360</span><span id="line-360">        }</span>
+<span class="source-line-no">361</span><span id="line-361"></span>
+<span class="source-line-no">362</span><span id="line-362">        
@Override</span>
+<span class="source-line-no">363</span><span id="line-363">        public void 
reload()</span>
+<span class="source-line-no">364</span><span id="line-364">            throws 
IllegalStateException</span>
+<span class="source-line-no">365</span><span id="line-365">        {</span>
+<span class="source-line-no">366</span><span id="line-366">            
synchronized (this) {</span>
+<span class="source-line-no">367</span><span id="line-367">                if 
(!isAvailable()) {</span>
+<span class="source-line-no">368</span><span id="line-368">                    
throw new IllegalStateException();</span>
+<span class="source-line-no">369</span><span id="line-369">                
}</span>
+<span class="source-line-no">370</span><span id="line-370">                
setAvailable(false);</span>
+<span class="source-line-no">371</span><span id="line-371">                
DaemonLoader.shutdown(true);</span>
+<span class="source-line-no">372</span><span id="line-372">            }</span>
+<span class="source-line-no">373</span><span id="line-373">        }</span>
+<span class="source-line-no">374</span><span id="line-374"></span>
+<span class="source-line-no">375</span><span id="line-375">        
@Override</span>
+<span class="source-line-no">376</span><span id="line-376">        public void 
fail()</span>
+<span class="source-line-no">377</span><span id="line-377">        {</span>
+<span class="source-line-no">378</span><span id="line-378">            
fail(null, null);</span>
+<span class="source-line-no">379</span><span id="line-379">        }</span>
+<span class="source-line-no">380</span><span id="line-380"></span>
+<span class="source-line-no">381</span><span id="line-381">        
@Override</span>
+<span class="source-line-no">382</span><span id="line-382">        public void 
fail(final String message)</span>
+<span class="source-line-no">383</span><span id="line-383">        {</span>
+<span class="source-line-no">384</span><span id="line-384">            
fail(message, null);</span>
+<span class="source-line-no">385</span><span id="line-385">        }</span>
 <span class="source-line-no">386</span><span id="line-386"></span>
 <span class="source-line-no">387</span><span id="line-387">        
@Override</span>
-<span class="source-line-no">388</span><span id="line-388">        public 
DaemonController getController()</span>
+<span class="source-line-no">388</span><span id="line-388">        public void 
fail(final Exception exception)</span>
 <span class="source-line-no">389</span><span id="line-389">        {</span>
-<span class="source-line-no">390</span><span id="line-390">            return 
daemonController;</span>
+<span class="source-line-no">390</span><span id="line-390">            
fail(null, exception);</span>
 <span class="source-line-no">391</span><span id="line-391">        }</span>
 <span class="source-line-no">392</span><span id="line-392"></span>
-<span class="source-line-no">393</span><span id="line-393">        public void 
setController(final DaemonController controller)</span>
-<span class="source-line-no">394</span><span id="line-394">        {</span>
-<span class="source-line-no">395</span><span id="line-395">            
this.daemonController = controller;</span>
-<span class="source-line-no">396</span><span id="line-396">        }</span>
-<span class="source-line-no">397</span><span id="line-397"></span>
-<span class="source-line-no">398</span><span id="line-398">        
@Override</span>
-<span class="source-line-no">399</span><span id="line-399">        public 
String[] getArguments()</span>
-<span class="source-line-no">400</span><span id="line-400">        {</span>
-<span class="source-line-no">401</span><span id="line-401">            return 
args;</span>
-<span class="source-line-no">402</span><span id="line-402">        }</span>
-<span class="source-line-no">403</span><span id="line-403"></span>
-<span class="source-line-no">404</span><span id="line-404">        public void 
setArguments(final String[]args)</span>
-<span class="source-line-no">405</span><span id="line-405">        {</span>
-<span class="source-line-no">406</span><span id="line-406">            
this.args = args;</span>
-<span class="source-line-no">407</span><span id="line-407">        }</span>
-<span class="source-line-no">408</span><span id="line-408"></span>
-<span class="source-line-no">409</span><span id="line-409">    }</span>
-<span class="source-line-no">410</span><span id="line-410">}</span>
+<span class="source-line-no">393</span><span id="line-393">        
@Override</span>
+<span class="source-line-no">394</span><span id="line-394">        public void 
fail(final String message, final Exception exception)</span>
+<span class="source-line-no">395</span><span id="line-395">        {</span>
+<span class="source-line-no">396</span><span id="line-396">            
synchronized (this) {</span>
+<span class="source-line-no">397</span><span id="line-397">                
setAvailable(false);</span>
+<span class="source-line-no">398</span><span id="line-398">                
String msg = message;</span>
+<span class="source-line-no">399</span><span id="line-399">                if 
(exception != null) {</span>
+<span class="source-line-no">400</span><span id="line-400">                    
if (msg != null) {</span>
+<span class="source-line-no">401</span><span id="line-401">                    
    msg = msg + ": " + exception.toString();</span>
+<span class="source-line-no">402</span><span id="line-402">                    
}</span>
+<span class="source-line-no">403</span><span id="line-403">                    
else {</span>
+<span class="source-line-no">404</span><span id="line-404">                    
    msg = exception.toString();</span>
+<span class="source-line-no">405</span><span id="line-405">                    
}</span>
+<span class="source-line-no">406</span><span id="line-406">                
}</span>
+<span class="source-line-no">407</span><span id="line-407">                
failed(msg);</span>
+<span class="source-line-no">408</span><span id="line-408">            }</span>
+<span class="source-line-no">409</span><span id="line-409">        }</span>
+<span class="source-line-no">410</span><span id="line-410"></span>
+<span class="source-line-no">411</span><span id="line-411">    }</span>
+<span class="source-line-no">412</span><span id="line-412"></span>
+<span class="source-line-no">413</span><span id="line-413">    /**</span>
+<span class="source-line-no">414</span><span id="line-414">     * A concrete 
{@link DaemonContext} that acts as a simple value container.</span>
+<span class="source-line-no">415</span><span id="line-415">     */</span>
+<span class="source-line-no">416</span><span id="line-416">    public static 
class Context</span>
+<span class="source-line-no">417</span><span id="line-417">        implements 
DaemonContext</span>
+<span class="source-line-no">418</span><span id="line-418">    {</span>
+<span class="source-line-no">419</span><span id="line-419"></span>
+<span class="source-line-no">420</span><span id="line-420">        private 
DaemonController daemonController;</span>
+<span class="source-line-no">421</span><span id="line-421"></span>
+<span class="source-line-no">422</span><span id="line-422">        private 
String[] args;</span>
+<span class="source-line-no">423</span><span id="line-423"></span>
+<span class="source-line-no">424</span><span id="line-424">        
@Override</span>
+<span class="source-line-no">425</span><span id="line-425">        public 
DaemonController getController()</span>
+<span class="source-line-no">426</span><span id="line-426">        {</span>
+<span class="source-line-no">427</span><span id="line-427">            return 
daemonController;</span>
+<span class="source-line-no">428</span><span id="line-428">        }</span>
+<span class="source-line-no">429</span><span id="line-429"></span>
+<span class="source-line-no">430</span><span id="line-430">        /**</span>
+<span class="source-line-no">431</span><span id="line-431">         * Sets the 
daemon controller.</span>
+<span class="source-line-no">432</span><span id="line-432">         *</span>
+<span class="source-line-no">433</span><span id="line-433">         * @param 
controller the daemon controller.</span>
+<span class="source-line-no">434</span><span id="line-434">         */</span>
+<span class="source-line-no">435</span><span id="line-435">        public void 
setController(final DaemonController controller)</span>
+<span class="source-line-no">436</span><span id="line-436">        {</span>
+<span class="source-line-no">437</span><span id="line-437">            
this.daemonController = controller;</span>
+<span class="source-line-no">438</span><span id="line-438">        }</span>
+<span class="source-line-no">439</span><span id="line-439"></span>
+<span class="source-line-no">440</span><span id="line-440">        
@Override</span>
+<span class="source-line-no">441</span><span id="line-441">        public 
String[] getArguments()</span>
+<span class="source-line-no">442</span><span id="line-442">        {</span>
+<span class="source-line-no">443</span><span id="line-443">            return 
args;</span>
+<span class="source-line-no">444</span><span id="line-444">        }</span>
+<span class="source-line-no">445</span><span id="line-445"></span>
+<span class="source-line-no">446</span><span id="line-446">        /**</span>
+<span class="source-line-no">447</span><span id="line-447">         * Sets 
arguments. Note that this implementation doesn't currently make a defensive 
copy.</span>
+<span class="source-line-no">448</span><span id="line-448">         *</span>
+<span class="source-line-no">449</span><span id="line-449">         * @param 
args arguments.</span>
+<span class="source-line-no">450</span><span id="line-450">         */</span>
+<span class="source-line-no">451</span><span id="line-451">        public void 
setArguments(final String[] args)</span>
+<span class="source-line-no">452</span><span id="line-452">        {</span>
+<span class="source-line-no">453</span><span id="line-453">            
this.args = args;</span>
+<span class="source-line-no">454</span><span id="line-454">        }</span>
+<span class="source-line-no">455</span><span id="line-455"></span>
+<span class="source-line-no">456</span><span id="line-456">    }</span>
+<span class="source-line-no">457</span><span id="line-457">}</span>
 
 
 


Reply via email to