用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 代码
- importorg.jboss.system.ServiceMBean;
- publicinterfaceHelloWorldServiceMBeanextendsServiceMBean{
- StringgetMessage();
- voidsetMessage(Stringmessage);
- }
2)、HelloWorldService实现类
然后写出HelloWorldServiceMBean接口的实现类HelloWorldService,这个实现类还必须继承ServiceMBeanSupport类。这种类再简单不过了,就是属性和相应的set/get方法,EJB中叫实体类、Hibernate中叫POJO。
java 代码
-
importorg.jboss.system.ServiceMBeanSupport;
-
publicclassHelloWorldServiceextendsServiceMBeanSupport
implementsHelloWorldServiceMBean{
-
privateStringmessage;
-
publicStringgetMessage(){
-
System.out.println("getMessage()="+message);
-
returnmessage;
-
}
-
-
-
publicvoidsetMessage(Stringmessage){
-
System.out.println("setMessage("+message+")");
-
this.message=message;
-
}
-
}
3)、配置文件jboss-service.xml
-
xmlversion="1.0"encoding="UTF-8"?>
-
<server>
-
<mbeancode="example.mbean.HelloWorldService"
name="www.chengang.com.cn:service=HelloWorld">
-
<attributename="Message">HelloWorldattribute>
-
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属性的类
-
importorg.jboss.mx.util.MBeanProxyExt;
-
importorg.jboss.mx.util.ObjectNameFactory;
-
publicclassClient{
-
publicvoidgo(){
-
HelloWorldServiceMBeanmbean=(HelloWorldServiceMBean)MBeanProxyExt.create(HelloWorldServiceMBean.class,ObjectNameFactory.create(www.chengang.com.cn:service=HelloWorld));
-
Stringmsg=mbean.getMessage();
-
System.out.println("Client.go()="+msg);
-
}
-
}
注意:go方法里是三句。第一句比较长,它是根据jboss-service.xml文件中设置的MBean名称,来取得此MBean在JBOSS中的实例。
2、在Mbean中加一个相应的调用Client.go的方法
在HelloWorldServiceMBean接口中加入一句:
- voidcallGo();
- ublicvoidcallGo(){
- newClient().go();
- }
3、更新布署
将三个类的class文件:Clien.class、HelloWorldServiceMBean.class、HelloWorldService.class,更新到JBOSS的hello.sar\example\mbean目录下。然后重启JBOSS。
4、查看效果
打开JBOSS提供的MBean设置页面,发现多了一个callGo。
单击callGo项后的invoke按钮,得到DOS输出
五、其他说明
◆本实例仅演示了一个Message属性,你当然可以在HelloWorldService中加入更多属性,别忘了在HelloWorldServiceMBean接口也加入相应的set/get方法。
◆本实例的message属性是String类型的,但JMX也支持其他的类型,甚至是XML信息。对于jboss-service.xml中的XML信息,这时属性类型要求是org.w3c.dom.Element,JMX将它封装成了一个XML的DOM对象。
◆回顾一下,JMX也是将配置信息写在了一个文件(jboss-service.xml文件)里嘛,相对于将配置文件写到*.properties文件的方式,它似乎也没什么新鲜的地方。但通过本章实例我们可以看到JMX的一些好处:我们不用写代码去读配置文件的信息,而且JMX支持的属性类型是多种多样的(如上面说的org.w3c.dom.Element)。更重要的是JMX还提供了一整套的属性之前互相访问、互相调用的功能,这个HelloWorld实例所反映的只是冰山一角而已。
相关推荐
ejb-jboss-web实例的workspace ejb-jboss-web实例的workspace ejb-jboss-web实例的workspace
Quartz jboss Mbean Config
jboss EJB3.0实例教程 jboss EJB3.0实例教程 jboss EJB3.0实例教程
Drool初学者适用的实例。 注意:要安装drool IDE插件。
jboss esb 实例及讲解,我收集的资料整理做成书
jboss EJB 3.0 实例教程 (黎活明 著) (pdf书籍) 及 (代码).......
JBoss EJB3.0实例教程,黎活明
JBOSS EJB3.0实例教程 这个好不错 看看还是可以的 好
JBoss4.0实例参考PDF格式JBoss4.0实例参考PDF格式JBoss4.0实例参考PDF格式
新手学习ejb3.0的非常好的教程,通俗易懂,全部是实例教学。。。
JBOSS建立JMS应用实例 代码 + 文档
如何配置在同一台机器上启动两个独立的jboss实例
关于ejb的实例学习,ant进行打包的程序,你把hello文件夹里的hello.jar和Helloweb文件夹里的HelloWeb.war放到jboss中部署,可以运行。你也可以工程放到你的工作空间自己打包
JBoss jBPM 实例说明 struts1.1+spring1.2+hibernate3.0+jbpm3.1.4可以tomcat下运行,可通过图形模式发布工程,配置了在网页显示jbpm流程图的标签文件。
EJB3.0实例教程服务器为JBOSS EJB3.0实例教程服务器为JBOSS
基于jboss下的jms通讯,使用spring实现jms发送与接收功能文章有相关的配置
3. 基于JBoss来写MBean 3.1 HelloWorld实例 3.2 程序代码 3.3 配置文件jboss-service.xml 3.4 将实例部署到JBOSS 3.5 MBean的效果 s四.EJB3.0使用说明 1. Enterprice JavaBeans(EJB)的概念 1.1 会话 Bean: 1.2 ...
Jboss_ESB简介及开发实例 挺好的实例
这是一个关于JBoss Portal的小例子,有一个完整的war包和源码。实现了一个Portlet。