用于创建JMX API连接器服务器的工厂。此类没有实例。
每个连接器服务器都是由JMXConnectorServerProvider
的实例创建的。此实例的查找方式如下。假设给定的JMXServiceURL
看起来像"service:jmx:protocol:remainder"
。然后工厂将尝试为protocol
找到适当的JMXConnectorServerProvider
。在protocol
中每次出现的字符+
或-
将分别替换为.
或_
。
提供程序包列表的搜索方式如下:
- 如果
newJMXConnectorServer
的environment
参数包含键jmx.remote.protocol.provider.pkgs
,则关联的值是提供程序包列表。 - 否则,如果系统属性
jmx.remote.protocol.provider.pkgs
存在,则其值是提供程序包列表。 - 否则,没有提供程序包列表。
提供程序包列表是一个字符串,被解释为由竖线(|
)分隔的非空Java包名称列表。如果字符串为空,则提供程序包列表也为空。如果提供程序包列表不是字符串,或者包含一个空字符串元素,则会抛出一个JMXProviderException
。
如果提供程序包列表存在且不为空,则对列表中的每个元素pkg
,工厂将尝试加载类
pkg.protocol.ServerProvider
如果newJMXConnectorServer
的environment
参数包含键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
的结果。
传递给JMXConnectorServerProvider
的Map
参数是一个新的只读Map
,其中包含environment
参数到JMXConnectorServerFactory.newJMXConnectorServer
中的所有条目,如果有的话。此外,如果environment
参数中不存在jmx.remote.protocol.provider.class.loader
键,则将其添加到新的只读Map
中。关联的值是调用线程的上下文类加载器。
- 自版本:
- 1.5
-
Field Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic JMXConnectorServer
newJMXConnectorServer
(JMXServiceURL serviceURL, Map<String, ?> environment, MBeanServer mbeanServer) 在给定地址创建连接器服务器。
-
Field Details
-
DEFAULT_CLASS_LOADER
指定默认类加载器的属性名称。此类加载器用于反序列化从客户端接收的请求中的对象,可能在查询特定于MBean的类加载器之后。与此属性关联的值是
ClassLoader
的实例。- 参见:
-
DEFAULT_CLASS_LOADER_NAME
指定默认类加载器MBean名称的属性名称。此类加载器用于反序列化从客户端接收的请求中的对象,可能在查询特定于MBean的类加载器之后。与此属性关联的值是
ObjectName
的实例。- 参见:
-
PROTOCOL_PROVIDER_PACKAGES
指定在查找协议处理程序时要查询的提供程序包的属性名称。与此属性关联的值是一个用竖线(
|
)分隔的包名称字符串。- 参见:
-
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
中存在协议的提供程序,但由于某种原因无法使用。
-