hengheng123456789

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks
          來源:http://www.aygfsteel.com/chengang/archive/2006/03/07/34091.html

          一、? 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。

          1、HelloWorldServiceMBean接口

            在寫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/ ,出現下圖

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



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

          ?

          四、其他類如何使用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.class、HelloWorldService.class,更新到JBOSShello.sar\example\mbean目錄下。然后重啟JBOSS。

          4、查看效果

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



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

          ?

          五、其他說明

          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 

          posted on 2006-12-12 16:40 哼哼 閱讀(1002) 評論(1)  編輯  收藏 所屬分類: JMX

          Feedback

          # re: 基于JBoss來寫MBean (轉)[未登錄] 2009-06-06 13:33 菜鳥
          有沒有Eclipse的插件,可以直接開發JBoss的MBean  回復  更多評論
            

          主站蜘蛛池模板: 高阳县| 开化县| 大方县| 买车| 武汉市| 伊吾县| 洞头县| 桂林市| 县级市| 涿州市| 松滋市| 昌都县| 庄浪县| 海晏县| 聂荣县| 彝良县| 隆化县| 巨鹿县| 定西市| 商城县| 崇明县| 山西省| 乌鲁木齐市| 广饶县| 磐石市| 平塘县| 姜堰市| 皮山县| 嘉兴市| 宣威市| 永修县| 呈贡县| 彭水| 汤原县| 和平县| 天水市| 阿尔山市| 长岛县| 济阳县| 泗水县| 芦溪县|