|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
package jdk.management.jfr.internal; |
|
|
|
import java.util.Collections; |
|
import java.util.List; |
|
import java.util.Map; |
|
import java.util.Set; |
|
import java.util.concurrent.Callable; |
|
|
|
import jdk.jfr.internal.management.ManagementSupport; |
|
import jdk.management.jfr.FlightRecorderMXBean; |
|
import jdk.management.jfr.SettingDescriptorInfo; |
|
// XXX TODO |
|
//import sun.management.spi.PlatformMBeanProvider; |
|
|
|
public final class FlightRecorderMXBeanProvider /*extends PlatformMBeanProvider */{ |
|
|
|
private final static class SingleMBeanComponent |
|
{ |
|
private final String objectName; |
|
private final Class<FlightRecorderMXBean> mbeanInterface; |
|
|
|
public SingleMBeanComponent(String objectName, |
|
Class<FlightRecorderMXBean> mbeanInterface) { |
|
this.objectName = objectName; |
|
this.mbeanInterface = mbeanInterface; |
|
} |
|
|
|
// @Override |
|
// public Set<String> mbeanInterfaceNames() { |
|
// return Collections.singleton(mbeanInterface.getName()); |
|
// } |
|
// |
|
// @Override |
|
// public Map<String, FlightRecorderMXBean> nameToMBeanMap() { |
|
// FlightRecorderMXBean bean = getFlightRecorderMXBean(); |
|
// if (bean != null) { |
|
// return Collections.singletonMap(objectName, bean); |
|
// } else { |
|
// return Collections.emptyMap(); |
|
// } |
|
// } |
|
// |
|
// @Override |
|
// public String getObjectNamePattern() { |
|
// return objectName; |
|
// } |
|
// |
|
// @Override |
|
// public Set<Class<? extends FlightRecorderMXBean>> mbeanInterfaces() { |
|
// return Collections.singleton(mbeanInterface); |
|
// } |
|
} |
|
|
|
private static Callable<FlightRecorderMXBean> flightRecorderMXBeanFactory; |
|
|
|
private static volatile FlightRecorderMXBean flightRecorderMXBean; |
|
|
|
public static FlightRecorderMXBean getFlightRecorderMXBean() { |
|
FlightRecorderMXBean bean = flightRecorderMXBean; |
|
if (bean == null) { |
|
SettingDescriptorInfo.from(null); |
|
synchronized (flightRecorderMXBeanFactory) { |
|
bean = flightRecorderMXBean; |
|
if (bean != null) { |
|
return bean; |
|
} |
|
try { |
|
bean = flightRecorderMXBean = flightRecorderMXBeanFactory.call(); |
|
} catch (Exception e) { |
|
ManagementSupport.logError("Could not create Flight Recorder " |
|
+ "instance for MBeanServer. " + e.getMessage()); |
|
} |
|
} |
|
} |
|
return bean; |
|
} |
|
|
|
public static void setFlightRecorderMXBeanFactory(Callable<FlightRecorderMXBean> factory) { |
|
flightRecorderMXBeanFactory = factory; |
|
} |
|
|
|
// @Override |
|
// public List<PlatformComponent<?>> getPlatformComponentList() { |
|
// String objectName = FlightRecorderMXBean.MXBEAN_NAME; |
|
// Class<FlightRecorderMXBean> mbeanInterface = FlightRecorderMXBean.class; |
|
// return Collections.singletonList(new SingleMBeanComponent(objectName, mbeanInterface)); |
|
// } |
|
} |