2009-08-13 18 views
8

एक्सेस करना मैं जेबॉस का उपयोग कर क्लाइंट/सर्वर एप्लिकेशन चला रहा हूं।रिमोट एमबीएएन सर्वर

मैं सर्वर JVM के MBeanServer से कैसे कनेक्ट कर सकता हूं? मैं स्मृति खपत को ट्रैक करने के लिए मेमोरीएमएक्स एमबीन का उपयोग करना चाहता हूं।

मैं जेएनडीआई लुकअप का उपयोग कर जेबॉस एमबीनसेवर से कनेक्ट कर सकता हूं लेकिन java.lang.MemoryMX MBean JBoss MBeanServer के साथ पंजीकृत नहीं है।

संपादित करें: आवश्यकता क्लाइंट से स्मृति उपयोग के लिए प्रोग्रामेटिक पहुंच के लिए है।

उत्तर

5

JBoss सर्वर के MBeanServer के विपरीत, JVM के MBean सर्वर डिफ़ॉल्ट रूप से दूरदराज के निगरानी की अनुमति नहीं है। आपको लगता है कि अनुमति देने के लिए विभिन्न प्रणाली गुणों को सेट करने की जरूरत है:

http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html

1

क्या आपने सर्वर से कनेक्ट करने के लिए JConsole ($JAVA_HOME/bin) लॉन्च करने का प्रयास किया है? आप एक आईबीएम लेख से वहाँ

+0

हां, यह काम करता है। लेकिन मैं अपने क्लाइंट एप्लिकेशन से प्रोग्रामेटिक एक्सेस चाहता हूं। मेरा ग्राहक जेबॉस एमबीएएन सर्वर से कनेक्ट हो सकता है, लेकिन मुझे नहीं पता कि मंच एमबीएएन सर्वर से कैसे कनेक्ट किया जाए। – parkr

+0

माफी - यह आपके प्रश्न से स्पष्ट नहीं था कि प्रोग्रामेटिक पहुंच एक आवश्यकता थी –

+1

मेरी माफ़ी :) :) – parkr

4

एक कोड उदाहरण से स्मृति आँकड़े देखने के लिए सक्षम होना चाहिए: 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

बस जेएमएक्स सेवा यूआरएल हल हो रहा है * मेरी * समस्या - धन्यवाद! –

संबंधित मुद्दे