27.5 JSR-160连接器

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

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

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

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

<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 or rmiregistry)来完成名称注册。如果你使用Spring 通过RMI来导出远程服务,那么Spring已经构建了一个RMI注册。如果没有,你可以通过下面的配置简单的启动一个注册:

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

27.5.2 客户端连接器

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

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

27.5.3 通过Hessian 或 SOAP 的JMX

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

<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请参考官方文档.