分享
 
 
 

[Boss Connector笔记]第3章 JMX-MBean的HelloWorld实例

王朝java/jsp·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

第3章 JMX-MBean的HelloWorld实例3.1 前言Boss Connecter这个项目用到的技术还真够多的,这一章是要用到的JMX技术。什么是JMX?在一篇网文中是这样说的:“JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理”,这句话我现在看着还是不知所云,云里雾里。

我们还是从JMX能给我们提供什么好处入手来理解吧。在一个系统中常常会有一些配置信息,比如服务的IP地址,端口号什么的。程序衰哥一般是写死在程序里,到要改变时就去改程序,然后再编译发布;程序帅哥则一般把这些信息写在一个配置文件里(JAVA一般都是*.properties文件);程序帅哥+大款则都用JMX了,把配置属性集中在一个类,然后用JMX中的一个叫MBean的东东,就搞定轻松搞定一切了,JMX自动提供了一个WEB页面来给你来改变这些配置信息。

3.2 HelloWorld实例3.2.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来开发(推荐),那么把这个两个包加入到项目的库引用中(加入到库引用的方法参考前面两章)。

3.2.2 程序代码假设我们有一个叫message的属性要需要经常进行改动配置的,那么我们就把它写成一个MBean。

1、HelloWorldServiceMBean接口

在写MBean之前,我们先需要写一个MBean接口,接口里的方法都是属性的set/get方法。这个接口必须继承接口ServiceMBean。

package example.mbean;

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。

package example.mbean;

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的第一个字母必须是大写。

3.2.3将实例部署到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。

3.2.4 MBean的效果打开网址:http://127.0.0.1:8080/jmx-console/,出现下图

然后单击“service=HelloWorld”项打开详细页面如下:

将“HelloWorld”改成“Hello World,ChenGang”,再单击“Apply Changes”应用修改,得到如下效果:

3.3 其他类如何使用Messag属性现在我们可以通过一个自动提供的WEB页面来设置Message属性了,接下来的问题是:“在其他类中应该如何得到Message的属性值”。MBean在JBoss是只保留一个MBean的实例(单例模式?),也就是说问题转成我们如何去取得这个唯一实例。例程如下:

1、创建一个使用到Message属性的类

package example.mbean;

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输出:

3.4 其他说明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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有