使用JSR-160连接器
对于远程访问,Spring JMX模块在org.springframework.jmx.support包内提供了两个FactoryBean实现,用于创建服务器端和客户端连接器。
服务器端连接器
要让Spring JMX创建、启动和暴露一个JSR-160 JMXConnectorServer,您可以使用以下配置:
<bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean"/>
默认情况下,ConnectorServerFactoryBean创建一个绑定到service:jmx:jmxmp://localhost:9875的JMXConnectorServer。因此,serverConnector bean通过JMXMP协议在localhost的9875端口上向客户端暴露本地MBeanServer。请注意,JMXMP协议在JSR 160规范中被标记为可选。目前,主要的开源JMX实现MX4J以及JDK提供的实现都不支持JMXMP。
要指定另一个URL并将JMXConnectorServer本身注册到MBeanServer,您可以分别使用serviceUrl和ObjectName属性,如以下示例所示:
<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)以便完成名称注册。
客户端连接器
要创建到远程JSR-160启用的MBeanServer的MBeanServerConnection,您可以使用MBeanServerConnectionFactoryBean,如以下示例所示:
<bean id="clientConnector" class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean">
<property name="serviceUrl" value="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmxrmi"/>
</bean>
使用Hessian或SOAP的JMX
JSR-160允许扩展客户端和服务器之间通信的方式。前面部分展示的示例使用JSR-160规范所需的强制性基于RMI的实现(IIOP和JRMP)以及(可选的)JMXMP。通过使用其他提供程序或JMX实现(例如MX4J),您可以利用诸如SOAP或Hessian等协议,通过简单的HTTP或SSL等方式,如以下示例所示:
<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文档。