对远程访问,Spring JMX模块在包 org.springframework.jmx.support
中提供了两种 FactoryBean
实现来创建服务器端和客户端连接器。
要创建一个Spring JMX,启动暴露一个JSR-60 JMXConnectorServer
,用下面的配置:
<bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean"/>
缺省情况下,ConnectorServerFactoryBean
创建一个与
"service:jmx:jmxmp://localhost:9875"
绑定的 JMXConnectorServer
。
bean serverConnector
因此通过本机端口为9875上的JMXMP协议把本地的 MBeanServer
暴露给客户端。
注意在JSR 160规范中,JMXMP是标记为可选的:
当前,主要的开源JMX实现,MX4J和由J2SE5.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
自动注册连接器。
下面的例子展示了一整套参数,在创建一个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的连接器时,你需要启动查找服务(tnameserv或rmiregistry)来完成名字注册。 如果你用Spring通过RMI输出远程服务,那么Spring将已经创建了一个RMI注册。 如果没有,你可以用下面的配置很容易就启动一个注册:
<bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean"> <property name="port" value="1099"/> </bean>
要创建一个 MBeanServerConnection
到远程,
JSR-160用 MBeanServerConnectionFactoryBean
激活了 MBeanServer
,
如下面所示:
<bean id="clientConnector" class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean"> <property name="serviceUrl" value="service:jmx:rmi://localhost:9875"/> </bean>
JSR-160允许扩展客户端和服务器端之间的通信方式。上面的例子使用了强制的基于RMI的实现和JRMP(可选的), 这是由JSR-160规范(IIOP和JRMP)所要求的。通过使用其他的提供商或JMX实现(如 MX4J), 你可以从基于简单HTTP或SSL的诸如SOAP、Hessian、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>
在上面的例子中,使用了MX4J3.0.0,更多的信息参见官方的MX4J文档。