Module  java.management

Class JMXConnectorFactory



  • public class JMXConnectorFactory
    extends Object

    工厂创建JMX API连接器客户端。 没有这个类的实例。

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

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

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

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

    提供程序包列表是一个字符串,被解释为用垂直条( | )分隔的非空Java包名称的列表。 如果字符串为空,那么提供程序包列表也是如此。 如果提供程序包列表不是字符串,或者包含一个空字符串的元素,则抛出JMXProviderException

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

    pkg.protocol.ClientProvider

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

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

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

    否则,发现与供应商的一个问题是由信号JMXProviderException ,其cause表示底层异常,如下所示:

    • 如果加载类的尝试产生除了ClassNotFoundException之外的异常,那就是原因 ;
    • 如果Class.newInstance()为该类产生异常,那就是原因

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

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

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

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

    从以下版本开始:
    1.5
    • 字段详细信息

      • DEFAULT_CLASS_LOADER

        public static final String DEFAULT_CLASS_LOADER

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

        另请参见:
        Constant Field Values
      • PROTOCOL_PROVIDER_PACKAGES

        public static final String PROTOCOL_PROVIDER_PACKAGES

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

        另请参见:
        Constant Field Values
      • PROTOCOL_PROVIDER_CLASS_LOADER

        public static final String PROTOCOL_PROVIDER_CLASS_LOADER

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

        另请参见:
        Constant Field Values
    • 方法详细信息

      • 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为空。
        IOException - 如果连接器客户端或连接由于通信问题而无法进行。
        SecurityException - 如果连接不能出于安全考虑,
      • newJMXConnector

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

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

        参数
        serviceURL - 要连接的连接器服务器的地址。
        environment - 一组用于确定连接的属性。 此参数可以为null。 此地图中的键必须是字符串。 每个关联值的适当类型取决于属性。 environment的内容不会被此呼叫更改。
        结果
        一个代表新连接器客户端的JMXConnector 每次成功调用此方法都会产生不同的对象。
        异常
        NullPointerException - 如果 serviceURL为空。
        IOException - 如果由于通信问题导致连接器客户端无法创建。
        MalformedURLException -如果没有供应商在协议 serviceURL
        JMXProviderException -如果在协议供应商 serviceURL ,但它不能用于某些原因。