27.6 通过代理访问MBeans

Spring JMX 允许你创建代理,它将重新路由到本地或者远程MBeanServer中注册的MBean。这些代理提供了标准的Java接口来和MBean进行交互。下面的代码展示了如何在本地允许的MBeanServer中配置代理:

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

你可以看到在ObjectName: bean:name=testBean下注册的MBean创建代理。通过proxyInterfaces属性来控制代理实现的一系列接口,InterfaceBasedMBeanInfoAssembler使用和MBean上属性相同规则来操作这些接口上的方法映射规则和属性。

MBeanProxyFactoryBean可以通过MBeanServerConnection为任何可以访问的MBean创建一个代理。默认,使用本地的MBeanServer,但是你可以重写它,并提供一个指向远程MBeanServer的MBeanServerConnection来满足远程MBean的代理。

  1. <bean id="clientConnector"
  2. class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean">
  3. <property name="serviceUrl" value="service:jmx:rmi://remotehost:9875"/>
  4. </bean>
  5. <bean id="proxy" class="org.springframework.jmx.access.MBeanProxyFactoryBean">
  6. <property name="objectName" value="bean:name=testBean"/>
  7. <property name="proxyInterface" value="org.springframework.jmx.IJmxTestBean"/>
  8. <property name="server" ref="clientConnector"/>
  9. </bean>

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