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

来源: 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>
说明:
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的效果
 
打开网址:http://127.0.0.1:8080/jmx-console/ ,出现下图
然后单击“ service=HelloWorld ”项打开详细页面如下:

[JMX一步步来] 9、基于JBoss来写MBean_第1张图片

将“
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 接口中加入一句:
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
[JMX一步步来] 9、基于JBoss来写MBean_第2张图片

单击
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 实例所反映的只是冰山一角而已。
六、参考资料:http://www.huihoo.com/java/jmx/jmx_base.html 
 

你可能感兴趣的:(Hibernate,jboss,String,service,jmx,import)