用于创建JMX API连接器客户端的工厂。此类没有实例。
通常使用此类的connect
方法进行连接。更高级的应用程序可以分离连接器客户端的创建,使用newJMXConnector
和连接本身的建立,使用JMXConnector.connect(Map)
。
每个客户端由JMXConnectorProvider
的实例创建。此实例如下找到。假设给定的JMXServiceURL
看起来像"service:jmx:protocol:remainder"
。然后工厂将尝试找到适当的JMXConnectorProvider
用于protocol
。在protocol
中的每个+
或-
字符都分别替换为.
或_
。
提供程序包列表搜索如下:
- 如果newJMXConnector的
environment
参数包含键jmx.remote.protocol.provider.pkgs
,则关联的值是提供程序包列表。 - 否则,如果系统属性
jmx.remote.protocol.provider.pkgs
存在,则其值是提供程序包列表。 - 否则,没有提供程序包列表。
提供程序包列表是一个字符串,解释为由竖线(|
)分隔的非空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
的结果。
传递给JMXConnectorProvider
的Map
参数是一个新的只读Map
,其中包含environment
参数中的所有条目,如果有的话。此外,如果environment
参数中不存在jmx.remote.protocol.provider.class.loader
键,则将其添加到新的只读Map
中。关联的值是调用线程的上下文类加载器。
- 自版本:
- 1.5
-
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptionstatic JMXConnector
connect
(JMXServiceURL serviceURL) 创建到给定地址的连接到连接器服务器的连接。static JMXConnector
connect
(JMXServiceURL serviceURL, Map<String, ?> environment) 创建到给定地址的连接到连接器服务器的连接。static JMXConnector
newJMXConnector
(JMXServiceURL serviceURL, Map<String, ?> environment) 为给定地址的连接器服务器创建连接器客户端。
-
Field Details
-
DEFAULT_CLASS_LOADER
指定默认类加载器的属性名称。此类加载器用于反序列化远程
MBeanServerConnection
调用的返回值和异常。与此属性关联的值是ClassLoader
的实例。- 参见:
-
PROTOCOL_PROVIDER_PACKAGES
指定在查找协议处理程序时要查询的提供程序包的属性名称。与此属性关联的值是由竖线(
|
)分隔的包名称的字符串。- 参见:
-
PROTOCOL_PROVIDER_CLASS_LOADER
指定用于加载协议提供程序的类加载器的属性名称。与此属性关联的值是
ClassLoader
的实例。- 参见:
-
-
Method Details
-
connect
创建到给定地址的连接到连接器服务器的连接。
此方法等效于
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
中存在协议的提供程序,但由于某种原因无法使用。
-