我的应用程序部署在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独立版上运行?
答案 0 :(得分:0)
以下是解决方案:
https://community.jboss.org/thread/221708
引用:
以上问题是dueto locateJboss实现,它与旧版本的Jboss兼容。 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'。