Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
ExitOnErrorThreadGroup |
|
| 2.0;2 |
1 | /* | |
2 | * Licensed to the Apache Software Foundation (ASF) under one or more | |
3 | * contributor license agreements. See the NOTICE file distributed with | |
4 | * this work for additional information regarding copyright ownership. | |
5 | * The ASF licenses this file to You under the Apache License, Version 2.0 | |
6 | * (the "License"); you may not use this file except in compliance with | |
7 | * the License. You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | */ | |
17 | ||
18 | package org.apache.commons.launcher; | |
19 | ||
20 | /** | |
21 | * A class that subclasses the {@link ThreadGroup} class. This class is used | |
22 | * by {@link ChildMain#main(String[])} to run the target application. By using | |
23 | * this class, any {@link Error} other than {@link ThreadDeath} thrown by | |
24 | * threads created by the target application will be caught the process | |
25 | * terminated. By default, the JVM will only print a stack trace of the | |
26 | * {@link Error} and destroy the thread. However, when an uncaught | |
27 | * {@link Error} occurs, it normally means that the JVM has encountered a | |
28 | * severe problem. Hence, an orderly shutdown is a reasonable approach. | |
29 | * <p> | |
30 | * Note: not all threads created by the target application are guaranteed to | |
31 | * use this class. Target application's may bypass this class by creating a | |
32 | * thread using the {@link Thread#Thread(ThreadGroup, String)} or other similar | |
33 | * constructors. | |
34 | * | |
35 | * @author Patrick Luby | |
36 | */ | |
37 | public class ExitOnErrorThreadGroup extends ThreadGroup { | |
38 | ||
39 | //------------------------------------------------------------ Constructors | |
40 | ||
41 | /** | |
42 | * Constructs a new thread group. The parent of this new group is the | |
43 | * thread group of the currently running thread. | |
44 | * | |
45 | * @param name the name of the new thread group | |
46 | */ | |
47 | public ExitOnErrorThreadGroup(String name) { | |
48 | ||
49 | 0 | super(name); |
50 | ||
51 | 0 | } |
52 | ||
53 | //----------------------------------------------------------------- Methods | |
54 | ||
55 | /** | |
56 | * Trap any uncaught {@link Error} other than {@link ThreadDeath} and exit. | |
57 | * | |
58 | * @param t the thread that is about to exit | |
59 | * @param e the uncaught exception | |
60 | */ | |
61 | public void uncaughtException(Thread t, Throwable e) { | |
62 | ||
63 | 0 | if (e instanceof ThreadDeath) |
64 | 0 | return; |
65 | ||
66 | 0 | Launcher.error(e); |
67 | 0 | System.exit(1); |
68 | ||
69 | 0 | } |
70 | ||
71 | } |