对于远程访问,Spring JMX模块在 org.springframework.jmx.support 包内提供了两个 FactoryBean 实现,用来构建服务器端和客户端的连接器。
使Spring JMX构建,启动和暴露一个JSR-160 JMXConnectorServer,要使用以下配置:
<bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean"/>
ConnectorServerFactoryBean 默认创建一个 JMXConnectorServer,
并将其绑定到 "service:jmx:jmxmp://localhost:9875"。
因此该 serverConnector Bean在本机9875端口通过JMXMP协议将本地 MBeanServer 暴露给客户。
要留意JSR160规范已将JMXMP协议标记为可选的,如今,主流的开源JMX实现MX4J和J2SE 5.0提供的实现都已不支持JMXMP了。
要指定其他URL和要用 MBeanServer 注册 JMXConnectorServer,
要使用相应的 serviceUrl 和 ObjectName 属性:
<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 上。
以下例子展示了当创建一个JMX连接器时,你可以传给 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的连接器,你要先启动查找服务(tnameserv或者rmiregistry),以便完成命名注册。 如果你在使用Spring将远程服务通过RMI输出,那么Spring已经构建了一个RMI注册服务。如果没有使用Spring,通过使用以下配置片段,你也可以很容易地启动一个注册服务。
<bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean"> <property name="port" value="1099"/> </bean>
要构建一个 MBeanServerConnection 到一个远程的JSR-160 MBeanServer,
使用以下所示的 MBeanServerConnectionFactoryBean。
<bean id="clientConnector" class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean"> <property name="serviceUrl" value="service:jmx:rmi://localhost:9875"/> </bean>
JSR-160运行扩展客户端与服务器端交流的方式。上面的例子都使用了强制的基于RMI的实现,这是JSR-160规范(IIOP和JRMP)和(可选的JMXMP)要求的。 通过使用其他提供商的或者其他的JMX实现(例如 MX4J),你就可以享受其他协议, 如SOAP,Hessian,基于HTTP或SSL的Burlap,或者其他协议:
<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官方文档。