我有一个在JBoss 4.2.2上运行的Web应用程序。为了监视性能,我启用了Java 5附带的内部平台JMX服务器。换句话说,我添加了:

-Dcom.sun.management.jmxremote

JBoss的启动脚本。这按预期工作。但是,因此,所有MBean现在都在平台MBeanServer上注册。我不需要,我希望它们在JBoss的MBeanServer上注册。

困难在于我使用Spring注册我的托管bean。为此,使用了MBeanExporter。因此,我需要告诉我的MBeanExporter在注册bean时使用JBoss的MBeanServer。但是,MBeanExporter中唯一影响使用服务器的公开方法是setServer(MBeanServer mBeanServer)。问题是我只知道如何以编程方式获得对正确的MBeanServer的引用,而不是在声明了MBeanExporter的Spring的XML中。

我的选择似乎是:
  • 将子类写入MBeanExporter,重写某些方法,以便正确加载MBeanServer
  • 编写一个PostBeanProcessor来找到JBoss的MBeanServer,然后调用setServer
  • JNDI?仅当MBeanServer在JNDI中公开并且我无法找到它时才有效。

  • 最惯用的方法是什么?我做的事真的很傻吗?

    最佳答案

    您可以使用JBoss API中的static工厂方法将MBeanServer注入MBeanExporter:

    <bean class="org.springframework.jmx.export.MBeanExporter">
        <property name="server">
            <bean class="org.jboss.mx.util.MBeanServerLocator" factory-method="locateJBoss"/>
        </property>
        <!-- Add the rest of your MBeanExporter properties here -->
    </bean>
    

    09-08 03:00