类 JMXConnectorServerFactory

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

public class JMXConnectorServerFactory extends Object

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

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

搜索到一个provider package list如下:

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

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

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

pkg.protocol.ServerProvider

如果 newJMXConnectorServer 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 如果没有。一个实现可以选择通过其他方式寻找提供者。例如,它可能支持 服务供应商 ,其中服务接口是 JMXConnectorServerProvider

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

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

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

自从:
1.5
  • 字段详细信息

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

      参见:
  • 方法详情

    • newJMXConnectorServer

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

      在给定地址创建连接器服务。生成的服务直到它的 start 方法被调用时才会启动。

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