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>
你可以看到已经为以 ObjectName
:bean:name=testBean
注册的MBean创建了一个代理,
该代理实现的所有接口都由 proxyInterfaces
和映射规则掌控。
也就是将这些接口上方法,属性映射为MBean上操作与属性的规则,它们与 InterfaceBasedMBeanInfoAssembler
使用的是同一套规则。
MBeanProxyFactoryBean
能创建一个任何MBean的代理,可以通过 MBeanServerConnection
来访问。
默认将定位,使用本地的 MBeanServer
。但是,为了适应指向远程MBean的代理,你可以重载这种行为,提供一个指向远程 MBeanServer
的 MBeanServerConnection
。
<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
。