使用 JSR-160 连接器

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

服务器端连接器

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

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

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

要指定另一个 URL 并将JMXConnectorServer本身注册到MBeanServer,您可以分别使用serviceUrlObjectName属性,如下例所示

<bean id="serverConnector"
		class="org.springframework.jmx.support.ConnectorServerFactoryBean">
	<property name="objectName" value="connector:name=rmi"/>
	<property name="serviceUrl"
			value="service:jmx:rmi://127.0.0.1/jndi/rmi://127.0.0.1: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://127.0.0.1/jndi/iiop://127.0.0.1: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)才能完成名称注册。

客户端连接器

要创建到启用远程 JSR-160 的MBeanServerMBeanServerConnection,您可以使用MBeanServerConnectionFactoryBean,如下例所示

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

通过 Hessian 或 SOAP 使用 JMX

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://127.0.0.1:9874"/>
</bean>

在前面的示例中,我们使用了 MX4J 3.0.0。有关更多信息,请参阅官方 MX4J 文档。