8183123: JDP packets have no processId context set
authorclanger
Mon, 17 Jul 2017 15:46:34 +0200
changeset 45890 cabbc1289586
parent 45889 605589f46d2a
child 45891 55e3ff5a7b08
child 47157 17c74e7bd6aa
8183123: JDP packets have no processId context set Reviewed-by: dcubed, clanger Contributed-by: andrew_m_leonard@uk.ibm.com
jdk/src/jdk.management.agent/share/classes/sun/management/jdp/JdpController.java
jdk/test/sun/management/jdp/JdpOnTestCase.java
--- a/jdk/src/jdk.management.agent/share/classes/sun/management/jdp/JdpController.java	Mon Jul 17 11:47:12 2017 +0200
+++ b/jdk/src/jdk.management.agent/share/classes/sun/management/jdp/JdpController.java	Mon Jul 17 15:46:34 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,6 +33,7 @@
 import java.lang.management.RuntimeMXBean;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.lang.UnsupportedOperationException;
 import sun.management.VMManagement;
 
 /**
@@ -132,19 +133,11 @@
     }
 
     // Get the process id of the current running Java process
-    private static Integer getProcessId() {
+    private static Long getProcessId() {
         try {
-            // Get the current process id using a reflection hack
-            RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
-            Field jvm = runtime.getClass().getDeclaredField("jvm");
-            jvm.setAccessible(true);
-
-            VMManagement mgmt = (sun.management.VMManagement) jvm.get(runtime);
-            Method pid_method = mgmt.getClass().getDeclaredMethod("getProcessId");
-            pid_method.setAccessible(true);
-            Integer pid = (Integer) pid_method.invoke(mgmt);
-            return pid;
-        } catch(Exception ex) {
+            // Get the current process id
+            return ProcessHandle.current().pid();
+        } catch(UnsupportedOperationException ex) {
             return null;
         }
     }
@@ -206,7 +199,7 @@
         packet.setBroadcastInterval(Integer.toString(pause));
 
         // Set process id
-        Integer pid = getProcessId();
+        Long pid = getProcessId();
         if (pid != null) {
            packet.setProcessId(pid.toString());
         }
--- a/jdk/test/sun/management/jdp/JdpOnTestCase.java	Mon Jul 17 11:47:12 2017 +0200
+++ b/jdk/test/sun/management/jdp/JdpOnTestCase.java	Mon Jul 17 15:46:34 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,6 +31,7 @@
 
 import java.net.SocketTimeoutException;
 import java.util.Map;
+import static jdk.testlibrary.Asserts.assertNotEquals;
 
 public class JdpOnTestCase extends JdpTestCase {
 
@@ -58,6 +59,7 @@
         final String jdpName = payload.get("INSTANCE_NAME");
         log.fine("Received correct JDP packet #" + String.valueOf(receivedJDPpackets) +
                 ", jdp.name=" + jdpName);
+        assertNotEquals(null, payload.get("PROCESS_ID"), "Expected payload.get(\"PROCESS_ID\") to be not null.");
     }
 
     /**