Module java.management
Package javax.management

Class MBeanServerFactory

java.lang.Object
javax.management.MBeanServerFactory

public class MBeanServerFactory extends Object

提供MBean服务器引用。此类没有实例。

自JMX 1.2起,此类使得可以替换默认的MBeanServer实现。这是通过使用MBeanServerBuilder类完成的。要实例化的初始MBeanServerBuilder类可以通过javax.management.builder.initial系统属性指定。指定的类必须是MBeanServerBuilder的公共子类,并且必须有一个公共的空构造函数。

默认情况下,如果未指定该属性的值,则会创建一个javax.management.MBeanServerBuilder的实例。否则,MBeanServerFactory会尝试使用Thread.currentThread().getContextClassLoader()加载指定的类,或者如果为空,则使用Class.forName()。然后使用Class.newInstance()创建该类的初始实例。如果在此过程中引发任何已检查的异常(例如ClassNotFoundExceptionInstantiationException),则MBeanServerFactory将在RuntimeException中传播此异常。

每次需要创建新的MBeanServer时,都会查阅javax.management.builder.initial系统属性,并加载该属性指向的类。如果该类与当前MBeanServerBuilder的类不同,则会创建一个新的MBeanServerBuilder。否则,MBeanServerFactory可能会创建一个新的MBeanServerBuilder或重用当前的MBeanServerBuilder。

如果无法加载属性指向的类,或者该类不对应于MBeanServerBuilder的有效子类,则会传播异常,并且在将javax.management.builder.initial系统属性重置为有效值之前,将无法创建任何MBeanServer。

MBeanServerBuilder使得可以包装默认MBeanServerBuilder实现返回的MBeanServers,例如添加额外的安全层。

