Module java.management

Class 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"。然后工厂将尝试找到适当的JMXConnectorProvider用于protocol。在protocol中的每个+-字符都分别替换为._

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

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

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

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

pkg.protocol.ClientProvider

如果newJMXConnectorenvironment参数包含键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,其中包含environment参数中的所有条目,如果有的话。此外,如果environment参数中不存在jmx.remote.protocol.provider.class.loader键,则将其添加到新的只读Map中。关联的值是调用线程的上下文类加载器。

自版本:
1.5
  • Field Details

    • 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的实例。

      参见:
  • Method Details

    • connect

      public static JMXConnector connect(JMXServiceURL serviceURL) throws IOException

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

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

      参数:
      serviceURL - 要连接的连接器服务器的地址。
      返回:
      调用了connect方法的JMXConnector
      抛出:
      NullPointerException - 如果serviceURL为null。
      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 - 一组属性,用于确定如何进行连接。此参数可以为null。此映射中的键必须为字符串。每个关联值的适当类型取决于属性。此调用不会更改environment的内容。
      返回:
      代表新建立连接的JMXConnector。每次成功调用此方法都会产生一个不同的对象。
      抛出:
      NullPointerException - 如果serviceURL为null。
      IOException - 如果由于通信问题无法创建连接器客户端或连接。
      SecurityException - 如果由于安全原因无法创建连接。
    • newJMXConnector

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

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

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