2009-08-13 14 views
8

Estoy ejecutando una aplicación cliente/servidor utilizando JBoss.Acceso a un servidor MBean remoto

¿Cómo me puedo conectar al servidor de JVM MBeanServer? Quiero usar el MBean de MemoryMX para rastrear el consumo de memoria.

Puedo conectarme al JBoss MBeanServer utilizando la búsqueda JNDI, pero el MBean java.lang.MemoryMX no está registrado con el JBoss MBeanServer.

EDITAR: El requisito es para el acceso programático al uso de memoria del cliente.

Respuesta

1

¿Ha intentado ejecutar un JConsole (es $JAVA_HOME/bin) para conectarse con el servidor? Usted debe ser capaz de ver las estadísticas de memoria a partir de ahí

+0

Sí, eso funciona. Pero quiero acceso programático desde mi aplicación cliente. Mi cliente puede conectarse al servidor JBoss MBean, pero no sé cómo conectarme al servidor MBean de la plataforma. – parkr

+0

Disculpas: no quedó claro por su pregunta que el acceso programático era un requisito –

+1

Mis disculpas :) – parkr

4

Un ejemplo de código de un artículo de 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

escribí una clase como esta:

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

Simplemente solucioné el problema de la URL del servicio JMX * mi * problema - ¡gracias! –

Cuestiones relacionadas