自:
1.5
  • Method Details

    • releaseMBeanServer

      public static void releaseMBeanServer(MBeanServer mbeanServer)
      删除对已创建的MBeanServer的内部MBeanServerFactory引用。这允许垃圾收集器删除MBeanServer对象。
      参数:
      mbeanServer - 要移除的MBeanServer对象。
      抛出:
      IllegalArgumentException - 如果mbeanServer不是由createMBeanServer方法之一生成的,或者已对其调用了releaseMBeanServer
      SecurityException - 如果存在SecurityManager并且调用者的权限不包括或暗示MBeanServerPermission("releaseMBeanServer")
    • createMBeanServer

      public static MBeanServer createMBeanServer()

      返回一个实现MBeanServer接口的新对象,具有标准默认域名。当用户指定的域为null时,标准默认域名用作MBeans的ObjectName中的域部分。

      标准默认域名为DefaultDomain

      MBeanServer引用被内部保留。这将允许findMBeanServer返回对此MBeanServer对象的引用。

      此方法等效于createMBeanServer(null)

      返回:
      新创建的MBeanServer。
      抛出:
      SecurityException - 如果存在SecurityManager并且调用者的权限不包括或暗示MBeanServerPermission("createMBeanServer")
      JMRuntimeException - 如果存在属性javax.management.builder.initial,但它指定的类无法通过公共无参数构造函数实例化;或者如果实例化的构建器从其newMBeanServerDelegatenewMBeanServer方法返回null。
      ClassCastException - 如果存在属性javax.management.builder.initial并且可以实例化但与MBeanServerBuilder不兼容。
    • createMBeanServer

      public static MBeanServer createMBeanServer(String domain)

      返回一个实现MBeanServer接口的新对象,具有指定的默认域名。当用户指定的域为null时,给定的域名用作MBeans的ObjectName中的域部分。

      MBeanServer引用被内部保留。这将允许findMBeanServer返回对此MBeanServer对象的引用。

      参数:
      domain - 创建的MBeanServer的默认域名。这是将由MBeanServer.getDefaultDomain()返回的值。
      返回:
      新创建的MBeanServer。
      抛出:
      SecurityException - 如果存在SecurityManager并且调用者的权限不包括或暗示MBeanServerPermission("createMBeanServer")
      JMRuntimeException - 如果存在属性javax.management.builder.initial,但它指定的类无法通过公共无参数构造函数实例化;或者如果实例化的构建器从其newMBeanServerDelegatenewMBeanServer方法返回null。
      ClassCastException - 如果存在属性javax.management.builder.initial并且可以实例化但与MBeanServerBuilder不兼容。
    • newMBeanServer

      public static MBeanServer newMBeanServer()

      返回一个实现MBeanServer接口的新对象,具有标准默认域名,而不保留对此新对象的内部引用。当用户指定的域为null时,标准默认域名用作MBeans的ObjectName中的域部分。

      标准默认域名为DefaultDomain

      不保留引用。 findMBeanServer将无法返回对此MBeanServer对象的引用,但是当不再引用MBeanServer对象时,垃圾收集器将能够删除该对象。

      此方法等效于newMBeanServer(null)

      返回:
      新创建的MBeanServer。
      抛出:
      SecurityException - 如果存在SecurityManager并且调用者的权限不包括或暗示MBeanServerPermission("newMBeanServer")
      JMRuntimeException - 如果存在属性javax.management.builder.initial,但它指定的类无法通过公共无参数构造函数实例化;或者如果实例化的构建器从其newMBeanServerDelegatenewMBeanServer方法返回null。
      ClassCastException - 如果存在属性javax.management.builder.initial并且可以实例化但与MBeanServerBuilder不兼容。
    • newMBeanServer

      public static MBeanServer newMBeanServer(String domain)

      返回一个实现MBeanServer接口的新对象,具有指定的默认域名,而不保留对此新对象的内部引用。当用户指定的域为null时,给定的域名用作MBeans的ObjectName中的域部分。

      不保留引用。 findMBeanServer将无法返回对此MBeanServer对象的引用,但是当不再引用MBeanServer对象时,垃圾收集器将能够删除该对象。

      参数:
      domain - 创建的MBeanServer的默认域名。这个值将被 MBeanServer.getDefaultDomain() 返回。
      返回:
      新创建的MBeanServer。
      抛出:
      SecurityException - 如果存在SecurityManager并且调用者的权限不包括或暗示 MBeanServerPermission("newMBeanServer")
      JMRuntimeException - 如果属性 javax.management.builder.initial 存在,但它命名的类不能通过公共无参数构造函数实例化;或者如果实例化的构建器从其 newMBeanServerDelegatenewMBeanServer 方法返回null。
      ClassCastException - 如果属性 javax.management.builder.initial 存在并且可以实例化,但与 MBeanServerBuilder 不兼容。
    • findMBeanServer

      public static ArrayList<MBeanServer> findMBeanServer(String agentId)

      返回已注册的MBeanServer对象列表。已注册的MBeanServer对象是由 createMBeanServer 方法之一创建的,并且没有随后使用 releaseMBeanServer 释放的对象。

      参数:
      agentId - 要检索的MBeanServer的代理标识符。如果此参数为null,则返回此JVM中所有已注册的MBeanServers。否则,仅返回id等于 agentId 的MBeanServers。MBeanServer的id是其代理MBean的 MBeanServerId 属性。
      返回:
      MBeanServer对象列表。
      抛出:
      SecurityException - 如果存在SecurityManager并且调用者的权限不包括或暗示 MBeanServerPermission("findMBeanServer")
    • getClassLoaderRepository

      public static ClassLoaderRepository getClassLoaderRepository(MBeanServer server)
      返回给定MBeanServer使用的ClassLoaderRepository。此方法等效于 server.getClassLoaderRepository()
      参数:
      server - 要检查的MBeanServer。自JMX 1.2以来,如果 servernull,则结果是 NullPointerException。此行为与JMX 1.1 中实现的不同 - 在那里,使用 null 的可能性已被弃用。
      返回:
      给定MBeanServer使用的ClassLoaderRepository。
      抛出:
      SecurityException - 如果存在SecurityManager并且调用者的权限不包括或暗示 MBeanPermission("getClassLoaderRepository")
      NullPointerException - 如果 server 为null。