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

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

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

    子在川上曰

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

    [JMX一步步來] 9、基于JBoss來寫MBean

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

    一、  HelloWorld實例

    1、準備工作

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

    2、程序代碼

      假設我們有一個叫message的屬性要需要經常進行改動配置的,那么我們就把它寫成一個MBean

    1HelloWorldServiceMBean接口

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


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

    2HelloWorldService實現類

      然后寫出HelloWorldServiceMBean接口的實現類HelloWorldService,這個實現類還必須繼承ServiceMBeanSupport類。這種類再簡單不過了,就是屬性和相應的set/get方法,EJB中叫實體類、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項指向MBean的實現類HelloWorldService
    l name項是一個名稱,格式一般是:[說明性文字]:service=[類名]
    l attribute是為屬性設置初始值,這樣當JBOSS一加載HelloWorldService類時,message屬性就有了一個初始值Hello World。注意Message的第一個字母必須是大寫。

    二、將實例部署到JBOSS

      在jboss-3.2.6\server\default\deploy目錄下創建一個hello.sar目錄,然后創建如下目錄文件結構:

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

    其他說明:

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

    三、MBean的效果

    打開網址:http://127.0.0.1:8080/jmx-console/ ,出現下圖

    1135588829669_6124.jpg然后單擊“service=HelloWorld”項打開詳細頁面如下:

    1135588871713_5327.jpg

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

    1135588893639_3324.jpg

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

      現在我們可以通過一個自動提供的WEB頁面來設置Message屬性了,接下來的問題是:“在其他類中應該如何得到Message的屬性值”。MBeanJBoss是只保留一個MBean的實例(單例模式?),也就是說問題轉成我們如何去取得這個唯一實例。例程如下:

    1、創建一個使用到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方法里是三句。第一句比較長,它是根據jboss-service.xml文件中設置的MBean名稱,來取得此MBeanJBOSS中的實例。

    2、在Mbean中加一個相應的調用Client.go的方法

     在HelloWorldServiceMBean接口中加入一句:

    void callGo();

    HelloWorldService類中加入現實方法:

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

    3、更新布署

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

    4、查看效果

       打開JBOSS提供的MBean設置頁面,如下,發現多了一個callGo

    1135589421532_8527.jpg

    單擊callGo項后的invoke按鈕,得到如下的DOS輸出:

    1135589435968_2575.jpg

    五、其他說明

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

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

    七、作者簡介

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

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

    評論

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

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

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

    是陳大作者是吧 感覺你的Blog比你的書好哦
    頂了
    2008-01-03 17:19 | Allen
    主站蜘蛛池模板: 亚洲A∨精品一区二区三区| 成年女人视频网站免费m| 亚洲综合激情另类专区| 麻豆亚洲AV成人无码久久精品 | 亚洲av无码国产精品色在线看不卡 | 天堂亚洲免费视频| 亚洲精品无码永久在线观看| 日韩在线观看视频免费 | 亚洲人成中文字幕在线观看| 一区二区三区精品高清视频免费在线播放| 日本免费中文字幕在线看| jzzijzzij在线观看亚洲熟妇| 国产乱子影视频上线免费观看| 午夜亚洲国产理论片二级港台二级| 国产又大又粗又硬又长免费| 无码日韩人妻AV一区免费l| 精品国产亚洲男女在线线电影 | 国产在线jyzzjyzz免费麻豆| 国产亚洲玖玖玖在线观看| 免费看又爽又黄禁片视频1000| 亚洲第一se情网站| 亚洲另类激情综合偷自拍图| 美女被cao网站免费看在线看| 亚洲天堂男人天堂| 91情侣在线精品国产免费| 亚洲狠狠婷婷综合久久蜜芽| 亚洲XX00视频| 在线观看免费无码专区| 亚洲精品视频在线免费| 日韩免费一区二区三区| 国产成人精品免费视频大全| 亚洲一区二区三区电影| 成人午夜18免费看| 韩日电影在线播放免费版| 亚洲综合视频在线观看| 国内外成人免费视频| 一级有奶水毛片免费看| 亚洲区视频在线观看| 午夜亚洲国产成人不卡在线| 四虎国产成人永久精品免费| 亚洲日本久久久午夜精品|