对于远程访问,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官方文档。