27.5.1 服务端连接器

为了使用Spring JMX 来创建,需要使用以下配置启动并暴露JSR-160 JMXConnectorServer:

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

ConnectorServerFactoryBean创建的JMXConnectorServer默认会绑定到”service:jmx:jmxmp://localhost:9875”.serverConnector通过JMXMP协议在本地的9875端口上将本地的MBeanServer暴露给客户端。注意,JMXMP协议是JSR 160标记为可选协议:当前 ,JMX主要的开源实现MX4J,它只提供了基于JDK的协议,而不支持JMXMP。

分别使用serviceUrl和ObjectName属性来指明另一个URL并把JMXConnectorServer自身注册为一个MBeanServer:

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

如果设置了ObjectName属性,Spring将自动使用在ObjectName底下使用MBeanServer注册连接器。下面的例子展示了当你创建一个JMXConnector时,你可以传递完整的参数给ConnectorServerFactoryBean。

  1. <bean id="serverConnector"
  2. class="org.springframework.jmx.support.ConnectorServerFactoryBean">
  3. <property name="objectName" value="connector:name=iiop"/>
  4. <property name="serviceUrl"
  5. value="service:jmx:iiop://localhost/jndi/iiop://localhost:900/myconnector"/>
  6. <property name="threaded" value="true"/>
  7. <property name="daemon" value="true"/>
  8. <property name="environment">
  9. <map>
  10. <entry key="someKey" value="someValue"/>
  11. </map>
  12. </property>
  13. </bean>

注意,当使用基于RMI连接器时,需要启动查找服务(tnameserv or rmiregistry)来完成名称注册。如果你使用Spring 通过RMI来导出远程服务,那么Spring已经构建了一个RMI注册。如果没有,你可以通过下面的配置简单的启动一个注册:

  1. <bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
  2. <property name="port" value="1099"/>
  3. </bean>

27.5.2 客户端连接器

下面展示了使用MBeanServerConnectionFactoryBean创建远程JSR-160 MBeanServer 的MBeanServerConnection:

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

27.5.3 通过Hessian 或 SOAP 的JMX

JSR-160允许客户端和服务端之间进行通讯的方式进行扩展。上面的例子使用JSR-160规范(IIOP和JRMP)和(可选)JMXMP所需的强制基于RMI的实现。通过使用其他的提供者或JMX的实现(例如MX4J)你可以通过简单的HTTP或SSL或其他方式利用诸如SOAP或Hessian之类的协议:

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

上面的例子使用了 MX4J 3.0.0,关于MX4J请参考官方文档.