我正在用我部署在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的直接参考。

09-10 23:24