使用 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 透過 localhost 上的 9875 埠上的 JMXMP 協議向客戶端公開本地 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 規範要求的強制性基於 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://:9874"/>
</bean>
在前面的示例中,我們使用了 MX4J 3.0.0。更多資訊請參閱 MX4J 官方文件。