mirror of https://github.com/apache/nifi.git
NIFI-5175 Updated NiFi compiled on Java 1.8 to run on Java 9
The bootstrap process (RunNiFi) detects Java 9 and adds "--add-modules=java.xml.bind" to the command to start NiFi Updated OSUtils to detect Java 9 and reflectively invoke the Process.pid() method to get the PID of the NiFi process Added java debug variable to nifi.sh to allow debugging of the bootstrap process (RunNiFi) This closes #2708 Signed-off-by: Mike Thomsen <mikerthomsen@gmail.com>
This commit is contained in:
parent
775cf42560
commit
807e1e5c7a
|
@ -1032,6 +1032,10 @@ public class RunNiFi {
|
||||||
cmd.add("-Dnifi.bootstrap.listen.port=" + listenPort);
|
cmd.add("-Dnifi.bootstrap.listen.port=" + listenPort);
|
||||||
cmd.add("-Dapp=NiFi");
|
cmd.add("-Dapp=NiFi");
|
||||||
cmd.add("-Dorg.apache.nifi.bootstrap.config.log.dir=" + nifiLogDir);
|
cmd.add("-Dorg.apache.nifi.bootstrap.config.log.dir=" + nifiLogDir);
|
||||||
|
if (!System.getProperty("java.version").startsWith("1.")) {
|
||||||
|
// running on Java 9+, java.xml.bind module must be made available
|
||||||
|
cmd.add("--add-modules=java.xml.bind");
|
||||||
|
}
|
||||||
cmd.add("org.apache.nifi.NiFi");
|
cmd.add("org.apache.nifi.NiFi");
|
||||||
if (isSensitiveKeyPresent(props)) {
|
if (isSensitiveKeyPresent(props)) {
|
||||||
Path sensitiveKeyFile = createSensitiveKeyFile(confDir);
|
Path sensitiveKeyFile = createSensitiveKeyFile(confDir);
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
package org.apache.nifi.bootstrap.util;
|
package org.apache.nifi.bootstrap.util;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import com.sun.jna.Pointer;
|
import com.sun.jna.Pointer;
|
||||||
|
@ -94,14 +96,40 @@ public final class OSUtils {
|
||||||
* Purpose for the Logger is to log any interaction for debugging.
|
* Purpose for the Logger is to log any interaction for debugging.
|
||||||
*/
|
*/
|
||||||
public static Long getProcessId(final Process process, final Logger logger) {
|
public static Long getProcessId(final Process process, final Logger logger) {
|
||||||
if (process.getClass().getName().equals("java.lang.UNIXProcess")) {
|
/*
|
||||||
return getUnicesPid(process, logger);
|
* NIFI-5175: NiFi built with Java 1.8 and running on Java 9. Reflectively invoke Process.pid() on
|
||||||
|
* the given process instance to get the PID of this Java process. Reflection is required in this scenario
|
||||||
|
* due to NiFi being compiled on Java 1.8, which does not have the Process API improvements available in
|
||||||
|
* Java 9.
|
||||||
|
*
|
||||||
|
* Otherwise, if NiFi is running on Java 1.8, attempt to get PID using capabilities available on Java 1.8.
|
||||||
|
*
|
||||||
|
* TODO: When minimum Java version updated to Java 9+, this class should be removed with the addition
|
||||||
|
* of the pid method to the Process API.
|
||||||
|
*/
|
||||||
|
Long pid = null;
|
||||||
|
if (!System.getProperty("java.version").startsWith("1.")) {
|
||||||
|
try {
|
||||||
|
Method pidMethod = process.getClass().getMethod("pid");
|
||||||
|
pidMethod.setAccessible(true);
|
||||||
|
Object pidMethodResult = pidMethod.invoke(process);
|
||||||
|
if (Long.class.isAssignableFrom(pidMethodResult.getClass())) {
|
||||||
|
pid = (Long) pidMethodResult;
|
||||||
|
} else {
|
||||||
|
logger.debug("Could not determine PID for child process because returned PID was not " +
|
||||||
|
"assignable to type " + Long.class.getName());
|
||||||
|
}
|
||||||
|
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
|
||||||
|
logger.debug("Could not find PID for child process due to {}", e);
|
||||||
|
}
|
||||||
|
} else if (process.getClass().getName().equals("java.lang.UNIXProcess")) {
|
||||||
|
pid = getUnicesPid(process, logger);
|
||||||
} else if (process.getClass().getName().equals("java.lang.Win32Process")
|
} else if (process.getClass().getName().equals("java.lang.Win32Process")
|
||||||
|| process.getClass().getName().equals("java.lang.ProcessImpl")) {
|
|| process.getClass().getName().equals("java.lang.ProcessImpl")) {
|
||||||
return getWindowsProcessId(process, logger);
|
pid = getWindowsProcessId(process, logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -303,9 +303,12 @@ run() {
|
||||||
BOOTSTRAP_PID_PARAMS="-Dorg.apache.nifi.bootstrap.config.pid.dir='${NIFI_PID_DIR}'"
|
BOOTSTRAP_PID_PARAMS="-Dorg.apache.nifi.bootstrap.config.pid.dir='${NIFI_PID_DIR}'"
|
||||||
BOOTSTRAP_CONF_PARAMS="-Dorg.apache.nifi.bootstrap.config.file='${BOOTSTRAP_CONF}'"
|
BOOTSTRAP_CONF_PARAMS="-Dorg.apache.nifi.bootstrap.config.file='${BOOTSTRAP_CONF}'"
|
||||||
|
|
||||||
|
# uncomment to allow debugging of the bootstrap process
|
||||||
|
#BOOTSTRAP_DEBUG_PARAMS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000"
|
||||||
|
|
||||||
BOOTSTRAP_DIR_PARAMS="${BOOTSTRAP_LOG_PARAMS} ${BOOTSTRAP_PID_PARAMS} ${BOOTSTRAP_CONF_PARAMS}"
|
BOOTSTRAP_DIR_PARAMS="${BOOTSTRAP_LOG_PARAMS} ${BOOTSTRAP_PID_PARAMS} ${BOOTSTRAP_CONF_PARAMS}"
|
||||||
|
|
||||||
run_nifi_cmd="'${JAVA}' -cp '${BOOTSTRAP_CLASSPATH}' -Xms12m -Xmx24m ${BOOTSTRAP_DIR_PARAMS} org.apache.nifi.bootstrap.RunNiFi $@"
|
run_nifi_cmd="'${JAVA}' -cp '${BOOTSTRAP_CLASSPATH}' -Xms12m -Xmx24m ${BOOTSTRAP_DIR_PARAMS} ${BOOTSTRAP_DEBUG_PARAMS} org.apache.nifi.bootstrap.RunNiFi $@"
|
||||||
|
|
||||||
if [ -n "${run_as_user}" ]; then
|
if [ -n "${run_as_user}" ]; then
|
||||||
# Provide SCRIPT_DIR and execute nifi-env for the run.as user command
|
# Provide SCRIPT_DIR and execute nifi-env for the run.as user command
|
||||||
|
|
Loading…
Reference in New Issue