类 JMXConnectorFactory

java.lang.Object
javax.management.remote.JMXConnectorFactory

public class JMXConnectorFactory extends Object

用于创建 JMX API 连接器客户端的工厂。没有此类的实例。

通常使用此类的 connect 方法进行连接。更高级的应用程序可以使用 newJMXConnector 分离连接器客户端的创建和使用 JMXConnector.connect(Map) 建立连接本身。

每个客户端都由 JMXConnectorProvider 的实例创建。这个实例是这样找到的。假设给定的 JMXServiceURL 看起来像 "service:jmx:protocol:remainder" 。然后工厂将尝试为 protocol 找到合适的 JMXConnectorProvider protocol 中出现的字符 +- 分别被替换为 ._

搜索到一个provider package list如下:

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

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

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

pkg.protocol.ClientProvider

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

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

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

否则,找到的提供程序的问题由 JMXProviderException 发出信号,其 cause 指示底层异常,如下所示:

  • 如果加载类的尝试产生 ClassNotFoundException 以外的异常,即 cause
  • 如果类的 Class.newInstance() 产生异常,即 cause

如果通过上述步骤没有找到提供者,包括没有提供者包列表的默认情况,那么实现将使用它自己的提供者为 protocol ,否则它会抛出一个 MalformedURLException 如果没有。一个实现可以选择通过其他方式寻找提供者。例如,它可能支持 服务供应商 ,其中服务接口是 JMXConnectorProvider

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

一旦找到提供者,newJMXConnector 方法的结果就是在提供者上调用 newJMXConnector 的结果。

传递给 JMXConnectorProviderMap 参数是一个新的只读 Map,它包含 JMXConnectorFactory.newJMXConnector environment 参数中的所有条目(如果有的话)。此外,如果 jmx.remote.protocol.provider.class.loader 密钥不存在于 environment 参数中,它将被添加到新的只读 Map 中。关联值是调用线程的上下文类加载器。

自从:
1.5
  • 字段详细信息

    • DEFAULT_CLASS_LOADER

      public static final String  DEFAULT_CLASS_LOADER

      指定默认类加载器的属性的名称。此类加载器用于反序列化远程 MBeanServerConnection 调用的返回值和异常。与此属性关联的值是 ClassLoader 的一个实例。

      参见:
    • PROTOCOL_PROVIDER_PACKAGES

      public static final String  PROTOCOL_PROVIDER_PACKAGES

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

      参见:
    • PROTOCOL_PROVIDER_CLASS_LOADER

      public static final String  PROTOCOL_PROVIDER_CLASS_LOADER

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

      参见:
  • 方法详情

    • connect

      public static JMXConnector  connect(JMXServiceURL  serviceURL) throws IOException

      在给定地址创建到连接器服务的连接。

      此方法等效于 connect(serviceURL, null)

      参数:
      serviceURL - 要连接的连接器服务的地址。
      返回:
      JMXConnectorconnect 方法已被调用。
      抛出:
      NullPointerException - 如果 serviceURL 为空。
      IOException - 如果由于通信问题无法建立连接器客户端或连接。
      SecurityException - 如果出于安全原因无法建立连接。
    • connect

      public static JMXConnector  connect(JMXServiceURL  serviceURL, Map <String ,?> environment) throws IOException

      在给定地址创建到连接器服务的连接。

      此方法等效于:

       JMXConnector conn = JMXConnectorFactory.newJMXConnector(serviceURL,
                                   environment);
       conn.connect(environment);
       
      参数:
      serviceURL - 要连接的连接器服务的地址。
      environment - 一组属性,用于确定如何建立连接。此参数可以为空。此map中的键必须是字符串。每个关联值的适当类型取决于属性。此调用未更改 environment 的内容。
      返回:
      JMXConnector 代表新建立的连接。每次成功调用此方法都会生成一个不同的对象。
      抛出:
      NullPointerException - 如果 serviceURL 为空。
      IOException - 如果由于通信问题无法建立连接器客户端或连接。
      SecurityException - 如果出于安全原因无法建立连接。
    • newJMXConnector

      public static JMXConnector  newJMXConnector(JMXServiceURL  serviceURL, Map <String ,?> environment) throws IOException

      在给定地址为连接器服务创建连接器客户端。生成的客户端在其 connect 方法被调用之前不会连接。

      参数:
      serviceURL - 要连接的连接器服务的地址。
      environment - 一组属性,用于确定如何建立连接。此参数可以为空。此map中的键必须是字符串。每个关联值的适当类型取决于属性。此调用未更改 environment 的内容。
      返回:
      JMXConnector 表示新的连接器客户端。每次成功调用此方法都会生成一个不同的对象。
      抛出:
      NullPointerException - 如果 serviceURL 为空。
      IOException - 如果由于通信问题而无法创建连接器客户端。
      MalformedURLException - 如果 serviceURL 中没有协议提供者。
      JMXProviderException - 如果 serviceURL 中有该协议的提供程序但由于某种原因无法使用。