Re-included the means to prevent the main thread from exiting until the vm is exited elsewhere (either Ctrl+C, terminateJVM, etc.)

git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@365865 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Adrian T. Co 2006-01-04 08:48:41 +00:00
parent 050637cdf6
commit b70c8d1cb2
1 changed files with 37 additions and 3 deletions

View File

@ -111,7 +111,8 @@ public class Main {
QUERY_TYPE_ID_MAP.setProperty("Topic", "Destination");
};
private final ArrayList extensions = new ArrayList();
private final List brokers = new ArrayList();
private final List extensions = new ArrayList();
private final Map queryObjects = new HashMap();
private final List queryViews = new ArrayList();
@ -444,6 +445,8 @@ public class Main {
this.startBroker(this.getConfigUri());
// }
}
waitForShutdown();
}
protected void taskStopBrokers(List brokerNames) throws Throwable {
@ -649,6 +652,37 @@ public class Main {
}
}
public void waitForShutdown() throws Throwable {
// Prevent the main thread from exiting, in case this is the last user thread
final boolean[] shutdown = new boolean[]{false};
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
synchronized(shutdown) {
shutdown[0]=true;
shutdown.notify();
}
}
});
synchronized(shutdown) {
while( !shutdown[0] ) {
shutdown.wait();
}
}
// Use reflection to stop the broker in case, the vm was exited via unconventional means
try {
for (Iterator i=brokers.iterator(); i.hasNext();) {
Object broker = i.next();
Method stop = broker.getClass().getMethod("stop", new Class[] {});
stop.invoke(broker, new Object[] {});
}
} catch (InvocationTargetException e) {
throw e.getCause();
} catch (Throwable e) {
throw e;
}
}
public void stopBroker(MBeanServerConnection server, String brokerName) {
ObjectName brokerObjName = null;
try {