Using JSR-160 Connectors

为了远程访问,Spring JMX 模块在 org.springframework.jmx.support 程序包内提供两个 FactoryBean 实现,用于创建服务器和客户端连接器。

Server-side Connectors

要让 Spring JMX 创建、启动和公开 JSR-160 JMXConnectorServer,你可以使用以下配置:

<bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean"/>

默认情况下,ConnectorServerFactoryBean 创建一个绑定到 service:jmx:jmxmp://localhost:9875JMXConnectorServer。因此,serverConnector bean 通过 localhost 上的 JMXMP 协议,在 9875 端口向客户端公开 local MBeanServer。请注意,JMXMP 协议标记为 JSR 160 规范中的可选协议。目前,主要的开源 JMX 实现,MX4J,和 JDK 提供的 JMX 实现不支持 JMXMP。

要指定另一个 URL,并用 ObjectName 属性将 JMXConnectorServer 本身注册到 MBeanServer,你可以使用以下示例所示:

<bean id="serverConnector"
		class="org.springframework.jmx.support.ConnectorServerFactoryBean">
	<property name="objectName" value="connector:name=rmi"/>
	<property name="serviceUrl"
			value="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/myconnector"/>
</bean>

如果设置 ObjectName 属性,Spring 会自动使用该 ObjectName 将你的连接器注册到 MBeanServer。以下示例显示了在创建 JMXConnector 时可以传递给 ConnectorServerFactoryBean 的全部参数:

<bean id="serverConnector"
		class="org.springframework.jmx.support.ConnectorServerFactoryBean">
	<property name="objectName" value="connector:name=iiop"/>
	<property name="serviceUrl"
		value="service:jmx:iiop://localhost/jndi/iiop://localhost:900/myconnector"/>
	<property name="threaded" value="true"/>
	<property name="daemon" value="true"/>
	<property name="environment">
		<map>
			<entry key="someKey" value="someValue"/>
		</map>
	</property>
</bean>

请注意,当你使用基于 RMI 的连接器时,你需要启动查找服务 (tnameservrmiregistry),才能完成名称注册。

Client-side Connectors

要创建一个到远程支持 JSR-160 的 MBeanServerMBeanServerConnection,你可以使用以下示例所示的 MBeanServerConnectionFactoryBean

<bean id="clientConnector" class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean">
	<property name="serviceUrl" value="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmxrmi"/>
</bean>

JMX over Hessian or SOAP

JSR-160 允许扩展客户端和服务器之间进行通信的方式。前面各节中所示的示例使用了 JSR-160 规范(IIOP 和 JRMP)所需的强制性基于 RMI 的实现以及(可选的)JMXMP。通过使用其他提供程序或 JMX 实现(例如 MX4J),你可以利用通过简单的 HTTP 或 SSL 等协议的 SOAP 或 Hessian 等协议,如下例所示:

<bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean">
	<property name="objectName" value="connector:name=burlap"/>
	<property name="serviceUrl" value="service:jmx:burlap://localhost:9874"/>
</bean>

在上一个示例中,我们使用了 MX4J 3.0.0。请参阅官方 MX4J 文档以获取更多信息。