27.5.1 服务端连接器

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

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

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