前面都是用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.jar、jboss-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);
}

2、HelloWorldService实现类

  然后写出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的属性值”。MBean在JBoss是只保留一个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名称,来取得此MBean在JBOSS中的实例。

2、在Mbean中加一个相应的调用Client.go的方法

 在HelloWorldServiceMBean接口中加入一句:

void callGo();

在HelloWorldService类中加入现实方法:

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

3、更新布署

将三个类的class文件:Clien.class、HelloWorldServiceMBean.class、HelloWorldService.class,更新到JBOSS的hello.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.Element,JMX将它封装成了一个XML的DOM对象。
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

[JMX一步步来] 9、基于JBoss来写MBean相关推荐

  1. [JMX一步步来] 7、用JDK5.0的JConsole来连接MBean

    前面所有看效果都是通过Html网页来看的.JDK5.0自带了一个jmx客户端,叫jconsole,位于c:\jdk\bin\jconsole.exe.我们来用用这个客户端来连接Mbean Server ...

  2. 基于Delphi API写的UDP通讯类

    转载地址:http://www.codefans.net/articles/159.shtml 基于Delphi API写的UDP通讯类,可以广播和单播,类作者:王彦鹏.这个类是作者2007年的时候写 ...

  3. 驱动框架5——基于驱动框架写led驱动

    以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 五.基于驱动框架写led驱动1 1.分析 (1)参考哪里?  drivers/leds/leds-s3c24xx. ...

  4. Python+OpenCV:基于SVM手写数据OCR(OCR of Hand-written Data using SVM)

    Python+OpenCV:基于SVM手写数据OCR(OCR of Hand-written Data using SVM) dsize = 20 affine_flags = lmc_cv.WARP ...

  5. Python+OpenCV:基于KNN手写数据OCR(OCR of Hand-written Data using kNN)

    Python+OpenCV:基于KNN手写数据OCR(OCR of Hand-written Data using kNN) OCR of Hand-written Digits ########## ...

  6. 基于Java毕业设计写手管理平台源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计写手管理平台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计写手管理平台源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  7. 基于JavaScript+css写一个简单的h5动态下雨效果

    基于JavaScript+css写一个简单的h5动态下雨效果 文章目录 什么是前端 展示效果 JavaScript是什么? 步骤 1.html 2.css 3.js 什么是前端 前端它是一个工作,它的 ...

  8. CV之IC之SpatialTransformer:基于ClutteredMNIST手写数字图片数据集分别利用CNN_Init、ST_CNN算法(CNN+ST)实现多分类预测案例训练过程记录

    CV之IC之SpatialTransformer:基于ClutteredMNIST手写数字图片数据集分别利用CNN_Init.ST_CNN算法(CNN+ST)实现多分类预测案例训练过程记录 目录 基于 ...

  9. 并注册烧写钩子 获取启动介质类型_一种基于USB烧写的数据传输方法与流程

    本发明涉及嵌入式系统固件量产技术领域,特别涉及嵌入式系统基于USB烧写的固件数据的场景. 背景技术: 嵌入式产品已广泛应用于社会的各行各业,在产品生产过程中,需要将嵌入式系统固件量产到产品设备中. 固 ...

最新文章

  1. 内核aio_Java面试题BIO、NIO、AIO有什么区别?
  2. Objective-C中NSString转NSNumber的方法
  3. vb 访问远程计算机,vb 怎么访问远程电脑SQL SERVER数据库
  4. sap.ushell.Container.getService.done的设计思路
  5. linux下的文件系统,Linux根文件系统(“/”文件系统)下的目录介绍
  6. Log4j.xml配置日志按级别过滤并将指定级别的日志发送到ActiveMQ
  7. 微信公布朋友圈9月十大谣言 包括新型手机病毒出现等
  8. [2010-8-24]
  9. JPA学习笔记二——Hello World
  10. Python: str.split()和re.split()的区别
  11. AT89C51的矩阵键盘、跑马灯和呼吸灯设计
  12. 汇编语言典型例子详解_经典汇编程序100例
  13. 软体机器人与类脑智能机器人
  14. Python简单版本flappy_bird
  15. 如何证明Coq标准库中filter引理
  16. 英语题目作业——OJ_2392:Clear Cold Water
  17. 网易蓝牙耳机怎么切换双耳_2020双十一蓝牙耳机怎么选?有哪些便宜又好用的蓝牙耳机?有哪些适合学生党的蓝牙耳机?《选购指南》...
  18. 2008,AMD发展史上的一个分水岭
  19. Android 判断是否是刘海屏
  20. 灰度直方图与特征直方图的使用方法

热门文章

  1. php复选框样式,如何自定义checkbox样式?附代码
  2. 微型计算机中celeron,微型计算机中常提及的Pentium或Celeron是指其_______
  3. leetcode22. 括号生成
  4. PaperNotes(16)-图神经网络GNN简史、不动点建模-笔记
  5. 深度学习(06)-- Network in Network(NIN)
  6. pandasStudyNoteBook
  7. 《Python Cookbook 3rd》笔记(2.20):字节字符串上的字符串操作
  8. 职场与生活 八条原则 让你不再浪费时间和提高效率
  9. 多线程编程指南 part 2
  10. Springboot Mybatis 整合(完整版)