<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一步步來] 9、基于JBoss來寫MBean

     文/陳剛  from www.chengang.com.cn at 2005-12-26
     
      前面都是用JDK自帶的JMX實(shí)現(xiàn)來寫的MBean,JMX的實(shí)現(xiàn)不獨(dú)SUN一家,JBOSS也有自己的JMX實(shí)現(xiàn)。如果你使用JBOSS來做WEB服務(wù)器,那么基于JBOSS的實(shí)現(xiàn)來寫MBean,是一個(gè)不錯(cuò)的選擇。象我們公司就是用JBOSS的,因此所有MBean都是基于JBoss來寫的。基于JBoss的MBean和基于SUN的MBean有什么不同嗎?有一些不同之外,但絕大部份都一樣。
     
      下面是我最早發(fā)的一篇關(guān)于JMX的文章,是我對公司所做項(xiàng)目的筆記,它上面的JMX例子就是基于JBOSS的。博客搬了幾次家,文章刪的刪丟的丟,但這篇文章還保留著,簡單修改一下,再帖上吧。

    一、  HelloWorld實(shí)例

    1、準(zhǔn)備工作

      JBOSS實(shí)現(xiàn)了JMX規(guī)范,這個(gè)實(shí)例是基于JBOSS來實(shí)現(xiàn)的。請先去下載一個(gè)JBOSS,我是jboss-3.2.6,下載地址:http://www.jboss.com/downloads/index#as。這個(gè)實(shí)例需要JBOSS的兩個(gè)JAR包的支持:jboss-system-3.2.6.jarjboss-jmx-3.2.6.jar,如果你和我一樣用Eclipse來開發(fā)(推薦),那么把這個(gè)兩個(gè)包加入到項(xiàng)目的庫引用中(加入到庫引用的方法參考前面兩章)。

    2、程序代碼

      假設(shè)我們有一個(gè)叫message的屬性要需要經(jīng)常進(jìn)行改動配置的,那么我們就把它寫成一個(gè)MBean

    1HelloWorldServiceMBean接口

      在寫MBean之前,我們先需要寫一個(gè)MBean接口,接口里的方法都是屬性的set/get方法。這個(gè)接口必須繼承接口ServiceMBean


    import org.jboss.system.ServiceMBean;
    public interface HelloWorldServiceMBean extends ServiceMBean {
        String getMessage();
        void setMessage(String message);
    }

    2HelloWorldService實(shí)現(xiàn)類

      然后寫出HelloWorldServiceMBean接口的實(shí)現(xiàn)類HelloWorldService,這個(gè)實(shí)現(xiàn)類還必須繼承ServiceMBeanSupport類。這種類再簡單不過了,就是屬性和相應(yīng)的set/get方法,EJB中叫實(shí)體類、Hibernate中叫POJO

    import org.jboss.system.ServiceMBeanSupport;
    public class HelloWorldService extends ServiceMBeanSupport implements HelloWorldServiceMBean {
        private String message;
        public String getMessage() {
            System.out.println("getMessage()=" + message);
            return message;
        }

        public void setMessage(String message) {
            System.out.println("setMessage(" + message + ")");
            this.message = message;
        }
    }

    3、配置文件jboss-service.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <server>
        <mbean code="example.mbean.HelloWorldService" name="www.chengang.com.cn:service=HelloWorld">
            <attribute name="Message">Hello World</attribute>
        </mbean>
    </server>

    說明:

    l code項(xiàng)指向MBean的實(shí)現(xiàn)類HelloWorldService
    l name項(xiàng)是一個(gè)名稱,格式一般是:[說明性文字]:service=[類名]
    l attribute是為屬性設(shè)置初始值,這樣當(dāng)JBOSS一加載HelloWorldService類時(shí),message屬性就有了一個(gè)初始值Hello World。注意Message的第一個(gè)字母必須是大寫。

    二、將實(shí)例部署到JBOSS

      在jboss-3.2.6\server\default\deploy目錄下創(chuàng)建一個(gè)hello.sar目錄,然后創(chuàng)建如下目錄文件結(jié)構(gòu):

    hello.sar
    |----example
    |            |----mbean
    |                    |----HelloWorldService.class  (注意:是*.class,不是*.java)
    |                    |----HelloWorldServiceMBean.class
    |----META-INF
                 |----jboss-service.xml

    其他說明:

    l 也可以將hello.sar目錄用zip格式壓縮成一個(gè)同名的hello.sar文件,放到jboss-3.2.6\server\default\deploy目錄下。
    l JBOSS支持熱部署,也就是說你在布置這個(gè)目錄時(shí)并不需要重啟JBOSS

    三、MBean的效果

    打開網(wǎng)址:http://127.0.0.1:8080/jmx-console/ ,出現(xiàn)下圖

    1135588829669_6124.jpg然后單擊“service=HelloWorld”項(xiàng)打開詳細(xì)頁面如下:

    1135588871713_5327.jpg

    將“HelloWorld”改成“Hello WorldChenGang”,再單擊“Apply Changes”應(yīng)用修改,得到如下效果:

    1135588893639_3324.jpg

    四、其他類如何使用Messag屬性

      現(xiàn)在我們可以通過一個(gè)自動提供的WEB頁面來設(shè)置Message屬性了,接下來的問題是:“在其他類中應(yīng)該如何得到Message的屬性值”。MBeanJBoss是只保留一個(gè)MBean的實(shí)例(單例模式?),也就是說問題轉(zhuǎn)成我們?nèi)绾稳ト〉眠@個(gè)唯一實(shí)例。例程如下:

    1、創(chuàng)建一個(gè)使用到Message屬性的類

    import org.jboss.mx.util.MBeanProxyExt;
    import org.jboss.mx.util.ObjectNameFactory;
    public class Client {
        public void go() {
            HelloWorldServiceMBean mbean = (HelloWorldServiceMBean) MBeanProxyExt.create(HelloWorldServiceMBean.class, ObjectNameFactory.create(www.chengang.com.cn:service=HelloWorld));
            String msg = mbean.getMessage();
            System.out.println("Client.go()=" + msg);
        }
    } 

    注意:go方法里是三句。第一句比較長,它是根據(jù)jboss-service.xml文件中設(shè)置的MBean名稱,來取得此MBeanJBOSS中的實(shí)例。

    2、在Mbean中加一個(gè)相應(yīng)的調(diào)用Client.go的方法

     在HelloWorldServiceMBean接口中加入一句:

    void callGo();

    HelloWorldService類中加入現(xiàn)實(shí)方法:

        public void callGo() {
            new Client().go();
        }

    3、更新布署

       將三個(gè)類的class文件:Clien.classHelloWorldServiceMBean.classHelloWorldService.class,更新到JBOSShello.sar\example\mbean目錄下。然后重啟JBOSS

    4、查看效果

       打開JBOSS提供的MBean設(shè)置頁面,如下,發(fā)現(xiàn)多了一個(gè)callGo

    1135589421532_8527.jpg

    單擊callGo項(xiàng)后的invoke按鈕,得到如下的DOS輸出:

    1135589435968_2575.jpg

    五、其他說明

    l 本實(shí)例僅演示了一個(gè)Message屬性,你當(dāng)然可以在HelloWorldService中加入更多屬性,別忘了在HelloWorldServiceMBean接口也加入相應(yīng)的set/get方法。
    l 本實(shí)例的message屬性是String類型的,但JMX也支持其他的類型,甚至是XML信息。對于jboss-service.xml中的XML信息,這時(shí)屬性類型要求是org.w3c.dom.ElementJMX將它封裝成了一個(gè)XMLDOM對象。
    l 回顧一下,JMX也是將配置信息寫在了一個(gè)文件(jboss-service.xml文件)里嘛,相對于將配置文件寫到*.properties文件的方式,它似乎也沒什么新鮮的地方。但通過本章實(shí)例我們可以看到JMX的一些好處:我們不用寫代碼去讀配置文件的信息,而且JMX支持的屬性類型是多種多樣的(如上面說的org.w3c.dom.Element)。更重要的是JMX還提供了一整套的屬性之前互相訪問、互相調(diào)用的功能,這個(gè)HelloWorld實(shí)例所反映的只是冰山一角而已。

    六、參考資料:http://www.huihoo.com/java/jmx/jmx_base.html 

    七、作者簡介

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

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

    評論

    # re: [JMX一步步來] 9、基于JBoss來寫MBean  回復(fù)  更多評論   

    看過了這9篇文章,感覺是在網(wǎng)上能夠搜索到的最清晰的JMX系列文章了。8過缺了一項(xiàng)內(nèi)容:如何實(shí)現(xiàn)自己的HtmlAdaptor。期待ing...
    其實(shí)這也是我的問題。現(xiàn)在手頭的系統(tǒng)里面正在添加JMX進(jìn)行管理,需要個(gè)性化的HtmlAdaptor和RmiConnector,一直苦于沒有太好的解決辦法。請賜教。
    MSN:james_zj@msn.com
    希望能和你交流JMX技術(shù)。
    2006-12-26 16:55 | 玉虎

    # re: [JMX一步步來] 9、基于JBoss來寫MBean[未登錄]  回復(fù)  更多評論   

    是陳大作者是吧 感覺你的Blog比你的書好哦
    頂了
    2008-01-03 17:19 | Allen
    主站蜘蛛池模板: 亚洲av无码专区国产不乱码| 一级毛片不卡片免费观看| 四虎成人免费网站在线| 亚洲校园春色小说| 在线电影你懂的亚洲| 中国一级特黄的片子免费 | 性短视频在线观看免费不卡流畅| 亚洲处破女AV日韩精品| 一个人看的www在线免费视频 | 亚洲偷自拍拍综合网| 国产亚洲精品美女久久久久久下载| 成人片黄网站A毛片免费| 亚洲欧洲国产成人精品| 222www在线观看免费| yy6080亚洲一级理论| 亚洲AV成人一区二区三区观看| 拍拍拍又黄又爽无挡视频免费| 亚洲人成电影在线观看青青| 24小时日本电影免费看| 亚洲理论精品午夜电影| 7x7x7x免费在线观看| 亚洲视频在线一区| 久久青青草原国产精品免费| 亚洲国产精品无码一线岛国| 中文字幕在线免费观看视频| 中国亚洲女人69内射少妇| 久久免费99精品国产自在现线| 免费观看男人免费桶女人视频| 国产精品亚洲自在线播放页码| 一二三四视频在线观看中文版免费| 亚洲AV无码国产丝袜在线观看| 韩日电影在线播放免费版| 国产精品亚洲一区二区三区在线 | 最近免费最新高清中文字幕韩国| 亚洲国产人成网站在线电影动漫| 一级毛片在线观看免费| 亚洲欧洲国产综合| 日韩欧美一区二区三区免费观看| 亚洲国产91在线| 日韩免费观看的一级毛片| 国产成人亚洲午夜电影|