20.6. 通过代理访问MBeans

Spring JMX允许你创建代理,这个代理改变到注册到本地或远程 MBeanServer 的MBean的调用。 这些代理提供里一个标准的Java接口,通过它,你可以和MBean相合。 下面的代码展示了如何为一个运行在本地 MBeanServer 的配置一个代理:

<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 能创建一个到任何MBean的代理,可以通过一个 MBeanServerConnection来访问。 缺省情况下,查找和使用本地 MBeanServer,但是你可以重写(override)它, 提供一个指向远程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>

你可以看到,我们创建了一个 MBeanServerConnection,它指向一个远程的, 使用了 MBeanServerConnectionFactoryBean 的机器。然后通过属性 server 将这个 MBeanServerConnection 传给 MBeanProxyFactoryBean 。 创建的代理将通过这个 MBeanServerConnection 转发所有到 MBeanServer的调用。