使用 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://: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:///jndi/rmi://: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:///jndi/iiop://: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:///jndi/rmi://:1099/jmxrmi"/>
</bean>
透過 Hessian 或 SOAP 的 JMX
JSR-160 允許擴充套件客戶端和伺服器之間的通訊方式。前面章節中展示的示例使用了 JSR-160 規範(IIOP 和 JRMP)要求的基於 RMI 的強制實現以及(可選的)JMXMP。透過使用其他提供商或 JMX 實現(如 MX4J),你可以利用 SOAP 或 Hessian over simple 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://:9874"/>
</bean>
在前面的示例中,我們使用了 MX4J 3.0.0。有關更多資訊,請參閱 MX4J 官方文件。