You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2010/10/16 16:58:39 UTC

svn commit: r1023303 - in /commons/proper/daemon/trunk: RELEASE-NOTES.txt src/java/org/apache/commons/daemon/Daemon.java src/java/org/apache/commons/daemon/DaemonInitException.java src/java/org/apache/commons/daemon/support/DaemonLoader.java

Author: mturk
Date: Sat Oct 16 14:58:39 2010
New Revision: 1023303

URL: http://svn.apache.org/viewvc?rev=1023303&view=rev
Log:
DAEMON-177: Allow fail during init. Patch provided by Nick Griffiths

Added:
    commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/DaemonInitException.java   (with props)
Modified:
    commons/proper/daemon/trunk/RELEASE-NOTES.txt
    commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/Daemon.java
    commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java

Modified: commons/proper/daemon/trunk/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/RELEASE-NOTES.txt?rev=1023303&r1=1023302&r2=1023303&view=diff
==============================================================================
--- commons/proper/daemon/trunk/RELEASE-NOTES.txt (original)
+++ commons/proper/daemon/trunk/RELEASE-NOTES.txt Sat Oct 16 14:58:39 2010
@@ -15,6 +15,7 @@ follow the release early/release often m
 
 NEW FEATURES:
 
+* DAEMON-177: Allow fail during init with nicer message. (1.0.4)
 * DAEMON-176: Create config.nice during configure step. (1.0.4)
 * DAEMON-173: Allow --JavaHome=jdk and --JavaHome=jre options that
               will guess default JavaHome from the registry. (1.0.4)
@@ -46,7 +47,8 @@ NEW FEATURES:
 
 BUG FIXES:
 
-1.0.4: DAEMON-95, DAEMON-171, DAEMON-100, DAEMON-164, DAEMON-165, DAEMON-175
+1.0.4: DAEMON-95, DAEMON-171, DAEMON-100, DAEMON-164, DAEMON-165, DAEMON-175,
+       DAEMON-177
 
 1.0.3: DAEMON-108, DAEMON-128, DAEMON-139, DAEMON-143, DAEMON-148,
        DAEMON-135, DAEMON-155, DAEMON-159, DAEMON-161, DAEMON-145, DAEMON-146,

Modified: commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/Daemon.java
URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/Daemon.java?rev=1023303&r1=1023302&r2=1023303&view=diff
==============================================================================
--- commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/Daemon.java (original)
+++ commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/Daemon.java Sat Oct 16 14:58:39 2010
@@ -63,12 +63,14 @@ public interface Daemon
      *
      * @param context A <code>DaemonContext</code> object used to
      * communicate with the container.
-     *
+     * @exception DaemonInitException An exception that prevented 
+     * initialization where you want to display a nice message to the user,
+     * rather than a stack trace.
      * @exception Exception Any exception preventing a successful
      *                      initialization.
      */
     public void init(DaemonContext context)
-        throws Exception;
+        throws DaemonInitException, Exception;
 
     /**
      * Start the operation of this <code>Daemon</code> instance. This

Added: commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/DaemonInitException.java
URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/DaemonInitException.java?rev=1023303&view=auto
==============================================================================
--- commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/DaemonInitException.java (added)
+++ commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/DaemonInitException.java Sat Oct 16 14:58:39 2010
@@ -0,0 +1,44 @@
+/*
+ *  Copyright 2010 Media Service Provider Ltd
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License./*
+ *
+ */
+package org.apache.commons.daemon;
+
+/**
+ * Throw this during init if you can't initialise yourself for some expected 
+ * reason.  Using this exception will cause the exception's message to come out
+ * on stdout, rather than a dirty great stacktrace.
+ * @author Nick Griffiths (nicobrevin@gmail.com)
+ */
+public class DaemonInitException extends Exception {
+
+  //don't rely on Throwable#getCause (jdk1.4)
+  private Throwable cause;
+
+  public DaemonInitException(String message) {
+    super(message);
+  }
+
+  public DaemonInitException(String message, Throwable cause) {
+    super(message);
+    this.cause = cause;
+  }
+
+  public String getMessageWithCause() {
+    String extra = this.cause == null ? "" : ": " + this.cause.getMessage();
+    return getMessage() + extra;
+  }
+
+}

