强制Spring的MBeanExporter使用特定的MBeanServer

wax*_*ing 3 java jboss spring jmx mbeans

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

-Dcom.sun.management.jmxremote
Run Code Online (Sandbox Code Playgroud)

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

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

我的选择似乎是:

  1. 编写一个子类MBeanExporter,覆盖某些方法,以便加载正确的MBeanServer
  2. 写一个PostBeanProcessor找到JBoss的MBeanServer,然后调用setServer
  3. JNDI?仅在MBeanServer在JNDI中公开时才有效,但我无法找到它.

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

ska*_*man 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>
Run Code Online (Sandbox Code Playgroud)