2009-08-13 18 views
8

Używam aplikacji klient/serwer przy użyciu JBoss.Uzyskiwanie dostępu do zdalnego serwera MBean

Jak mogę połączyć się z serwerem MBean serwera JVM? Chcę użyć MBean MemoryMX do śledzenia zużycia pamięci.

Mogę połączyć się z serwerem MBB JBoss przy użyciu wyszukiwania JNDI, ale komponent MBean java.lang.MemoryMX nie jest zarejestrowany w komponencie MBBServer JBoss.

EDYCJA: Wymaganie dotyczy automatycznego dostępu do pamięci z klienta.

Odpowiedz

1

Czy próbowałeś uruchomić JConsole (czy jest $JAVA_HOME/bin), aby połączyć się z serwerem? Trzeba mieć możliwość przeglądania statystyk pamięci stamtąd

+0

Tak, to działa. Ale chcę programistyczny dostęp z mojej aplikacji klienckiej. Mój klient może połączyć się z serwerem MBB JBoss, ale nie wiem, jak połączyć się z serwerem MBean platformy. – parkr

+0

Przeprosiny - nie było jasne z twojego pytania, że ​​programowy dostęp był wymagany. –

+1

Moje przeprosiny :) – parkr

4

przykład kodu z artykułu 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

napisałem klasę tak:

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

Po rozwiązaniu adresu URL usługi JMX * mój * problem - dziękuję! –

Powiązane problemy