使用 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
。请注意,JSR 160 规范将 JMXMP 协议标记为可选。目前,主要的开源 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 文档。