通过代理访问 MBean

Spring JMX 允许您创建代理,这些代理会将调用重新路由到在本地或远程MBeanServer中注册的 MBean。这些代理为您提供了一个标准的 Java 接口,您可以通过该接口与您的 MBean 进行交互。以下代码显示了如何为在本地MBeanServer中运行的 MBean 配置代理。

<bean id="proxy" class="org.springframework.jmx.access.MBeanProxyFactoryBean">
	<property name="objectName" value="bean:name=testBean"/>
	<property name="proxyInterface" value="org.springframework.jmx.IJmxTestBean"/>
</bean>

在前面的示例中,您可以看到为在ObjectNamebean:name=testBean下注册的 MBean 创建了一个代理。代理实现的接口集由proxyInterfaces属性控制,并且将这些接口上的方法和属性映射到 MBean 上的操作和属性的规则与InterfaceBasedMBeanInfoAssembler使用的规则相同。

MBeanProxyFactoryBean可以为可通过MBeanServerConnection访问的任何 MBean 创建代理。默认情况下,会找到并使用本地MBeanServer,但您可以覆盖此设置并提供一个指向远程MBeanServerMBeanServerConnection,以满足指向远程 MBean 的代理的需求。

<bean id="clientConnector"
		class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean">
	<property name="serviceUrl" value="service:jmx:rmi://remotehost:9875"/>
</bean>

<bean id="proxy" class="org.springframework.jmx.access.MBeanProxyFactoryBean">
	<property name="objectName" value="bean:name=testBean"/>
	<property name="proxyInterface" value="org.springframework.jmx.IJmxTestBean"/>
	<property name="server" ref="clientConnector"/>
</bean>

在前面的示例中,我们使用MBeanServerConnectionFactoryBean创建了一个指向远程机器的MBeanServerConnection。然后,此MBeanServerConnection通过server属性传递给MBeanProxyFactoryBean。创建的代理将所有调用通过此MBeanServerConnection转发到MBeanServer