20.5. JSR-160连接器

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

20.5.1. 服务器端连接器

要创建一个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, 分别用 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自动注册连接器。 下面的例子展示了一整套参数,在创建一个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>

20.5.2. 客户端连接器

要创建一个 MBeanServerConnection 到远程, JSR-160用 MBeanServerConnectionFactoryBean 激活了 MBeanServer , 如下面所示:

<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的实现和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文档。