服务器端xml文档,暴露了两个bean:bean:name=boy(暴露的接口是com.ebupt.jmxTest.Man)和bean:name=dog(暴露的接口是com.ebupt.jmxTest.Animal)
注意在mbeanserver中,有个属性locateExistingServerIfPossible(缺省是false),在运行过程中clent端老是报Exception in thread "main" org.springframework.jmx.access.InvalidInvocationException: bean:name=boy
at org.springframework.jmx.access.MBeanClientInterceptor.invoke(MBeanClientInterceptor.java:358)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy0.sayHello(Unknown Source)
at com.ebupt.jmxTest.Client.main(Client.java:13)
但如果把属性locateExistingServerIfPossible改为true就能运行正常,很奇怪,不明白其中的原因,大家能解释一下吗?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <bean id="serverConnector" depends-on="registry"
class="org.springframework.jmx.support.ConnectorServerFactoryBean">
<property name="objectName" value="connector:name=rmi" />
<property name="serviceUrl" value="service:jmx:rmi:///jndi/rmi://localhost:9875/123456" />
<property name="threaded" value="true" />
<property name="daemon" value="true" />
</bean>

<bean id="registry"
class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
<property name="port" value="9875" />
</bean>

<bean id="mbeanserver" class="org.springframework.jmx.support.MBeanServerFactoryBean">
<!-- property name="defaultDomain" value="JMI:type=MBean1111111111Server" /-->
<!-- indicate to first look for a server -->
<property name="locateExistingServerIfPossible" value="false"/>
<!-- property name="agentId" value="MBeanTest"/-->
</bean>

<!-- 
<bean id="mbeanserver"
class="javax.management.MBeanServerFactory" factory-method="createMBeanServer">
</bean>
-->

<bean id="jmxMBeanExport" class="org.springframework.jmx.export.MBeanExporter">
<property name="server" ref="mbeanserver" />

<property name="beans">
<map>
<entry key="bean:name=boy">
<bean class="com.ebupt.jmxTest.boy">
</bean>
</entry> <entry key="bean:name=dog">
<bean class="com.ebupt.jmxTest.dog" />
</entry>
</map>
</property> <property name="assembler">
<bean
class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
<property name="interfaceMappings">
<props>
<prop key="bean:name=boy">
com.ebupt.jmxTest.Man
</prop>

<prop key="bean:name=dog">
com.ebupt.jmxTest.Animal
</prop>

</props>
</property>
</bean>
</property> </bean></beans>
客户端<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
<bean id="clientConnector"
class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean">
<property name="serviceUrl"
value="service:jmx:rmi:///jndi/rmi://localhost:9875/123456" />
</bean>

<bean id="proxy"
class="org.springframework.jmx.access.MBeanProxyFactoryBean">
<property name="objectName" value="bean:name=boy"/>
<property name="server">
<ref local="clientConnector"/>
</property>
<property name="proxyInterface" value="com.ebupt.jmxTest.Man"/>
</bean></beans>