/** * Returns the platform {@link javax.management.MBeanServer MBeanServer}. On the first call to * this method, it first creates the platform <tt>MBeanServer</tt> by calling the {@link * javax.management.MBeanServerFactory#createMBeanServer MBeanServerFactory.createMBeanServer} * method and registers the platform MXBeans in this platform <tt>MBeanServer</tt> using the <a * href="#MXBeanNames">MXBean names</a> defined in the class description. This method, in * subsequent calls, will simply return the initially created platform <tt>MBeanServer</tt>. * * <p>MXBeans that get created and destroyed dynamically, for example, memory {@link * MemoryPoolMXBean pools} and {@link MemoryManagerMXBean managers}, will automatically be * registered and deregistered into the platform <tt>MBeanServer</tt>. * * <p>If the system property <tt>javax.management.builder.initial</tt> is set, the platform * <tt>MBeanServer</tt> creation will be done by the specified {@link * javax.management.MBeanServerBuilder}. * * <p>It is recommended that this platform MBeanServer also be used to register other application * managed beans besides the platform MXBeans. This will allow all MBeans to be published through * the same <tt>MBeanServer</tt> and hence allow for easier network publishing and discovery. Name * conflicts with the platform MXBeans should be avoided. * * @return the platform <tt>MBeanServer</tt>; the platform MXBeans are registered into the * platform <tt>MBeanServer</tt> at the first time this method is called. * @exception SecurityException if there is a security manager and the caller does not have the * permission required by {@link javax.management.MBeanServerFactory#createMBeanServer}. * @see javax.management.MBeanServerFactory * @see javax.management.MBeanServerFactory#createMBeanServer */ public static synchronized MBeanServer getPlatformMBeanServer() { SecurityManager sm = System.getSecurityManager(); if (sm != null) { Permission perm = new MBeanServerPermission("createMBeanServer"); sm.checkPermission(perm); } if (platformMBeanServer == null) { platformMBeanServer = MBeanServerFactory.createMBeanServer(); for (PlatformComponent pc : PlatformComponent.values()) { List<? extends PlatformManagedObject> list = pc.getMXBeans(pc.getMXBeanInterface()); for (PlatformManagedObject o : list) { // Each PlatformComponent represents one management // interface. Some MXBean may extend another one. // The MXBean instances for one platform component // (returned by pc.getMXBeans()) might be also // the MXBean instances for another platform component. // e.g. com.sun.management.GarbageCollectorMXBean // // So need to check if an MXBean instance is registered // before registering into the platform MBeanServer if (!platformMBeanServer.isRegistered(o.getObjectName())) { addMXBean(platformMBeanServer, o); } } } } return platformMBeanServer; }
/** * Returns the set of {@code Class} objects, subinterface of {@link PlatformManagedObject}, * representing all management interfaces for monitoring and managing the Java platform. * * @return the set of {@code Class} objects, subinterface of {@link PlatformManagedObject} * representing the management interfaces for monitoring and managing the Java platform. * @since 1.7 */ public static Set<Class<? extends PlatformManagedObject>> getPlatformManagementInterfaces() { Set<Class<? extends PlatformManagedObject>> result = new TreeSet<>(); for (PlatformComponent component : PlatformComponent.values()) { result.add(component.getMXBeanInterface()); } return Collections.unmodifiableSet(result); }
/** * Returns a list of {@code Class} objects, subinterface of {@link PlatformManagedObject}, * representing all management interfaces for monitoring and managing the Java platform. * * @return a list of {@code Class} objects, subinterface of {@link PlatformManagedObject} * representing the management interfaces for monitoring and managing the Java platform. * @since 1.7 */ public static List<Class<? extends PlatformManagedObject>> getAllPlatformMXBeanInterfaces() { List<Class<? extends PlatformManagedObject>> result = new ArrayList<Class<? extends PlatformManagedObject>>(); for (PlatformComponent component : PlatformComponent.values()) { result.add(component.getMXBeanInterface()); } return result; }
/** * Returns the list of the platform MXBean proxies for forwarding the method calls of the {@code * mxbeanInterface} through the given {@code MBeanServerConnection}. The returned list may contain * zero, one, or more instances. The number of instances in the returned list is defined in the * specification of the given management interface. * * @param connection the {@code MBeanServerConnection} to forward to. * @param mxbeanInterface a management interface for a platform MXBean * @return the list of platform MXBean proxies for forwarding the method calls of the {@code * mxbeanInterface} through the given {@code MBeanServerConnection}. * @throws IllegalArgumentException if {@code mxbeanInterface} is not a management interface for * the platform. * @throws java.io.IOException if a communication problem occurred when accessing the {@code * MBeanServerConnection}. * @since 1.7 */ public static <T extends PlatformManagedObject> List<T> getPlatformMXBeans( MBeanServerConnection connection, Class<T> mxbeanInterface) throws java.io.IOException { String className = mxbeanInterface.getName(); for (PlatformComponent component : PlatformComponent.values()) { // comparing the class name first instead of the Class instance // to avoid causing unnecessary class loading of // the other MXBean interfaces if (className.equals(component.getMXBeanInterfaceName())) { if (component.getMXBeanInterface() == mxbeanInterface) { return component.getMXBeans(connection, mxbeanInterface); } } } throw new IllegalArgumentException( mxbeanInterface.getName() + " is not implemented by any of the platform MXBeans."); }