0

我的应用程序部署在 JBoss 7.1(独立)上。我在以下行遇到异常:

MBeanServerConnection server = MBeanServerLocator.locateJBoss();

例外是:

JBoss: java.lang.IllegalStateException: No 'jboss' MBeanServer found!

当应用程序部署在 JBoss 5 上时,上面的代码运行良好。

从我在线阅读的内容来看,该代码应该仅在从创建 MBeanServer 的同一 JVM 调用时才有效。否则这是一个远程调用,我必须使用 JNDI。但它不是本地调用(相同的 JVM - 即 JBoss JVM)吗?那么它在 JBoss 5 上是如何工作的呢?如何在不更改此特定代码的情况下使其在 JBoss 7.1 上独立运行?

4

1 回答 1

0

这是解决方案:

https://community.jboss.org/thread/221708

引用:

上述问题是由于与旧版本的 Jboss 兼容的 locateJboss 实现。JBoss 7 使用的 MBeanServer(默认)是平台 MBeanServer。类名是com.sun.jmx.mbeanserver.JmxMBeanServer,默认域是DefaultDomain。因此,您可以简单地使用:

java.lang.management.ManagementFactory.getPlatformMBeanServer()

或者:

 for(MBeanServer server: javax.management.MBeanServerFactory.findMBeanServer(null)) {

      if("DefaultDomain".equals(server.getDefaultDomain())) return server;

 }

 throw new Exception("Failed to locate MBeanServer");

另一方面,jboss.system:type=ServerInfo 对象名称在 AS 7.1 中不起作用,我必须使用 JVM 特定参数来确定 MBean 属性。'java.lang:type=Memory' 和属性为 'HeapMemoryUsage'。

于 2013-03-14T12:51:05.220 回答