3

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

-Dcom.sun.management.jmxremote

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

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

我的选择似乎是:

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

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

4

2 回答 2

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>
于 2009-08-18T15:25:13.630 回答
0

问题是我只知道如何以编程方式获取对正确 MBeanServer 的引用

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

于 2009-08-18T15:03:57.260 回答