spring - 将 Spring MBean 导出到 Tomcat 的 MBeanServer 实例

标签 spring tomcat spring-mvc jmx

我正在使用部署在 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 声明,希望导出器能够自然地获取 tomcat 的 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>

这将为您提供对平台 MBeanServer 的直接引用,这是您的 JConsole 连接到的平台。

关于spring - 将 Spring MBean 导出到 Tomcat 的 MBeanServer 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15145684/

相关文章:

java - Vaadin 为单个应用程序启动多个应用程序实例

tomcat - 为所有 webapps 定制 webapp 类加载器

tomcat.util.scan.DefaultJarScanner.jarsToSkip 属性不起作用

java - 如何在jsp中使用从spring mvc返回的Model对象

spring - 使用 Spring 框架的 DOJO

Spring Security - 外部化 "requires-channel"的值

java - 每次运行 Junit 测试时实体管理器都为空

java - Spring security - 创建 403 访问被拒绝的自定义响应

java - 类似OSGI/Eclipse扩展点的Spring机制

java - JSTL 变量未显示