我正在用我部署在tomcat服务器(我已经在本地运行)上的WAR文件来使用spring的JMX支持。但是,尽管遵循了已发布的指南,但我仍无法将MBean专门部署到tomcat的MBeanServer实例。
我尝试了MBeanExporter和MBeanServerFactoryBean配置的一些变体,但似乎没有任何效果。这是我当前的配置:
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
<property name="serviceUrl" value="service:jmx:rmi:///jndi/rmi://localhost:6969/jmxrmi"/>
</bean>
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
<property name="server" ref="mbeanServer"/>
<property name="beans">
<map>
<entry key="domain:name=notifier" value-ref="mBeanNotifier"/>
</map>
</property>
</bean>
<bean id="mBeanNotifier" class="com.sei.poc.jmx.mbeans.SimpleMBeanNotifier"/>
而且,我还在tomcat的配置中包括了以下参数:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=6969
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
我可以通过在JConsole中输入localhost:6969来手动连接到mbeanServer,但是我只能找到本机的catalina MBean。当我深入研究那些MBean时,我什至找到了对我的项目的引用,但是不幸的是,找不到我声明的MBean。
我曾尝试删除MBeanServerFactoryBean声明,以希望出口商能够幼稚地拿起雄猫的MBeanServer(没有运气)。我也尝试过服务URL的不同变体,但没有成功。
我应该注意,我能够将MBean部署到本地MBeanServer并使用JConsole进行查看。
任何有关问题可能是什么的建议将不胜感激。
谢谢!
最佳答案
当您使用ServiceURL获取MBeanServerConnection时,返回的对象不是MBeanServer(即,它不支持registerObject)。
尝试将您的mbeanServer bean替换为:
<bean id="mbeanServer" class="java.lang.management.ManagementFactory"
lazy-init="false" factory-method="getPlatformMBeanServer">
</bean>
这将为您提供JConsole连接到的平台MBeanServer的直接参考。