来源: http://www.blogjava.net/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.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
接口中加入一句:
在
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