JBoss 7.1: java.lang.IllegalStateException: MBeanServer «jboss» не найден

Мое приложение развернуто на JBoss 7.1 (автономно). Я получаю исключение в следующей строке:

MBeanServerConnection server = MBeanServerLocator.locateJBoss();

Исключение составляет:

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

Код выше работал нормально, когда приложение было развернуто на JBoss 5.

Из того, что я читал в Интернете, код должен работать только тогда, когда он вызывается из той же JVM, в которой был создан MBeanServer. В противном случае это удаленный вызов, и я должен использовать JNDI. Но разве это не локальный вызов (та же JVM - то есть JBoss JVM)? Как тогда это работало на JBoss 5? Как заставить его работать в автономном режиме JBoss 7.1 без изменения этого конкретного кода?


person rapt    schedule 27.01.2013    source источник


Ответы (1)


Вот решение:

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

Цитировать:

Вышеупомянутая проблема связана с реализацией locateJboss, которая совместима со старой версией Jboss. MBeanServer, используемый JBoss 7 (по умолчанию), является 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.

person rapt    schedule 14.03.2013