2009-08-13 30 views
8

JBoss kullanarak bir istemci/sunucu uygulaması çalıştırıyorum.Uzak bir MBean sunucusuna erişme

JVM'nin MBeanServer sunucusuna nasıl bağlanabilirim? Bellek tüketimini izlemek için MemoryMX MBean'ı kullanmak istiyorum.

JNDI araması kullanarak JBoss MBeanServer'a bağlanabiliyorum ama java.lang.MemoryMX MBean, JBoss MBeanServer ile kayıtlı değil.

DÜZENLEME: Gereksinim, istemciden bellek kullanımına programlı erişim içindir.

cevap

1

Sunucuya bağlanmak için JConsole ($JAVA_HOME/bin) başlatmayı denediniz mi? Sen bir IBM makalesinden orada

+0

Evet, onlar olur. Ancak istemci uygulamamdan programlı erişim istiyorum. Müvekkilim JBoss MBean sunucusuna bağlanabilir, ancak platform MBean sunucusuna nasıl bağlanacağımı bilmiyorum. – parkr

+0

Özür dileriz - programatik erişimin bir gereklilik olduğu sorusundan net değildi –

+1

Özür dilerim :) – parkr

4

bir kod örneği bellek Durumu görüntülemek mümkün olmalıdır:

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

Böyle bir sınıf yazdı:

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

Sadece JMX servis URL'sinin çözülmesi * my * problem - teşekkürler! –