【转】基于JBoss来写MBean

http://www.blogjava.net/chengang/archive/2006/03/07/34091.html[@more@]前面都是用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.jarjboss-jmx-3.2.6.jar,如果你和我一样用Eclipse来开发(推荐),那么把这个两个包加入到项目的库引用中(加入到库引用的方法参考前面两章)。

2、程序代码

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

1HelloWorldServiceMBean接口

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

import org.jboss.system.ServiceMBean; public interface HelloWorldServiceMBean extends ServiceMBean { String getMessage(); void setMessage(String message); }

2HelloWorldService实现类

  然后写出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"?> Hello World

说明:

l code项指向MBean的实现类HelloWorldServicel name项是一个名称,格式一般是:[说明性文字]:service=[类名]l attribute是为属性设置初始值,这样当JBOSS一加载HelloWorldService类时,message属性就有了一个初始值Hello World。注意Message的第一个字母必须是大写。

二、将实例部署到JBOSS

  在jboss-3.2.6serverdefaultdeploy目录下创建一个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.6serverdefaultdeploy目录下。l JBOSS支持热部署,也就是说你在布置这个目录时并不需要重启JBOSS

三、MBean的效果

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

1135588871713_5327.jpg

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

1135588893639_3324.jpg

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

  现在我们可以通过一个自动提供的WEB页面来设置Message属性了,接下来的问题是:“在其他类中应该如何得到Message的属性值”。MBeanJBoss是只保留一个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名称,来取得此MBeanJBOSS中的实例。

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

 在HelloWorldServiceMBean接口中加入一句:

void callGo();

HelloWorldService类中加入现实方法:

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

3、更新布署

将三个类的class文件:Clien.classHelloWorldServiceMBean.classHelloWorldService.class,更新到JBOSShello.sarexamplembean目录下。然后重启JBOSS

4、查看效果

打开JBOSS提供的MBean设置页面,如下,发现多了一个callGo

1135589421532_8527.jpg

单击callGo项后的invoke按钮,得到如下的DOS输出:

1135589435968_2575.jpg

五、其他说明

l 本实例仅演示了一个Message属性,你当然可以在HelloWorldService中加入更多属性,别忘了在HelloWorldServiceMBean接口也加入相应的set/get方法。l 本实例的message属性是String类型的,但JMX也支持其他的类型,甚至是XML信息。对于jboss-service.xml中的XML信息,这时属性类型要求是org.w3c.dom.ElementJMX将它封装成了一个XMLDOM对象。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

打开网址:http://127.0.0.1:8080/jmx-console/ ,出现下图

posted on 2006-03-07 15:19 陈刚 阅读(647) 评论(1) 编辑 收藏 引用 所属分类: JMX

34091.html?webview=1--&gt

评论

看过了这9篇文章,感觉是在网上能够搜索到的最清晰的JMX系列文章了。8过缺了一项内容:如何实现自己的HtmlAdaptor。期待ing...
其实这也是我的问题。现在手头的系统里面正在添加JMX进行管理,需要个性化的HtmlAdaptor和RmiConnector,一直苦于没有太好的解决办法。请赐教。
MSN:james_zj@msn.com
希望能和你交流JMX技术。
# re: [JMX一步步来] 9、基于JBoss来写MBean 回复 更多评论

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/49731/viewspace-945073/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/49731/viewspace-945073/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值