diff options
author | Stephane Gamard <stephane.gamard@searchbox.com> | 2014-07-22 18:17:35 +0200 |
---|---|---|
committer | Stephane Gamard <stephane.gamard@searchbox.com> | 2014-07-23 15:34:06 +0200 |
commit | 94445f214582872ae49e26e675a5483fb2352807 (patch) | |
tree | 733383e811ab8e275bf99faad079a2caebe842d3 | |
parent | 67e04a3013976290743a682323c1ffe80672b069 (diff) | |
download | sonarqube-94445f214582872ae49e26e675a5483fb2352807.tar.gz sonarqube-94445f214582872ae49e26e675a5483fb2352807.zip |
SONAR-4898 - updated stop method for top level process
-rw-r--r-- | server/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java | 9 | ||||
-rw-r--r-- | sonar-application/src/main/java/org/sonar/application/StartServer.java | 35 |
2 files changed, 21 insertions, 23 deletions
diff --git a/server/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java b/server/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java index d08163d56fd..b909bfe550a 100644 --- a/server/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java +++ b/server/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java @@ -64,13 +64,11 @@ public class ProcessWrapper extends Thread { private File workDir; private File propertiesFile; private java.lang.Process process; - private volatile Thread processThread; private StreamGobbler errorGobbler; private StreamGobbler outputGobbler; private ProcessMXBean processMXBean; public ProcessWrapper(String processName) { - this.processThread = this; this.processName = processName; } @@ -163,10 +161,10 @@ public class ProcessWrapper extends Thread { } catch (InterruptedException e) { e.printStackTrace(); } finally { + process.destroy(); waitUntilFinish(outputGobbler); waitUntilFinish(errorGobbler); closeStreams(process); - ProcessWrapper.this.processThread = null; } LOGGER.trace("ProcessWrapper::run() END"); } @@ -179,12 +177,9 @@ public class ProcessWrapper extends Thread { return processMXBean; } - public Object getThread() { - return this.processThread; - } - private void waitUntilFinish(@Nullable Thread thread) { if (thread != null) { + //TODO kill after X amount of time (if process does not exit by itself). try { thread.join(); } catch (InterruptedException e) { diff --git a/sonar-application/src/main/java/org/sonar/application/StartServer.java b/sonar-application/src/main/java/org/sonar/application/StartServer.java index 18cee9bdcaa..c485c489efe 100644 --- a/sonar-application/src/main/java/org/sonar/application/StartServer.java +++ b/sonar-application/src/main/java/org/sonar/application/StartServer.java @@ -46,9 +46,7 @@ public class StartServer { shutdownHook = new Thread(new Runnable() { @Override public void run() { - monitor.interrupt(); - terminateAndWait(elasticsearch); - terminateAndWait(server); + stop(); } }); @@ -76,6 +74,10 @@ public class StartServer { .setEnvProperty("SONAR_HOME", installation.homeDir().getAbsolutePath()) .setArguments(installation.props()) .setArgument("sonar.es.type", "TRANSPORT") + .addClasspath(installation.starPath("extensions/jdbc-driver/mysql")) + .addClasspath(installation.starPath("extensions/jdbc-driver/mssql")) + .addClasspath(installation.starPath("extensions/jdbc-driver/oracle")) + .addClasspath(installation.starPath("extensions/jdbc-driver/postgresql")) .addClasspath(installation.starPath("lib/common")) .addClasspath(installation.starPath("lib/server")); monitor.registerProcess(server); @@ -83,27 +85,28 @@ public class StartServer { monitor.start(); try { monitor.join(); - } catch (InterruptedException e) { - stop(true); + } finally { + stop(); } - stop(true); } - public void stop(boolean waitForCompletion) { - Runtime.getRuntime().removeShutdownHook(shutdownHook); - shutdownHook.start(); - if (waitForCompletion) { - try { - shutdownHook.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } + public void stop() { + if (monitor != null) { + monitor.interrupt(); + terminateAndWait(elasticsearch); + terminateAndWait(server); + monitor = null; } } private void terminateAndWait(@Nullable ProcessWrapper process) { - if (process != null && process.getThread() != null) { + if (process != null) { process.terminate(); + try { + process.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } } } |