summaryrefslogtreecommitdiff
path: root/qpid/java/broker/src/main
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2012-01-02 21:58:18 +0000
committerRobert Godfrey <rgodfrey@apache.org>2012-01-02 21:58:18 +0000
commitd206b0cd169f9e96b4841b9ac41ab4decfa3651a (patch)
treeb35923a4798115c3a29ad89c2cf079f4a2c85c32 /qpid/java/broker/src/main
parenta22cc2b1e6659a919f5d34345f2e9351726fb843 (diff)
downloadqpid-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.java65
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();