| package org.junit.internal.management; |
| |
| import org.junit.internal.Classes; |
| |
| import java.lang.reflect.InvocationTargetException; |
| |
| /** |
| * Reflective wrapper around {@link java.lang.management.ManagementFactory} |
| */ |
| public class ManagementFactory { |
| private static final class FactoryHolder { |
| private static final Class<?> MANAGEMENT_FACTORY_CLASS; |
| |
| static { |
| Class<?> managementFactoryClass = null; |
| try { |
| managementFactoryClass = Classes.getClass("java.lang.management.ManagementFactory"); |
| } catch (ClassNotFoundException e) { |
| // do nothing, managementFactoryClass will be none on failure |
| } |
| MANAGEMENT_FACTORY_CLASS = managementFactoryClass; |
| } |
| |
| static Object getBeanObject(String methodName) { |
| if (MANAGEMENT_FACTORY_CLASS != null) { |
| try { |
| return MANAGEMENT_FACTORY_CLASS.getMethod(methodName).invoke(null); |
| } catch (IllegalAccessException e) { |
| // fallthrough |
| } catch (IllegalArgumentException e) { |
| // fallthrough |
| } catch (InvocationTargetException e) { |
| // fallthrough |
| } catch (NoSuchMethodException e) { |
| // fallthrough |
| } catch (SecurityException e) { |
| // fallthrough |
| } |
| } |
| return null; |
| } |
| } |
| |
| private static final class RuntimeHolder { |
| private static final RuntimeMXBean RUNTIME_MX_BEAN = |
| getBean(FactoryHolder.getBeanObject("getRuntimeMXBean")); |
| |
| private static final RuntimeMXBean getBean(Object runtimeMxBean) { |
| return runtimeMxBean != null |
| ? new ReflectiveRuntimeMXBean(runtimeMxBean) : new FakeRuntimeMXBean(); |
| } |
| } |
| |
| private static final class ThreadHolder { |
| private static final ThreadMXBean THREAD_MX_BEAN = |
| getBean(FactoryHolder.getBeanObject("getThreadMXBean")); |
| |
| private static final ThreadMXBean getBean(Object threadMxBean) { |
| return threadMxBean != null |
| ? new ReflectiveThreadMXBean(threadMxBean) : new FakeThreadMXBean(); |
| } |
| } |
| |
| /** |
| * @see java.lang.management.ManagementFactory#getRuntimeMXBean() |
| */ |
| public static RuntimeMXBean getRuntimeMXBean() { |
| return RuntimeHolder.RUNTIME_MX_BEAN; |
| } |
| |
| /** |
| * @see java.lang.management.ManagementFactory#getThreadMXBean() |
| */ |
| public static ThreadMXBean getThreadMXBean() { |
| return ThreadHolder.THREAD_MX_BEAN; |
| } |
| } |