diff options
| author | Robert Godfrey <rgodfrey@apache.org> | 2012-01-02 21:58:18 +0000 |
|---|---|---|
| committer | Robert Godfrey <rgodfrey@apache.org> | 2012-01-02 21:58:18 +0000 |
| commit | d206b0cd169f9e96b4841b9ac41ab4decfa3651a (patch) | |
| tree | b35923a4798115c3a29ad89c2cf079f4a2c85c32 /qpid/java/broker/src/main | |
| parent | a22cc2b1e6659a919f5d34345f2e9351726fb843 (diff) | |
| download | qpid-python-d206b0cd169f9e96b4841b9ac41ab4decfa3651a.tar.gz | |
QPID-464 : Set the default uncaught exception handler to abruptly terminate the JVM
(Note this commit also contains fixes for CurrentActorTest as it was discovered that this test was throwing uncaught exceptions from created Threads - i.e. not the main test thread)
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1226557 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker/src/main')
| -rw-r--r-- | qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java index 0c038c7800..e53c73b8a8 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java @@ -230,11 +230,74 @@ public class Main { parsePortArray(options, commandLine.getOptionValues(pe.getExcludeName()), pe); } - } + } + + setExceptionHandler(); startBroker(options); } + protected void setExceptionHandler() + { + Thread.UncaughtExceptionHandler handler = null; + String handlerClass = System.getProperty("qpid.broker.exceptionHandler"); + if(handlerClass != null) + { + try + { + handler = (Thread.UncaughtExceptionHandler) Class.forName(handlerClass).newInstance(); + } + catch (ClassNotFoundException e) + { + + } + catch (InstantiationException e) + { + + } + catch (IllegalAccessException e) + { + + } + catch (ClassCastException e) + { + + } + } + + if(handler == null) + { + handler = + new Thread.UncaughtExceptionHandler() + { + public void uncaughtException(final Thread t, final Throwable e) + { + try + { + System.err.println("########################################################################"); + System.err.println("#"); + System.err.print("# Unhandled Exception "); + System.err.print(e.toString()); + System.err.print(" in Thread "); + System.err.println(t.getName()); + System.err.println("#"); + System.err.println("# Exiting"); + System.err.println("#"); + System.err.println("########################################################################"); + e.printStackTrace(System.err); + } + finally + { + Runtime.getRuntime().halt(1); + } + + } + }; + + Thread.setDefaultUncaughtExceptionHandler(handler); + } + } + protected void startBroker(final BrokerOptions options) throws Exception { Broker broker = new Broker(); |
