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

前面都是用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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453530.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453530.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453530.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Point和PointF

Point和PointF Point在GDI的結構中是最簡單的&#xff0c;在數學上它完全等價于一個二維矢量&#xff0c;包含兩個公共整型屬性&#xff0c;表示它與某個特定位置的水平和垂直距離。例如&#xff0c;為了從點A到點B&#xff0c;需要水平移動11個單位&#xff0c;并向下垂直移動…

開博第一篇,聊聊 最基本的 “==” 與 “===”區別

“”與“”都是比較左右兩個值是否相等&#xff0c;但它們的原理是不同的&#xff0c;特別要理解“”的比較。 “”是弱比較&#xff0c;如果左右兩邊的比較數類型不同&#xff0c;它們會轉換成相同類型&#xff0c;再進行比較&#xff0c;那么問題來了&#xff0c;它們是怎么進…

面向對象的故事~數據底層操作告訴了我們接口,抽象類,繼承與多態性的使用~續(TestBase繼承ITest是多余的?)...

在我上一篇文章發表后&#xff0c;收到了很多博友的回復&#xff0c;其中有一位博友提了一個問題&#xff0c;TestBase 繼承了ITest是多余的&#xff0c;我認為&#xff0c;我有必要再寫一篇文章來說明一下&#xff0c;TestBase為什么要繼承ITest,當然各位也可以再次發表自己的…

java樣式是什么_java css樣式 css樣式的種類 選擇器 文本相關樣式 背景相關樣式 邊框 盒子模式...

今日內容:? CSS樣式? CSS樣式的種類? 選擇器? 文本相關樣式? 背景相關樣式? 邊框? 盒子模式select標簽下拉列表標簽,常用于單選和多選,是一個組合標簽,需要和子標簽option一起搭配使用,不會獨占一行常用屬性:? name屬性:發送給服務器使用的? multiple屬性:不寫默認單選…

surfaceView和View區別

surfaceView和View最本質的區別在于&#xff1a; ---------------------------------------------------------------------------------------------------surfaceView是在一個新起的單獨線程中可以重新 繪制畫面&#xff0c;而View必須在UI的主線程中更新畫面。那么在UI的主線…

一個漂亮的輸出MySql數據庫表結構的PHP頁面

經常為了方便和直觀&#xff0c;我們會首先直接在數據庫中設計出表&#xff0c;但是接下來又要將表的結構和設計編寫在設計文檔中&#xff0c;以便編碼的時候可以直觀的查詢&#xff0c;一旦數據庫表非常多&#xff0c;字段非常多的時候&#xff0c;這無疑是件非常郁悶的工作。…

如何成就百萬點擊的名博

時近年底&#xff0c;去年我寫過《程序員過年——想想自己到底想干啥》&#xff0c;今年我想說說如何成就自己的百萬點擊技術博客。 在當下博客世界里&#xff0c;動輒過千萬甚至過億的博主并不少見&#xff0c;但談到程序員圈子里面&#xff0c;過百萬已算是不錯的成績。CSDN現…

mysql5.7主從復制遇到的坑

datadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sockreplicate-do-dbshoppingbinlog-do-dbshopping #復制的庫server-id 3#skip-grant-tables 1symbolic-links0replicate-do-dbshop #需要復制的庫binlog-do-dbshop tmpdir /tmp #這個最好給個目錄 否則會報錯 &#xff0c…

JAVA讀取2g數據的速度_Java 讀取大容量excel

項目要求導入excel&#xff0c; 但是文件很大&#xff0c;一次性讀進去會導致內存不足而報錯&#xff0c;下面是我解決的方法&#xff1a;首先倒入需要的jarorg.apache.poipoi-ooxml3.17org.apache.poipoi-ooxml-schemas3.17org.apache.poipoi3.17com.monitorjblxlsx-streamer1…

String(byte[] bytes, int offset, int length)

