Module java.management

Class JMXConnectorServerFactory

java.lang.Object
javax.management.remote.JMXConnectorServerFactory

public class JMXConnectorServerFactory extends Object

用于创建JMX API连接器服务器的工厂。此类没有实例。

每个连接器服务器都是由JMXConnectorServerProvider的实例创建的。此实例的查找方式如下。假设给定的JMXServiceURL看起来像"service:jmx:protocol:remainder"。然后工厂将尝试为protocol找到适当的JMXConnectorServerProvider。在protocol中每次出现的字符+-将分别替换为._

提供程序包列表的搜索方式如下:

  1. 如果newJMXConnectorServerenvironment参数包含键jmx.remote.protocol.provider.pkgs,则关联的值是提供程序包列表。
  2. 否则,如果系统属性jmx.remote.protocol.provider.pkgs存在,则其值是提供程序包列表。
  3. 否则,没有提供程序包列表。

提供程序包列表是一个字符串,被解释为由竖线(|)分隔的非空Java包名称列表。如果字符串为空,则提供程序包列表也为空。如果提供程序包列表不是字符串,或者包含一个空字符串元素,则会抛出一个JMXProviderException

如果提供程序包列表存在且不为空,则对列表中的每个元素pkg,工厂将尝试加载类

pkg.protocol.ServerProvider

如果newJMXConnectorServerenvironment参数包含键jmx.remote.protocol.provider.class.loader,则关联的值是用于加载提供程序的类加载器。如果关联的值不是ClassLoader的实例,则会抛出一个IllegalArgumentException

如果在environment参数中不存在jmx.remote.protocol.provider.class.loader键,则使用调用线程的上下文类加载器。

如果尝试加载此类产生一个ClassNotFoundException,则继续搜索列表的下一个元素。

否则,找到的提供程序存在问题,会通过一个JMXProviderException来表示,其cause指示底层异常,如下:

  • 如果尝试加载类产生除ClassNotFoundException之外的异常,则该异常是cause
  • 如果类的Class.newInstance()产生异常,则该异常是cause

如果按照上述步骤找不到提供程序,包括默认情况下没有提供程序包列表的情况,则实现将使用其自己的提供程序来处理protocol,或者如果没有提供程序,则会抛出MalformedURLException。实现可以选择通过其他方式找到提供程序。例如,它可以支持服务提供程序,其中服务接口是JMXConnectorServerProvider

每个实现必须支持具有默认RMI传输的RMI连接器协议,指定为字符串rmi

一旦找到提供程序,newJMXConnectorServer方法的结果是在提供程序上调用newJMXConnectorServer的结果。

传递给JMXConnectorServerProviderMap参数是一个新的只读Map,其中包含environment参数到JMXConnectorServerFactory.newJMXConnectorServer中的所有条目,如果有的话。此外,如果environment参数中不存在jmx.remote.protocol.provider.class.loader键,则将其添加到新的只读Map中。关联的值是调用线程的上下文类加载器。

自版本:
1.5
  • Field Details

    • DEFAULT_CLASS_LOADER

      public static final String DEFAULT_CLASS_LOADER

      指定默认类加载器的属性名称。此类加载器用于反序列化从客户端接收的请求中的对象,可能在查询特定于MBean的类加载器之后。与此属性关联的值是ClassLoader的实例。

      参见:
    • DEFAULT_CLASS_LOADER_NAME

      public static final String DEFAULT_CLASS_LOADER_NAME

      指定默认类加载器MBean名称的属性名称。此类加载器用于反序列化从客户端接收的请求中的对象,可能在查询特定于MBean的类加载器之后。与此属性关联的值是ObjectName的实例。

      参见:
    • PROTOCOL_PROVIDER_PACKAGES

      public static final String PROTOCOL_PROVIDER_PACKAGES

      指定在查找协议处理程序时要查询的提供程序包的属性名称。与此属性关联的值是一个用竖线(|)分隔的包名称字符串。

      参见:
    • PROTOCOL_PROVIDER_CLASS_LOADER

      public static final String PROTOCOL_PROVIDER_CLASS_LOADER

      指定用于加载协议提供程序的类加载器的属性名称。与此属性关联的值是ClassLoader的实例。

      参见:
  • Method Details

    • newJMXConnectorServer

      public static JMXConnectorServer newJMXConnectorServer(JMXServiceURL serviceURL, Map<String,?> environment, MBeanServer mbeanServer) throws IOException

      在给定地址创建连接器服务器。生成的服务器在调用其start方法之前不会启动。

      参数:
      serviceURL - 新连接器服务器的地址。实际连接器服务器的地址,由其getAddress方法返回,不一定完全相同。例如,如果原始地址没有端口号,则可能包含端口号。
      environment - 一组属性,用于控制新连接器服务器的行为。此参数可以为null。此映射中的键必须是字符串。每个关联值的适当类型取决于属性。此调用不会更改environment的内容。
      mbeanServer - 连接器服务器附加到的MBean服务器。如果此连接器服务器将通过在其中注册来附加到MBean服务器,则为null。
      返回:
      表示新连接器服务器的JMXConnectorServer。对此方法的每次成功调用都会产生一个不同的对象。
      抛出:
      NullPointerException - 如果serviceURL为null。
      IOException - 如果由于通信问题而无法创建连接器服务器。
      MalformedURLException - 如果serviceURL中的协议没有提供程序。
      JMXProviderException - 如果serviceURL中存在协议的提供程序,但由于某种原因无法使用。