JBoss之MBean執行個體

來源:互聯網
上載者:User

用JDK內建的JMX實現來寫的MBean,JMX的實現不獨SUN一家,JBoss也有自己的JMX實現。如果你使用JBoss來做WEB伺服器,那麼基於JBoss的實現來寫MBean,是一個不錯的選擇。象我們公司就是用JBoss的,因此所有MBean都是基於JBoss來寫的。基於JBoss的MBean和基於SUN的MBean有什麼不同嗎?有一些不同之外,但絕大部份都一樣。

一、 HelloWorld執行個體

1、準備工作
JBOSS實現了JMX規範,這個執行個體是基於JBoss來實現的。請先去下載一個JBoss,我是JBoss-3.2.6,這個執行個體需要JBoss的兩個JAR包的支援:jboss-system-3.2.6.jar、jboss-jmx-3.2.6.jar,如果你和我一樣用Eclipse來開發(推薦),那麼把這個兩個包加入到項目的庫引用中(加入到庫引用的方法參考前面兩章)。

2、程式碼
假設我們有一個叫message的屬性要需要經常進行改動配置的,那麼我們就把它寫成一個MBean。

1)、HelloWorldServiceMBean介面
在寫MBean之前,我們先需要寫一個MBean介面,介面裡的方法都是屬性的set/get方法。這個介面必須繼承介面ServiceMBean。
java 代碼

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

2)、HelloWorldService實作類別
然後寫出HelloWorldServiceMBean介面的實作類別HelloWorldService,這個實作類別還必須繼承ServiceMBeanSupport類。這種類再簡單不過了,就是屬性和相應的set/get方法,EJB中叫實體類、Hibernate中叫POJO。
java 代碼

  1. import org.jboss.system.ServiceMBeanSupport;
  2. public class HelloWorldService extends ServiceMBeanSupport

    implements HelloWorldServiceMBean {

    1. private String message;
    2. public String getMessage() {
    3. System.out.println("getMessage()=" + message);
    4. return message;
    5. }
    6.  
    7.  
    8. public void setMessage(String message) {
    9. System.out.println("setMessage(" + message + ")");
    10. this.message = message;
    11. }
}
  1. xml version="1.0" encoding="UTF-8"?>
  2. <server>
  3. <mbean code="example.mbean.HelloWorldService"

    name="www.chengang.com.cn:service=HelloWorld">

    1. <attribute name="Message">Hello Worldattribute>
    2. mbean>
server>

說明:
◆code項指向MBean的實作類別HelloWorldService
◆name項是一個名稱,格式一般是:[說明性文字]:service=[類名]
◆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

其他說明:
◆也可以將hello.sar目錄用zip格式壓縮成一個同名的hello.sar檔案,放到jboss-3.2.6\server\default\deploy目錄下。
◆JBOSS支援熱部署,也就是說你在布置這個目錄時並不需要重啟JBOSS。

三、MBean的效果

後單擊“service=HelloWorld”項開啟詳細頁面

將“HelloWorld”改成“Hello World,ChenGang”,再單擊“Apply Changes”應用修改

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

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

1、建立一個使用到Message屬性的類

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.