--- old/src/share/classes/sun/management/ExtendedPlatformComponent.java 2019-02-08 18:32:18.538777363 +0300 +++ new/src/share/classes/sun/management/ExtendedPlatformComponent.java 2019-02-08 18:32:18.438780865 +0300 @@ -25,9 +25,12 @@ package sun.management; +import java.lang.reflect.InvocationTargetException; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.lang.management.PlatformManagedObject; +import java.lang.reflect.Method; /** * Class to allow for an extended set of platform MXBeans @@ -40,7 +43,12 @@ * platform MBeanServer, or an empty list if there are no such MXBeans. */ public static List getMXBeans() { - return Collections.emptyList(); + PlatformManagedObject o = getFlightRecorderBean(); + if (o != null) { + return Collections.singletonList(o); + } else { + return Collections.emptyList(); + } } /** @@ -49,6 +57,23 @@ */ public static T getMXBean(Class mxbeanInterface) { + + if ("jdk.management.jfr.FlightRecorderMXBean".equals(mxbeanInterface.getName())) { + return (T)getFlightRecorderBean(); + } return null; } + + private static PlatformManagedObject getFlightRecorderBean() { + PlatformManagedObject object = null; + try { + Class provider = Class.forName("jdk.management.jfr.internal.FlightRecorderMXBeanProvider"); + Method m = provider.getDeclaredMethod("getFlightRecorderMXBean"); + + object = (PlatformManagedObject)m.invoke(null); + } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + // no jfr? + } + return object; + } }