Mbeans, зарегистрированные на сервере mbean, не отображаются в jconsole - PullRequest
5 голосов
/ 15 сентября 2011

Я создаю сервер mbean с помощью MBeanServerFactory.createMBeanServer и регистрирую на нем mbeans. Я могу найти mbean сервер в jconsole, но при подключении к нему я не вижу зарегистрированных mbeans. Вот код:

public static void main(String[] args) throws Exception
{
    MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer("example");
    ObjectName objectName = new ObjectName("example:type=simpleMbean");
    Simple simple = new Simple (1, 0);
    mbeanServer.registerMBean(simple, objectName);
    while (true)
    {
    }
}

Вместо создания сервера mbean, если я использую platformMBeanServer и зарегистрировал на нем свой mbean, я могу увидеть mbean в jconsole. Любая идея, что еще мне нужно сделать при создании createMBeanServer?

Ответы [ 4 ]

2 голосов
/ 08 марта 2012

Вчера я столкнулся с этим вопросом, но сумел разобраться с ним.Я потратил на это некоторое время, поэтому подумал, что этот пост будет полезен для экономии чужого времени.

Сначала вы можете зарегистрировать свои bean-компоненты в java-коде, как указано в вашем посте в методе main.Но я думаю, что намного проще, если вы используете Spring.

Проверьте эту ссылку для получения дополнительной информации;http://static.springsource.org/spring/docs/2.0.x/reference/jmx.html

Есть некоторые отверстия для петель, которые вам нужно избегать.Не запускайте два сервера MBeans в своем приложении.

Я использовал этот файл конфигурации:

<bean id="mbeanExporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
<property name="beans">
<map>
<entry key="bean:name=beanName" value-ref="dataSource"/>
</map>
</property>
  <property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING"/>
</bean>

Используйте эту конфигурацию, чтобы присоединить имя компонента к MBeanExporter.Убедитесь, что для 'lazy-init' установлено значение false.Обратите внимание, что я использую эту конфигурацию в веб-приложении.Веб-приложение развернуто внутри Tomcat.Так что у Tomcat уже есть MBean-сервер.Таким образом, вам не нужно предоставлять одно явно.Если вы запускаете его в автономном режиме, вам нужно запустить сервер MBean и настроить его соответствующим образом.

Обратите внимание, что вам необходимо добавить следующие свойства в файл catalina.bat tomcat.set CATALINA_OPTS = -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port = 8088 -Dcom.sun.management.jmxremote.ssl = false -Dcom.sun.management.jmxremote.authenticate = false -Dcom.sun.management.jmxremote.hostname = "localhost"

Порт соединителя Jmx в этом случае - 8088, а имя хоста - "localhost". После того, как вы запустили tomcat, вам нужно запустить jconsole (я не буду рассказывать, какзапустите его здесь) Затем нажмите «RemoteProcess» и введите «localhost: 8088» и подключитесь к серверу MBean Tomcat.Затем перейдите на вкладку MBean в jconsole, и вы увидите там свой MBean.

1 голос
/ 24 апреля 2014

Самое простое решение - использовать Platform MBean Server , настроенный через системные свойства .

Так что вам нужно MBeanServer экземпляр с

MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();

при запуске приложения установите следующие системные свойства:

-Dcom.sun.management.jmxremote.port=1919
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
0 голосов
/ 27 сентября 2013

Вам необходимо использовать PlatformMBeanServer

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

пс http://www.javalobby.org/java/forums/t49130.html

0 голосов
/ 21 марта 2013

Если вы хотите видеть свои MBeans в JConsole, вам придется использовать RMI. В основном, сделайте следующее

Registry registry = LocateRegistry.createRegistry(RMI_REGISTRY_PORT);
//... create your MBean Server here and add your MBeans...
Map<String, Object> env = new HashMap<String, Object>(); //Add authenticators and stuff to the environment.    

//Create a URL from which your beans will be accessible.    
JMXServiceURL jmxServiceURL = new JMXServiceURL("rmi", 
                                                "localhost", 
                                                CONNECTOR_SERVER_PORT, 
                                                "/jndi/rmi://localhost:" + RMI_REGISTRY_PORT + "myApp");

//Start the connector server
JMXConnectorServer connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(jmxServiceURL, env, server);
System.out.println(jmxServiceURL); //Use this URL to connect through JConsole, instead of selecting Local Process, just select the Remote process
...