`
liyiye
  • 浏览: 421556 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

9、基于JBoss来写MBean

    博客分类:
  • jmx
阅读更多

前面都是用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"?>
<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/ ,出现下图

 

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.sar\example\mbean目录下。然后重启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 

分享到:
评论

相关推荐

    ejb3 and jboss 多本合一(three)

    ejb3 and jboss 多本合一(three) Using @Service annotation in eclipse JBoss中文文档.pdf JBOSS使用指南.doc JBOSS架构分析.doc JBOSS对EJB3_0的扩展 ...基于JBoss来写MBean JBoss EJB 3_0 extensions

    JBOSS使用指南

    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 ...

    基于JMX的JBoss体系结构研究

    ### 基于JMX的JBoss体系结构研究:深入解析与探讨 #### JBoss:J2EE应用服务器的领航者 JBoss,作为一款采用纯Java编写的开源J2EE应用服务器,自1999年问世以来,迅速成长为业界广受欢迎的选择。其发展历程见证了...

    基于jboss服务的java环境建设.docx

    JBoss的架构与传统的J2EE应用服务器有所不同,它基于Java Management Extensions(JMX)构建。JMX是一种Java资源管理框架,允许在运行时动态管理和监控系统资源。在JBoss中,JMX用于连接各个主要组件,实现灵活的...

    jboss 下载(httpwww.jboss.org)

    JBoss 是一个开源的、基于 J2EE(Java 2 Platform, Enterprise Edition)的应用服务器,由全球开发者社区共同维护和开发。它最初以 LGPL 许可协议发布,允许商业应用免费使用。2006年,JBoss 被著名的开源公司 Red ...

    JBoss JMX实现架构

    Java的类型系统基于类的全限定名和类加载器来确保类型安全。Vijay Saraswat的论文揭示了Java类型安全的潜在问题,即类加载器可以被用来欺骗JVM加载错误的类版本。在动态环境中,如JBoss应用服务器,类加载器的行为...

    jboss-4.0.2.zip

    JBoss是著名的开源Java应用服务器,它基于Java EE(Enterprise Edition)规范,为开发者提供了全面的中间件服务。本文将详细解析"jboss-4.0.2.zip"这一版本的JBoss应用服务器,深入探讨其核心功能、配置、部署以及在...

    Jboss配置全面解析

    JBoss是一款开源的应用服务器,它基于Java EE标准,为企业级应用提供了全面的中间件服务。本文将详细介绍如何在Windows环境下配置JBoss,并整合Eclipse开发环境。 **一、JBoss的下载与安装** 1. 下载JBoss 4.2.1....

    jboss-eap-6.2.0

    9. **社区支持与企业服务**:作为开源项目,JBoss EAP 6.2.0拥有庞大的开发者社区,可以获取到丰富的文档、示例和社区支持。同时,Red Hat也提供了付费的企业级支持和服务,包括更新、维护和专业咨询。 在使用JBoss...

    Jboss基础.pdf

    JBoss是Red Hat公司开发的一款开源企业级应用服务器,它基于Java EE(Java Enterprise Edition)标准,为构建、部署和管理分布式的企业级应用程序提供了一整套解决方案。在本篇文章中,我们将深入探讨JBoss的基础...

    JBOSS端口配置

    本文将基于提供的文件内容,详细介绍JBoss端口配置的相关知识点,帮助读者更好地理解和掌握JBoss端口配置的方法。 #### 二、端口配置文件 JBoss端口配置主要涉及以下几个配置文件: 1. **`jboss-service.xml`**:...

    jboss远程调用JMX

    在IT行业中,JBoss是一个非常著名的开源应用服务器,它基于Java EE规范,提供了一套全面的企业级服务。JMX(Java Management Extensions)是Java平台的一部分,用于管理应用程序、设备和服务。JMX允许开发者创建和...

    JBoss Admin Development Guide3.26

    - **JBoss MBean服务**:具体讨论了JBoss中使用的MBean服务,如SAR部署器MBean和服务生命周期接口。 通过上述内容的介绍,我们可以看出,《JBoss Admin Development Guide 3.26》是一本非常详尽的技术文档,不仅...

    Servlet引擎:JBoss与Tomcat、Jetty协同工作

    例如,当需要添加一个新的服务时,可以通过JMX接口注册相应的MBean,并通过MBean的属性和操作来控制该服务的行为。 #### 图1:JBoss基本结构 ``` 核心组件 JBoss JMX容器 ServiceController EJB ... JMS ...

Global site tag (gtag.js) - Google Analytics