通过代理访问 MBean

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

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

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

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

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

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

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