使用 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://:9875JMXConnectorServer。因此,serverConnector bean 透過 localhost 上的 9875 埠上的 JMXMP 協議向客戶端公開本地 MBeanServer。請注意,JMXMP 協議在 JSR 160 規範中被標記為可選。目前,主要的開源 JMX 實現 MX4J 和 JDK 中提供的實現都不支援 JMXMP。

要指定另一個 URL 並將 JMXConnectorServer 本身註冊到 MBeanServer,可以使用 serviceUrlObjectName 屬性,如下例所示

<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 的 MBeanServerMBeanServerConnection,可以使用 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 官方文件。