使用 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://127.0.0.1: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://127.0.0.1/jndi/rmi://127.0.0.1:1099/myconnector"/>
</bean>
如果设置了ObjectName
属性,Spring 会自动将您的连接器注册到MBeanServer
,注册的名称为ObjectName
。以下示例展示了在创建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://127.0.0.1/jndi/iiop://127.0.0.1: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://127.0.0.1/jndi/rmi://127.0.0.1:1099/jmxrmi"/>
</bean>
通过 Hessian 或 SOAP 使用 JMX
JSR-160 允许扩展客户端和服务器之间通信的方式。前面部分的示例使用了 JSR-160 规范(IIOP 和 JRMP)要求的强制性基于 RMI 的实现以及(可选的)JMXMP。通过使用其他提供商或 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://127.0.0.1:9874"/>
</bean>
在前面的示例中,我们使用了 MX4J 3.0.0。有关更多信息,请参阅 MX4J 官方文档。