20.5. JSR-160连接器

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

20.5.1. 服务器端连接器

使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, 要使用相应的 serviceUrlObjectName 属性:

<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>

20.5.2. 客户端连接器

要构建一个 MBeanServerConnection 到一个远程的JSR-160 MBeanServer, 使用以下所示的 MBeanServerConnectionFactoryBean

<bean id="clientConnector" class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean">
  <property name="serviceUrl" value="service:jmx:rmi://localhost:9875"/>
</bean>

20.5.3. 基于Burlap/Hessian/SOAP的JMX

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官方文档。