2009-08-13 2 views
8

Я запускаю клиент-серверное приложение с помощью JBoss.Доступ к удаленному серверу MBean

Как подключиться к серверу JVM MBeanServer? Я хочу использовать MBMan MemoryMX для отслеживания потребления памяти.

Я могу подключиться к JBoss MBeanServer с помощью JNDI-поиска, но java.lang.MemoryMX MBean не зарегистрирован в JBoss MBeanServer.

EDIT: Требование предназначено для программного доступа к использованию памяти от клиента.

ответ

1

Вы пробовали запустить JConsole (есть $JAVA_HOME/bin) для подключения к серверу? Вы должны иметь возможность просматривать статистику памяти оттуда

+0

Да, это работает. Но я хочу программный доступ из своего клиентского приложения. Мой клиент может подключиться к серверу JBoss MBean, но я не знаю, как подключиться к серверу MBean платформы. – parkr

+0

Извинения - из вашего вопроса было непонятно, что программный доступ был требованием –

+1

Мои извинения :) – parkr

4

пример кода из статьи IBM: link

MBeanServerConnection serverConn; 

try { 
    //connect to a remote VM using JMX RMI 
    JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://<addr>"); 

    JMXConnector jmxConnector = JMXConnectorFactory.connect(url); 

    serverConn = jmxConnector.getMBeanServerConnection(); 

    ObjectName objName = new 
    ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME); 

    // Get standard attribute "VmVendor" 
    String vendor = 
    (String) serverConn.getAttribute(objName, "VmVendor"); 

} catch (...) { } 
15

Я написал класс как это:

import javax.management.remote.JMXServiceURL; 
import javax.management.MBeanAttributeInfo; 
import javax.management.MBeanInfo; 
import javax.management.MBeanServerConnection; 
import javax.management.ObjectName; 
import javax.management.remote.JMXConnector; 
import javax.management.remote.JMXConnectorFactory; 

public class JVMRuntimeClient 
{ 
    static void main(String[] args) throws Exception 
    { 
     if (args == null) 
    { 
     System.out.println("Usage: java JVMRuntimeClient HOST PORT"); 
    } 
    if(args.length < 2) 
    { 
     System.out.println("Usage: java JVMRuntimeClient HOST PORT"); 
    } 

    try 
    { 
     JMXServiceURL target = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://"+args[0]+":"+args[1]+"/jmxrmi"); 
     JMXConnector connector = JMXConnectorFactory.connect(target); 
     MBeanServerConnection remote = connector.getMBeanServerConnection(); 

     /** 
     * this is the part where you MUST know which MBean to get 
     * com.digitalscripter.search.statistics:name=requestStatistics,type=RequestStatistics 
     * YOURS WILL VARY! 
     */ 
     ObjectName bean = new ObjectName("com.digitalscripter.search.statistics:name=requestStatistics,type=RequestStatistics"); 

     MBeanInfo info = remote.getMBeanInfo(bean); 
     MBeanAttributeInfo[] attributes = info.getAttributes(); 
     for (MBeanAttributeInfo attr : attributes) 
     { 
      System.out.println(attr.getDescription() + " " + remote.getAttribute(bean,attr.getName())); 
     } 
     connector.close(); 
    } 
    catch(Exception e) 
    { 
     System.out.println(e.getMessage()); 
     System.exit(0); 
    } 
    } 
} 
+0

Только что URL-адрес службы JMX был решен * моя * проблема - спасибо! –

Смежные вопросы