Java 强制弹簧&x27;s MBeanExporter以使用特定MBeanServer

Java 强制弹簧&x27;s MBeanExporter以使用特定MBeanServer,java,spring,jboss,jmx,mbeans,Java,Spring,Jboss,Jmx,Mbeans,我有一个运行在JBoss4.2.2上的web应用程序。为了监控性能,我启用了Java5附带的内部平台JMX服务器。换言之,我补充说: -Dcom.sun.management.jmxremote 到JBoss的启动脚本。这正如预期的那样有效。但是,因此,所有MBean现在都在平台MBeanServer上注册。我不想这样,我想让他们在JBoss的MBeanServer上注册 困难在于我使用Spring注册我的托管bean。为此,使用了MBeanExporter。因此,我需要告诉我的MBeanEx

我有一个运行在JBoss4.2.2上的web应用程序。为了监控性能,我启用了Java5附带的内部平台JMX服务器。换言之,我补充说:

-Dcom.sun.management.jmxremote
到JBoss的启动脚本。这正如预期的那样有效。但是,因此,所有MBean现在都在平台MBeanServer上注册。我不想这样,我想让他们在JBoss的MBeanServer上注册

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

我的选择似乎是:

  • 编写一个子类到
    MBeanExporter
    ,覆盖某些方法,以便加载正确的MBeanServer
  • 编写一个
    PostBeanProcessor
    查找JBoss的MBeanServer,然后调用
    setServer
  • JNDI?只有当MBeanServer在JNDI中公开时才有效,而我还没有找到它
  • 最惯用的方式是什么?我真的在做傻事吗

    问题是我只知道怎么做 获取对正确代码的引用 MBeanServer以编程方式


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

    可以使用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>
    
    
    
    是的,但我需要在MBeanExporter上调用AfterPropertieSet之前执行此操作。我可以用PostBeanProcessor完成这项工作,这是我倾向于的解决方案。。。但是我觉得我正在做的事情应该非常非常简单,非常复杂。为什么你不能设置“server”属性来引用正确的MBeanServer?如果我以编程的方式来做,我需要一些适当的地方来调用setServer。这必须在Spring创建bean之后,但在Spring调用bean上的AfterPropertieSet之前(因为那时使用MBeanServer)。理想情况下,我会在XML中设置它,但在skaffman向我展示如何设置之前,我找不到一个好方法。太好了!这正是我想要的。我以前使用过工厂方法,但我不认为它适合这种用法。