This is an automated email from the ASF dual-hosted git repository.

joewitt pushed a commit to branch support/nifi-1.15
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/support/nifi-1.15 by this push:
     new 4cfa7f7  NIFI-9375 Refactored Registry using OSUtils from 
nifi-bootstrap-utils
4cfa7f7 is described below

commit 4cfa7f7eeb768c624380b9f05271638a39fc8ad5
Author: exceptionfactory <exceptionfact...@apache.org>
AuthorDate: Fri Nov 12 16:02:09 2021 -0600

    NIFI-9375 Refactored Registry using OSUtils from nifi-bootstrap-utils
    
    Signed-off-by: Pierre Villard <pierre.villard...@gmail.com>
    
    This closes #5520.
---
 .../nifi-registry-bootstrap/pom.xml                |   6 +-
 .../nifi/registry/bootstrap/RunNiFiRegistry.java   |   4 +-
 .../nifi/registry/bootstrap/util/OSUtils.java      | 134 ---------------------
 3 files changed, 5 insertions(+), 139 deletions(-)

diff --git a/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/pom.xml 
b/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/pom.xml
index 385b4ff..d1874ed 100644
--- a/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/pom.xml
+++ b/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/pom.xml
@@ -31,9 +31,9 @@
             <artifactId>commons-lang3</artifactId>
         </dependency>
         <dependency>
-            <groupId>net.java.dev.jna</groupId>
-            <artifactId>jna-platform</artifactId>
-            <version>4.4.0</version>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-bootstrap-utils</artifactId>
+            <version>1.16.0-SNAPSHOT</version>
         </dependency>
     </dependencies>
 
diff --git 
a/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/RunNiFiRegistry.java
 
b/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/RunNiFiRegistry.java
index b73dcfc..f75edcb 100644
--- 
a/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/RunNiFiRegistry.java
+++ 
b/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/RunNiFiRegistry.java
@@ -17,7 +17,7 @@
 package org.apache.nifi.registry.bootstrap;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.nifi.registry.bootstrap.util.OSUtils;
+import org.apache.nifi.bootstrap.util.OSUtils;
 import org.apache.nifi.registry.util.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -1024,7 +1024,7 @@ public class RunNiFiRegistry {
             final Properties pidProperties = new Properties();
             pidProperties.setProperty(PID_KEY, 
String.valueOf(nifiRegistryPid));
             savePidProperties(pidProperties, cmdLogger);
-            cmdLogger.info("Launched Apache NiFi Registry with Process ID " + 
pid);
+            cmdLogger.info("Launched Apache NiFi Registry with Process ID {}", 
pid);
         }
 
         shutdownHook = new ShutdownHook(process, this, secretKey, 
gracefulShutdownSeconds, loggingExecutor);
diff --git 
a/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/util/OSUtils.java
 
b/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/util/OSUtils.java
deleted file mode 100644
index 4b70866..0000000
--- 
a/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/util/OSUtils.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.nifi.registry.bootstrap.util;
-
-import com.sun.jna.Pointer;
-import com.sun.jna.platform.win32.Kernel32;
-import com.sun.jna.platform.win32.WinNT;
-import org.slf4j.Logger;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * OS specific utilities with generic method interfaces
- */
-public final class OSUtils {
-    /**
-     * @param process NiFi Process Reference
-     * @param logger  Logger Reference for Debug
-     * @return        Returns pid or null in-case pid could not be determined
-     * This method takes {@link Process} and {@link Logger} and returns
-     * the platform specific ProcessId for Unix like systems, a.k.a <b>pid</b>
-     * In-case it fails to determine the pid, it will return Null.
-     * Purpose for the Logger is to log any interaction for debugging.
-     */
-    private static Long getUnicesPid(final Process process, final Logger 
logger) {
-        try {
-            final Class<?> procClass = process.getClass();
-            final Field pidField = procClass.getDeclaredField("pid");
-            pidField.setAccessible(true);
-            final Object pidObject = pidField.get(process);
-
-            logger.debug("PID Object = {}", pidObject);
-
-            if (pidObject instanceof Number) {
-                return ((Number) pidObject).longValue();
-            }
-            return null;
-        } catch (final IllegalAccessException | NoSuchFieldException nsfe) {
-            logger.debug("Could not find PID for child process due to {}", 
nsfe);
-            return null;
-        }
-    }
-
-    /**
-     * @param process NiFi Registry Process Reference
-     * @param logger  Logger Reference for Debug
-     * @return        Returns pid or null in-case pid could not be determined
-     * This method takes {@link Process} and {@link Logger} and returns
-     * the platform specific Handle for Win32 Systems, a.k.a <b>pid</b>
-     * In-case it fails to determine the pid, it will return Null.
-     * Purpose for the Logger is to log any interaction for debugging.
-     */
-    private static Long getWindowsProcessId(final Process process, final 
Logger logger) {
-        /* determine the pid on windows plattforms */
-        try {
-            Field f = process.getClass().getDeclaredField("handle");
-            f.setAccessible(true);
-            long handl = f.getLong(process);
-
-            Kernel32 kernel = Kernel32.INSTANCE;
-            WinNT.HANDLE handle = new WinNT.HANDLE();
-            handle.setPointer(Pointer.createConstant(handl));
-            int ret = kernel.GetProcessId(handle);
-            logger.debug("Detected pid: {}", ret);
-            return Long.valueOf(ret);
-        } catch (final IllegalAccessException | NoSuchFieldException nsfe) {
-            logger.debug("Could not find PID for child process due to {}", 
nsfe);
-        }
-        return null;
-    }
-
-    /**
-     * @param process NiFi Process Reference
-     * @param logger  Logger Reference for Debug
-     * @return        Returns pid or null in-case pid could not be determined
-     * This method takes {@link Process} and {@link Logger} and returns
-     * the platform specific ProcessId for Unix like systems or Handle for 
Win32 Systems, a.k.a <b>pid</b>
-     * In-case it fails to determine the pid, it will return Null.
-     * Purpose for the Logger is to log any interaction for debugging.
-     */
-    public static Long getProcessId(final Process process, final Logger 
logger) {
-        /*
-         * NiFi Registry 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 Registry 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")
-                || 
process.getClass().getName().equals("java.lang.ProcessImpl")) {
-            pid = getWindowsProcessId(process, logger);
-        }
-
-        return pid;
-    }
-
-}

Reply via email to