Propchange: commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/DaemonInitException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java
URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java?rev=1023303&r1=1023302&r2=1023303&view=diff
==============================================================================
--- commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java (original)
+++ commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java Sat Oct 16 14:58:39 2010
@@ -19,7 +19,9 @@ package org.apache.commons.daemon.suppor
 
 import org.apache.commons.daemon.DaemonContext;
 import org.apache.commons.daemon.DaemonController;
+import org.apache.commons.daemon.DaemonInitException;
 
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
 /*
@@ -169,6 +171,15 @@ public final class DaemonLoader
                 init.invoke(daemon, arg);
             }
 
+        } catch (InvocationTargetException e) {
+          Throwable thrown = e.getCause();
+          /* DaemonInitExceptions can fail with a nicer message */
+          if (thrown instanceof DaemonInitException) {
+            failed(((DaemonInitException) thrown).getMessageWithCause());
+          } else {
+            thrown.printStackTrace(System.err);
+          }
+          return false;
         } catch (Throwable t) {
             /* In case we encounter ANY error, we dump the stack trace and
              * return false (load, start and stop won't be called).
@@ -306,41 +317,32 @@ public final class DaemonLoader
         }
 
         public void fail()
-            throws IllegalStateException
         {
             fail(null, null);
         }
 
         public void fail(String message)
-            throws IllegalStateException
         {
             fail(message, null);
         }
 
         public void fail(Exception exception)
-            throws IllegalStateException
         {
             fail(null, exception);
         }
 
         public void fail(String message, Exception exception)
-            throws IllegalStateException
         {
             synchronized (this) {
-                if (!this.isAvailable()) {
-                    throw new IllegalStateException();
-                }
-                else {
-                    this.setAvailable(false);
-                    String msg = message;
-                    if (exception != null) {
-                        if (msg != null)
-                            msg = msg + ": " + exception.toString();
-                        else
-                            msg = exception.toString();
-                    }
-                    DaemonLoader.failed(msg);
+                this.setAvailable(false);
+                String msg = message;
+                if (exception != null) {
+                    if (msg != null)
+                        msg = msg + ": " + exception.toString();
+                    else
+                        msg = exception.toString();
                 }
+                DaemonLoader.failed(msg);
             }
         }
 



Re: svn commit: r1023303 - in /commons/proper/daemon/trunk: RELEASE-NOTES.txt src/java/org/apache/commons/daemon/Daemon.java src/java/org/apache/commons/daemon/DaemonInitException.java src/java/org/apache/commons/daemon/support/DaemonLoader.java

Posted by Nick Griffiths <ni...@gmail.com>.
OK, i've removed the other use of getCause and modified the SimpleDaemon to
use the exception if it can't bind to its server port.

I'm going to have a look and see if I can get the failure message to come
out on stderr, as well as out to the logs (if they are used). Reason being
that if you are running /etc/init.d/my-jsvc-daemon start you will see the
actual failure reason, rather than just inspecting $? and then having to
trawl through the logs.


Cheers,
Nick

On Sat, Oct 16, 2010 at 11:05 PM, Nick Griffiths <ni...@gmail.com>wrote:

> Ah crap. Will fix tomo.
> On 16 Oct 2010 16:34, "sebb" <se...@gmail.com> wrote:
> > On 16 October 2010 15:58, <mt...@apache.org> wrote:
> >> Author: mturk
> >> Date: Sat Oct 16 14:58:39 2010
> >> New Revision: 1023303
> >>
> >> URL: http://svn.apache.org/viewvc?rev=1023303&view=rev
> >> Log:
> >> DAEMON-177: Allow fail during init. Patch provided by Nick Griffiths
> >>
> >> Added:
> >>
>  commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/DaemonInitException.java
>   (with props)
> >> Modified:
> >>    commons/proper/daemon/trunk/RELEASE-NOTES.txt
> >>
>  commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/Daemon.java
> >>
>  commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java
> >>
> >
> >> Modified:
> commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java
> >> URL:
> http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java?rev=1023303&r1=1023302&r2=1023303&view=diff
> >>
> ==============================================================================
> >> ---
> commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java
> (original)
> >> +++
> commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java
> Sat Oct 16 14:58:39 2010
> >> @@ -19,7 +19,9 @@ package org.apache.commons.daemon.suppor
> >>
> >>  import org.apache.commons.daemon.DaemonContext;
> >>  import org.apache.commons.daemon.DaemonController;
> >> +import org.apache.commons.daemon.DaemonInitException;
> >>
> >> +import java.lang.reflect.InvocationTargetException;
> >>  import java.lang.reflect.Method;
> >>
> >>  /*
> >> @@ -169,6 +171,15 @@ public final class DaemonLoader
> >>                 init.invoke(daemon, arg);
> >>             }
> >>
> >> +        } catch (InvocationTargetException e) {
> >> +          Throwable thrown = e.getCause();
> >
> > That's not available in 1.3.
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > For additional commands, e-mail: dev-help@commons.apache.org
> >
>

Re: svn commit: r1023303 - in /commons/proper/daemon/trunk: RELEASE-NOTES.txt src/java/org/apache/commons/daemon/Daemon.java src/java/org/apache/commons/daemon/DaemonInitException.java src/java/org/apache/commons/daemon/support/DaemonLoader.java

Posted by Nick Griffiths <ni...@gmail.com>.
Ah crap. Will fix tomo.
On 16 Oct 2010 16:34, "sebb" <se...@gmail.com> wrote:
> On 16 October 2010 15:58, <mt...@apache.org> wrote:
>> Author: mturk
>> Date: Sat Oct 16 14:58:39 2010
>> New Revision: 1023303
>>
>> URL: http://svn.apache.org/viewvc?rev=1023303&view=rev
>> Log:
>> DAEMON-177: Allow fail during init. Patch provided by Nick Griffiths
>>
>> Added:
>>
 commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/DaemonInitException.java
  (with props)
>> Modified:
>>    commons/proper/daemon/trunk/RELEASE-NOTES.txt
>>
 commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/Daemon.java
>>
 commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java
>>
>
>> Modified:
commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java
>> URL:
http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java?rev=1023303&r1=1023302&r2=1023303&view=diff
>>
==============================================================================
>> ---
commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java
(original)
>> +++
commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java
Sat Oct 16 14:58:39 2010
>> @@ -19,7 +19,9 @@ package org.apache.commons.daemon.suppor
>>
>>  import org.apache.commons.daemon.DaemonContext;
>>  import org.apache.commons.daemon.DaemonController;
>> +import org.apache.commons.daemon.DaemonInitException;
>>
>> +import java.lang.reflect.InvocationTargetException;
>>  import java.lang.reflect.Method;
>>
>>  /*
>> @@ -169,6 +171,15 @@ public final class DaemonLoader
>>                 init.invoke(daemon, arg);
>>             }
>>
>> +        } catch (InvocationTargetException e) {
>> +          Throwable thrown = e.getCause();
>
> That's not available in 1.3.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>

Re: svn commit: r1023303 - in /commons/proper/daemon/trunk: RELEASE-NOTES.txt src/java/org/apache/commons/daemon/Daemon.java src/java/org/apache/commons/daemon/DaemonInitException.java src/java/org/apache/commons/daemon/support/DaemonLoader.java

Posted by sebb <se...@gmail.com>.
On 16 October 2010 15:58,  <mt...@apache.org> wrote:
> Author: mturk
> Date: Sat Oct 16 14:58:39 2010
> New Revision: 1023303
>
> URL: http://svn.apache.org/viewvc?rev=1023303&view=rev
> Log:
> DAEMON-177: Allow fail during init. Patch provided by Nick Griffiths
>
> Added:
>    commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/DaemonInitException.java   (with props)
> Modified:
>    commons/proper/daemon/trunk/RELEASE-NOTES.txt
>    commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/Daemon.java
>    commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java
>

> Modified: commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java
> URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java?rev=1023303&r1=1023302&r2=1023303&view=diff
> ==============================================================================
> --- commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java (original)
> +++ commons/proper/daemon/trunk/src/java/org/apache/commons/daemon/support/DaemonLoader.java Sat Oct 16 14:58:39 2010
> @@ -19,7 +19,9 @@ package org.apache.commons.daemon.suppor
>
>  import org.apache.commons.daemon.DaemonContext;
>  import org.apache.commons.daemon.DaemonController;
> +import org.apache.commons.daemon.DaemonInitException;
>
> +import java.lang.reflect.InvocationTargetException;
>  import java.lang.reflect.Method;
>
>  /*
> @@ -169,6 +171,15 @@ public final class DaemonLoader
>                 init.invoke(daemon, arg);
>             }
>
> +        } catch (InvocationTargetException e) {
> +          Throwable thrown = e.getCause();

That's not available in 1.3.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org