win7怎么远程控制mac:[JMX一步步来] 9、基于JBoss来写MBean

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 00:39:26
2007-02-02

[JMX一步步来] 9、基于JBoss来写MBean

    博客分类:
  • JAVA技术
JBossXML配置管理Go应用服务器前面都是用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。java 代码
  1. import org.jboss.system.ServiceMBean;   
  2. public interface HelloWorldServiceMBean extends ServiceMBean {   
  3.     String getMessage();   
  4.     void setMessage(String message);   
  5. }  

2、HelloWorldService实现类

  然后写出HelloWorldServiceMBean接口的实现类HelloWorldService,这个实现类还必须继承ServiceMBeanSupport类。这种类再简单不过了,就是属性和相应的set/get方法,EJB中叫实体类、Hibernate中叫POJO。

java 代码
  1. import org.jboss.system.ServiceMBeanSupport;   
  2. public class HelloWorldService extends ServiceMBeanSupport implements HelloWorldServiceMBean {   
  3.     private String message;   
  4.     public String getMessage() {   
  5.         System.out.println("getMessage()=" + message);   
  6.         return message;   
  7.     }   
  8.   
  9.   
  10.   
  11.     public void setMessage(String message) {   
  12.         System.out.println("setMessage(" + message + ")");   
  13.         this.message = message;   
  14.     }   
  15. }   

3、配置文件jboss-service.xml

xml 代码
  1.   
  2.   
  3.       
  4.         Hello World  
  5.       
  6.   

 

说明: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 WorldChenGang”,再单击“Apply Changes”应用修改

四、其他类如何使用Messag属性

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

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

 

java 代码
  1. import org.jboss.mx.util.MBeanProxyExt;   
  2. import org.jboss.mx.util.ObjectNameFactory;   
  3. public class Client {   
  4.     public void go() {   
  5.         HelloWorldServiceMBean mbean = (HelloWorldServiceMBean) MBeanProxyExt.create(HelloWorldServiceMBean.class, ObjectNameFactory.create(www.chengang.com.cn:service=HelloWorld));   
  6.         String msg = mbean.getMessage();   
  7.         System.out.println("Client.go()=" + msg);   
  8.     }   
  9. }   
 

注意:go方法里是三句。第一句比较长,它是根据jboss-service.xml文件中设置的MBean名称,来取得此MBeanJBOSS中的实例。

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

 在HelloWorldServiceMBean接口中加入一句:

java 代码
  1. void callGo();  
HelloWorldService类中加入现实方法:java 代码
  1. public void callGo() {   
  2.         new Client().go();   
  3.     }  

3、更新布署

   将三个类的class文件:Clien.classHelloWorldServiceMBean.classHelloWorldService.class,更新到JBOSShello.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实例所反映的只是冰山一角而已
学厨师怎样一步步来? 对手背朝我,一步步运球挤过来,怎么办? WINDOWS是基于什么变成语言做出来的? 有备份的XP重装要怎么做,高手一步步来! 请问在哪儿能看修汽车实际操作的视频或文章啊(一步步来的) 谁有没有.XP操作系统的设置啊...一步步来的设置 怎样在百度知道里操作(既该怎样一步步点击)来选择答案或处理为无满意答案 能让我写一个字 鼠标能模拟字的笔画一步步写出来的软件 感谢!! 能让我写一个字 鼠标能模拟字的笔画一步步写出来的软件 感谢 x^2-5x+6=(x-2)(x-3) 这个答案怎么得来的请帮我一步步做出来好吗谢谢 网络结构的交换式,共享式,基于路由器 是什么来的 能否解释一下 非常谢谢 WINDOWS是基于什么编程语言做出来的?C吗? 基于小波变换的电网谐波检测,怎么用MATLAB来实现? 基于asp基础的网上书店的毕业论文怎样来做 用何种数据库来管理基于WEB网站新闻发布系统? 如何用GHOST来恢复系统?我用的是Window XP系统,GHOST在G盘中。请一步步详细讲解,谢谢! 我是英语专业马上大三了,想考BEC高级,但又没有把握,我是不是应该先明年五月考个中级,一步步来 会不会是我安装过程出差错了啊?可是我都是一步步来装得,应该不会有什么问题的啊。我装的是MSN7.5 来!!!!!! 来`~~~~~~~~~~ 来................. 来....................................... 来~~~~~~~~~~~~~~~~~~~~~~~ 来 !!!!!