强制Spring的MBeanExporter使用特定的MBeanServer

时间:2009-08-18 14:36:36

标签: java spring jboss jmx mbeans

我在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中。

我的选项似乎是:

  1. 将子类写入MBeanExporter,覆盖某些方法,以便加载正确的MBeanServer
  2. 编写找到JBoss'MBeanServer的PostBeanProcessor,然后调用setServer
  3. JNDI?仅在MBeanServer在JNDI中公开时才有效,但我无法找到它。
  4. 最惯用的方式是什么?我做的事真的很傻吗?

2 个答案:

答案 0 :(得分:6)

您可以使用JBoss API中的静态工厂方法将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>

答案 1 :(得分:0)

  

问题是我只知道如何   得到正确的参考   MBeanServer以编程方式

如果您可以通过编程方式获取引用,为什么不能通过MBeanExporter#server属性连接它?