<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    子在川上曰

      逝者如斯夫不舍晝夜
    隨筆 - 71, 文章 - 0, 評論 - 915, 引用 - 0
    數(shù)據(jù)加載中……

    [JMX一步步來] 3、Notification的使用

    文/陳剛 from www.chengang.com.cn at 2005-12-4
     
    一、簡介
     
      Mbean之間的通信是必不可少的,Notification就起到了在Mbean之間溝通橋梁的作用。JMX notification 由四部分組成:
    • Notification 這個相當(dāng)于一個信息包,封裝了需要傳遞的信息
    • Notification broadcaster 這相當(dāng)于一個廣播器,把消息廣播出去
    • Notification listerner 這是一個監(jiān)聽器,用于監(jiān)聽廣播出來的Notification消息
    • Notification filter 這是一個過濾器,過濾掉不需要的Notification消息
      Notification broadcaster不需要我們實現(xiàn),JMX的內(nèi)部已經(jīng)有了。Notification filter一般也很少用。下面的例子主要用到了Notification、Notification listerner。

    二、實例
     
      在第一篇的Hello中有一個printHello(String whoName)方法,意思根據(jù)碰到的是誰來打招呼,比如:
      
      Jack從對面走過來,說:“hi”
      我們回之以禮,說:“Hello, jack”
     
      首先這需要Jack先說一個hi(相應(yīng)一個操作方法),然后他說的話封裝成聲波(相當(dāng)Notification消息包)傳遞出去。然后我們還要給Jakc裝上一個監(jiān)聽器(Hello的耳朵??^_^),這個監(jiān)聽器將捕捉到Jack的聲波語音包,并進(jìn)行相應(yīng)處理,即說“Hello, jack”。
     
      好,我們看看如何實現(xiàn)的:
     
    1、Jack類及其相應(yīng)的MBean
     
       我們把Jack寫成一個MBean,如下: 
    import javax.management.Notification;
    import javax.management.NotificationBroadcasterSupport;
    public class Jack extends NotificationBroadcasterSupport implements JackMBean {
        private int seq = 0;
        public void hi() {
            Notification n = new Notification(//創(chuàng)建一個信息包
                    "jack.hi",//給這個Notification起個名稱
                    this, //由誰發(fā)出的Notification
                    ++seq,//一系列通知中的序列號,可以設(shè)任意數(shù)值
                    System.currentTimeMillis(),//發(fā)出時間
                    "Jack");//發(fā)出的消息文本
            //發(fā)出去
            sendNotification(n);
        }
    }
     
     說明:
    • 必需繼承NotificationBroadcasterSupport
    • 此類只有一個hi方法,方法只有兩句:創(chuàng)建一個Notification消息包,然后將包發(fā)出去
    • 如果你還要在消息包上附加其他數(shù)據(jù),Notification還有一個setUserData方法可供使用
    2、接下來是他的MBean 
    public interface JackMBean {
        public void hi();
    }
     
    3、創(chuàng)建一個Listener,監(jiān)聽到的Notification消息包將由此類負(fù)責(zé)處理。
     
    import javax.management.Notification;
    import javax.management.NotificationListener;
    public class HelloListener implements NotificationListener {
        public void handleNotification(Notification n, Object handback) {
            System.out.println("type=" + n.getType());
            System.out.println("source=" + n.getSource());
            System.out.println("seq=" + n.getSequenceNumber());
            System.out.println("send time=" + n.getTimeStamp());
            System.out.println("message=" + n.getMessage());
            if (handback != null) {
                if (handback instanceof Hello) {
                    Hello hello = (Hello) handback;
                    hello.printHello(n.getMessage());
                }
            }
        }
    }
     
    4、修改HelloAgent如下(加上了紅色的三句):
    import javax.management.MBeanServer;
    import javax.management.MBeanServerFactory;
    import javax.management.ObjectName;
    import com.sun.jdmk.comm.HtmlAdaptorServer;
    public class HelloAgent {
        public static void main(String args[]) throws Exception{
            MBeanServer server = MBeanServerFactory.createMBeanServer();
            ObjectName helloName = new ObjectName("chengang:name=HelloWorld");
            Hello hello=new Hello();
            server.registerMBean(hello, helloName);
            ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082");
            HtmlAdaptorServer adapter = new HtmlAdaptorServer();
            server.registerMBean(adapter, adapterName);
            Jack jack = new Jack();
            server.registerMBean(jack, new ObjectName("HelloAgent:name=jack"));
            jack.addNotificationListener(new HelloListener(), null, hello);
            adapter.start();
            System.out.println("start.....");
        }
    }
     
    三、運(yùn)行 
    1、先運(yùn)行HelloAgent啟動服務(wù),再打開瀏覽器輸入網(wǎng)址:http://localhost:8082/,出現(xiàn)如下界面。1133701664014_6541.jpg
     
    2、 進(jìn)入“name=jack”項,然后單擊“hi”按鈕來執(zhí)行它。這時Eclipse的console視圖顯示如下:
     
    1133702044916_7117.jpg

    四、總結(jié)

      Notification和Java的事件模型是一樣的,另外如果你買了《Eclipse從入門到精通》,你會發(fā)現(xiàn)第22.4節(jié)也使用了和Notification和Java的事件模型相同的設(shè)計方式。Notification在我們的實際項目中也用到了,象我們現(xiàn)在的給移動做的項目中(基于JMX實現(xiàn)),分散在各地方的工作站的日志,就是通過Notification方式,把每條產(chǎn)生的日志封裝在Notification中實時發(fā)回主控服務(wù)器的。有機(jī)會我會發(fā)這一系統(tǒng)的關(guān)于日志的設(shè)計方案寫一下,它實現(xiàn)了對各地工作站的集中的、實時的監(jiān)控,非常實用。

    作者簡介

    陳剛,廣西桂林人,著作有《Eclipse從入門到精通》
    您可以通過其博客了解更多信息和文章:http://www.chenGang.com.cn

    posted on 2006-03-07 15:01 陳剛 閱讀(6416) 評論(3)  編輯  收藏 所屬分類: JMX

    評論

    # re: [JMX一步步來] 3、Notification的使用  回復(fù)  更多評論   

    hi,你的文章挺好,就是圖片能不能看下,都不顯示
    2009-01-30 11:03 | piper

    # re: [JMX一步步來] 3、Notification的使用  回復(fù)  更多評論   

    謝謝,我看了你的jmx系列文章,學(xué)了很多東西,還會繼續(xù)關(guān)注
    2009-02-20 16:26 | mengyan

    # re: [JMX一步步來] 3、Notification的使用  回復(fù)  更多評論   

    然后我們還要給Jakc裝上一個監(jiān)聽器(Hello的耳朵??^_^),這個監(jiān)聽器將捕捉到Jack的聲波語音包,并進(jìn)行相應(yīng)處理,即說“Hello, jack”。


    為什么是給Jack裝上一個監(jiān)聽器
    2012-11-30 16:49 | 特太太
    主站蜘蛛池模板: 久久免费的精品国产V∧| 成年女人视频网站免费m| 亚洲精品国产手机| 女人18毛片a级毛片免费视频| 国产成人亚洲综合a∨| 国产AV无码专区亚洲AV漫画| 无码精品一区二区三区免费视频| 激情综合亚洲色婷婷五月| 亚洲日韩VA无码中文字幕| 8090在线观看免费观看| 亚洲JLZZJLZZ少妇| 久久精品国产亚洲香蕉| 国产麻豆剧传媒精品国产免费| 国产综合免费精品久久久| 精品亚洲成A人无码成A在线观看| 亚洲精品无码日韩国产不卡?V| 最近中文字幕2019高清免费| 一个人看的免费观看日本视频www| 亚洲视频在线观看| 哒哒哒免费视频观看在线www| 久久久久久夜精品精品免费啦| 狠狠入ady亚洲精品| 亚洲黄色网站视频| 亚洲中文字幕成人在线| 又黄又爽又成人免费视频| 两个人日本免费完整版在线观看1| tom影院亚洲国产一区二区| 日韩亚洲人成在线综合日本| 日韩成人免费视频播放| 91福利免费体验区观看区| 日本一区二区三区在线视频观看免费 | 天天摸天天操免费播放小视频| 日韩精品无码免费专区午夜不卡| 亚洲成a人片在线观看天堂无码| 亚洲日本一区二区三区| 亚洲性日韩精品国产一区二区| 麻豆精品国产免费观看| 国产91免费在线观看| 全免费a级毛片免费看| 成人免费乱码大片A毛片| 人妻仑刮八A级毛片免费看|