aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-process/src
diff options
context:
space:
mode:
authorStephane Gamard <stephane.gamard@searchbox.com>2014-07-18 14:38:50 +0200
committerStephane Gamard <stephane.gamard@searchbox.com>2014-07-18 15:52:16 +0200
commit9ed09aa7bd0e0541b45ff6c4ac0238d10769448c (patch)
tree5bf30cc64ae7b9a28ef6ec787ea405cdb4b9b915 /server/sonar-process/src
parentc3174fada2ab193d03661209bee3291772b8f347 (diff)
downloadsonarqube-9ed09aa7bd0e0541b45ff6c4ac0238d10769448c.tar.gz
sonarqube-9ed09aa7bd0e0541b45ff6c4ac0238d10769448c.zip
SONAR-5408 - ProcessWrapper passes properties file as args[0]
Diffstat (limited to 'server/sonar-process/src')
-rw-r--r--server/sonar-process/src/main/java/org/sonar/process/Process.java45
-rw-r--r--server/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java9
2 files changed, 43 insertions, 11 deletions
diff --git a/server/sonar-process/src/main/java/org/sonar/process/Process.java b/server/sonar-process/src/main/java/org/sonar/process/Process.java
index f345adf4f42..c511bf7f127 100644
--- a/server/sonar-process/src/main/java/org/sonar/process/Process.java
+++ b/server/sonar-process/src/main/java/org/sonar/process/Process.java
@@ -19,6 +19,7 @@
*/
package org.sonar.process;
+import com.google.common.annotations.VisibleForTesting;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -30,7 +31,10 @@ import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
import java.lang.management.ManagementFactory;
+import java.util.Properties;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
@@ -54,11 +58,11 @@ public abstract class Process implements ProcessMXBean {
protected Long lastPing;
- final String name;
- final Integer port;
+ String name;
+ Integer port;
- final protected Props props;
- final private Thread shutdownHook;
+ protected final Props props;
+ private Thread shutdownHook;
private static final long MAX_ALLOWED_TIME = 3000L;
private ScheduledFuture<?> pingTask = null;
@@ -75,15 +79,40 @@ public abstract class Process implements ProcessMXBean {
}
};
+ public Process(String[] args) {
+ // loading arguments from file and system.
+ if (args.length < 1) {
+ throw new IllegalStateException("Process is missing argument!");
+ }
+
+ File propertyFile = new File(args[0]);
+ if (!propertyFile.exists()) {
+ throw new IllegalStateException("Property file '" + args[0] + "' does not exist! ");
+ }
+
+ Properties properties = new Properties();
+ try {
+ properties.load(new FileReader(propertyFile));
+ } catch (IOException e) {
+ throw new IllegalStateException("Could not read properties from file '" + args[0] + "'", e);
+ }
+ props = Props.create(properties);
+ init();
+ }
+
+ @VisibleForTesting
public Process(Props props) {
-
- validateSonarHome(props);
-
- // Loading all Properties from file
this.props = props;
+ init();
+ }
+
+ private void init() {
+
+ // Loading all Properties from file
this.name = props.of(NAME_PROPERTY, null);
this.port = props.intOf(PORT_PROPERTY);
+ validateSonarHome(props);
// Testing required properties
if (StringUtils.isEmpty(this.name)) {
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 c1b1ff5067b..9e0495eafc3 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
@@ -143,7 +143,7 @@ public class ProcessWrapper extends Thread {
if (properties.containsKey(Process.JAVA_OPS)) {
return properties.get(Process.JAVA_OPS);
} else {
- return "";
+ return null;
}
}
@@ -187,13 +187,16 @@ public class ProcessWrapper extends Thread {
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command().add(getJavaCommand());
- processBuilder.command().add(getJavaOptions());
+
+ String javaOptions = getJavaOptions();
+ if (!StringUtils.isEmpty(javaOptions)) {
+ processBuilder.command().add(getJavaOptions());
+ }
processBuilder.command().addAll(getJMXOptions());
processBuilder.command().addAll(getClassPath());
processBuilder.command().add(className);
processBuilder.command().add(getPropertyFile());
-
//TODO remove once Process uses the temp file generated by getPropertyFile();
processBuilder.environment().putAll(properties);