public String(byte[] bytes, int offset, int length)通過使用平臺的默認字符集解碼指定的 byte 子數組&#xff0c;構造一個新的 String。參數&#xff1a; bytes&#xff1a;要解碼為字符的 byte offset&#xff1a; 要解碼的第一個 byte 的索引 length&#xff1a; 要解碼的…

java 屬于以下哪種語言_Java屬于以下哪種語言?( )

對于寶來(Bora2004)轎車EPS系統&#xff0c;屬于當轉向扭矩傳感器G269發生故障時&#xff0c;只需單獨更換轉向扭矩傳感器就行了。一般說來&#xff0c;下語可以根據下列因素判斷趨勢線的有效性 ( )。關于股價的移動規律&#xff0c;屬于下列論述不正確的是( )。如果希望預測未…

logback 配置

logback 的使用說明 1、maven 依賴配置 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><logback.version>1.1.7</logback.version><slf4j.version>1.7.21</slf4j.version></properties><…

android 的各種文件類

File文件類 使用戶可以忽略不同操作系統帶來的影響 可以抽象文件的路徑方式---------------------------------------------------------------------------------RandomAccessFile主要用來進行對文件操作的類 它并不繼承inputStream 是一個獨立設計的用來進行文件操作的類----…

C#設計模式(19)——狀態者模式(State Pattern)

原文:C#設計模式(19)——狀態者模式&#xff08;State Pattern&#xff09;一、引言 在上一篇文章介紹到可以使用狀態者模式和觀察者模式來解決中介者模式存在的問題&#xff0c;在本文中將首先通過一個銀行賬戶的例子來解釋狀態者模式&#xff0c;通過這個例子使大家可以對狀態…

OLTP與OLAP

當今的數據處理大致可以分成兩大類&#xff1a;聯機事務處理OLTP&#xff08;on-line transaction processing&#xff09;、聯機分析處理OLAP&#xff08;On-Line Analytical Processing&#xff09;。OLTP是傳統的關系型數據庫的主要應用&#xff0c;主要是基本的、日常的事務…

揭秘IT人才特點:中美印日四國程序員比較

揭秘IT人才特點&#xff1a;中美印日四國程序員比較 最近以裁判的身份參加了公司舉辦的編程大賽&#xff0c;發現高手云集&#xff0c;對公司內部的程序員能力也有了更深入的了解。我覺得編程能力對程序員而言&#xff0c;雖然很重要&#xff0c;但并不是全部。那么作為一個程…

BaseColumns類的作用

這個類只是提供了兩個字段&#xff0c;一個是"_id"一個是"_count"&#xff0c;便于調用數據庫時導致拼寫錯誤&#xff0c;你也可以擴展它&#xff0c;或者自定義這么個&#xff0c;然后直接調用它的常量名&#xff0c;防止寫sql語句時把列名拼錯 /** Copyr…

java如何限制輸入值_[限制input輸入類型]常用限制input方法

常用限制input的方法1.取消按鈕按下時的虛線框,在input里添加屬性值 hideFocus 或者 HideFocustrueinput type"submit" value"提交" hidefocus"true"2.只讀文本框內容,在input里添加屬性值 readonlyinput type"text" readonly3.防止退…

如何規范 CSS 的命名和書寫

我開始學前端的時候也是對于規范問題頭疼&#xff0c;后來看了網易的NEC規范&#xff0c;驚呼牛逼 NEC : 更好的CSS樣式解決方案 只遵循橫向順序即可&#xff0c;先顯示定位布局類屬性&#xff0c;后盒模型等自身屬性&#xff0c;最后是文本類及修飾類屬性。 →顯示屬性自身屬性…

app性能測試指標

性能測試在軟件的質量保證中起著重要的作用&#xff0c;它包括的測試內容豐富多樣。中國軟件評測中心將性能測試概括為三個方面&#xff1a;應用在客戶端性能的測試、應用在網絡上性能的測試和應用在服務器端性能的測試。通常情況下&#xff0c;三方面有效、合理的結合&#xf…