src/share/classes/sun/management/ManagementFactoryHelper.java

Print this page

        

@@ -41,10 +41,11 @@
 import sun.util.logging.LoggingSupport;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import com.sun.management.DiagnosticCommandMBean;
 import com.sun.management.OSMBeanFactory;
 import com.sun.management.HotSpotDiagnosticMXBean;
 
 import static java.lang.management.ManagementFactory.*;
 

@@ -261,10 +262,11 @@
     private static HotspotRuntime hsRuntimeMBean = null;
     private static HotspotClassLoading hsClassMBean = null;
     private static HotspotThread hsThreadMBean = null;
     private static HotspotCompilation hsCompileMBean = null;
     private static HotspotMemory hsMemoryMBean = null;
+    private static DiagnosticCommandImpl hsDiagCommandMBean = null;
 
     public static synchronized HotSpotDiagnosticMXBean getDiagnosticMXBean() {
         if (hsDiagMBean == null) {
             hsDiagMBean = new HotSpotDiagnostic();
         }

@@ -309,10 +311,18 @@
             hsMemoryMBean = new HotspotMemory(jvm);
         }
         return hsMemoryMBean;
     }
 
+    public static synchronized DiagnosticCommandMBean getDiagnosticCommandMBean() {
+        // Remote Diagnostic Commands may not be supported
+        if (hsDiagCommandMBean == null && jvm.isRemoteDiagnosticCommandsSupported()) {
+            hsDiagCommandMBean = new DiagnosticCommandImpl(jvm);
+        }
+        return hsDiagCommandMBean;
+    }
+
     /**
      * This method is for testing only.
      */
     public static synchronized HotspotCompilationMBean getHotspotCompilationMBean() {
         if (hsCompileMBean == null) {

@@ -363,10 +373,18 @@
         "sun.management:type=HotspotRuntime";
 
     private final static String HOTSPOT_THREAD_MBEAN_NAME =
         "sun.management:type=HotspotThreading";
 
+    public static List<PlatformManagedObject> getPlatformDynamicMBeans() {
+        List<PlatformManagedObject> list = new ArrayList<>();
+        if(getDiagnosticCommandMBean() != null) {
+            list.add(getDiagnosticCommandMBean());
+        }
+        return list;
+    }
+
     static void registerInternalMBeans(MBeanServer mbs) {
         // register all internal MBeans if not registered
         // No exception is thrown if a MBean with that object name
         // already registered
         addMBean(mbs, getHotspotClassLoadingMBean(),