8、編寫程式來串連MBean

來源:互聯網
上載者:User

 8、編寫程式來串連MBean

前面用Html、jconsole等方法串連上了MBeanServer,並能夠通過這些介面來操縱MBean。但有時我們需要不藉助這些用戶端,而是在自己的程式來操縱這些MBean,這就要求我們知道如何在代碼裡串連MBean。

   基於上一篇為jconsole而修改的例子,給出一個樣本的用戶端程式,基本的操作都有了:

import java.util.Iterator;
import java.util.Set;
import javax.management.Attribute;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class Client {
    public static void main(String[] args) throws Exception {
        JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
        JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
        MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
        ObjectName mbeanName = new ObjectName("chengang:name=HelloWorld");
        //把所有Domain都列印出來
        System.out.println("Domains:---------------");
        String domains[] = mbsc.getDomains();
        for (int i = 0; i < domains.length; i++) {
            System.out.println("/tDomain[" + i + "] = " + domains[i]);
        }
        //MBean的總數
        System.out.println("MBean count = " + mbsc.getMBeanCount());
        //對name屬性的操作(屬性名稱的第一個字母要大寫)
        mbsc.setAttribute(mbeanName, new Attribute("Name", "Chen.Gang"));//設值
        System.out.println("Name = " + mbsc.getAttribute(mbeanName, "Name"));//取值
        //得到proxy代理後直接調用的方式
        HelloMBean proxy = (HelloMBean) MBeanServerInvocationHandler.newProxyInstance(mbsc, mbeanName, HelloMBean.class, false);
        proxy.printHello();
        proxy.printHello("陳剛");
        //遠程調用的方式
        mbsc.invoke(mbeanName, "printHello", null, null);
        mbsc.invoke(mbeanName, "printHello", new Object[] { "子在川上曰" }, new String[] { String.class.getName() });
        //得mbean的資訊
        MBeanInfo info = mbsc.getMBeanInfo(mbeanName);
        System.out.println("Hello Class: " + info.getClassName());
        System.out.println("Hello Attriber:" + info.getAttributes()[0].getName());
        System.out.println("Hello Operation:" + info.getOperations()[0].getName());
        //得到所有的MBean的ObjectName
        System.out.println("all ObjectName:---------------");
        Set set = mbsc.queryMBeans(null, null);
        for (Iterator it = set.iterator(); it.hasNext();) {
            ObjectInstance oi = (ObjectInstance) it.next();
            System.out.println("/t" + oi.getObjectName());
        }
        //登出
        //mbsc.unregisterMBean(mbeanName);
        //關閉MBeanServer串連
        jmxc.close();
    }
}
運行後的效果如下:Domains:---------------
 Domain[0] = HelloAgent
 Domain[1] = JMImplementation
 Domain[2] = chengang
MBean count = 3
Name = Chen.Gang
Hello Class: mbean.connector.Hello
Hello Attriber:Name
Hello Operation:printHello
all ObjectName:---------------
 chengang:name=HelloWorld
 JMImplementation:type=MBeanServerDelegate
 HelloAgent:name=htmladapter,port=8082   它有兩個Console輸出,這裡是另一個Hello World, Chen.Gang
Hello , 陳剛
Hello World, Chen.Gang
Hello , 子在川上曰
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.