`
damies
  • 浏览: 238578 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
前面都是用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. }  

2HelloWorldService实现类

  然后写出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. <?xml version="1.0" encoding="UTF-8"?>  
  2. <server>  
  3.     <mbean code="example.mbean.HelloWorldService" name="www.chengang.com.cn:service=HelloWorld">  
  4.         <attribute name="Message">Hello World</attribute>  
  5.     </mbean>  
  6. </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”项打开详细页面

将“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输出

五、其他说明
本实例仅演示了一个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实例所反映的只是冰山一角而已。
分享到:
评论
3 楼 busing 2010-03-18  
你这转载的很有技术含量啊……  还是完全抄过来的 ,他那个是基于 3.x开发的
2 楼 绝对可能 2008-11-26  
hello.sar的目录结构貌似不对
1 楼 我不知道 2007-03-19  
问个问题:
    jboss中我其他应用的MBean能不能注册到当前应用。
如:有个程序必须跑在另外一台机器上,提供message服务和有一个用户管理的frame程序。这台机器就叫server
    而另外有一个机器用来跑webapp,这台就叫webserver.
客户端访问webapp时,在webapp上配置的mbean用来读取webserver的系统信息(用System.getProperties()取得).
   server也有个mbean,用来提供它的系统信息。
    注:webserver访问server上的服务时用rmi访问。

请问:这个server上的mbean能不能
注册到webapp上的那个mebeanserver上呢?
怎么注册呢?
  

相关推荐

    jboss远程调用JMX

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

    JBoss JMX实现架构

    JMX提供了一种标准的方式来管理和监控分布式系统,包括应用程序、设备和网络资源。JBoss 3.x版本在JMX实现上进行了重大改进,特别是针对类加载器架构和热部署能力。 2.2.1 JBoss 类装载器架构 在JBoss 2.x中,...

    基于JMX的JBoss体系结构研究

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

    jmx_tomcat_jboss

    【压缩包子文件的文件名称列表】:“jmx_server”:这可能是一个包含与JMX服务器相关的配置文件、示例代码、库或者文档的文件,用于帮助用户设置和使用JMX来管理Tomcat或JBoss服务器。通常,这样的文件可能包含: 1...

    论文研究-JMX技术在网络监控中的应用.pdf

    在JMX技术的实际应用方面,JBoss提供了一个基于JMX的中间件平台,它利用JMX来管理EJB容器以及其它服务。JBoss应用服务器内置了JMX管理框架,使得开发者和管理员能够以编程方式或者通过图形用户界面来访问MBean的信息...

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

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

    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实例demo下载

    此外,了解JMX还可以帮助你整合其他Java应用服务器的管理功能,如Tomcat、JBoss等,因为这些服务器都支持JMX来暴露其内部状态和配置。熟悉JMX还可以让你更容易地使用各种开源工具,如VisualVM、JConsole等进行性能...

    jmx第一个学习例子

    JMX作为一项由Sun Microsystems(现Oracle)提出的技术,用于管理和监控Java应用及系统资源,其流行度与日俱增,不仅受到大公司的支持,如IBM、BEA、HP、Marcomedia和JBoss,也被众多小型软件企业和开源项目采纳。...

    论文研究-基于JMX的网络管理系统.pdf

    JMX(Java Management Extensions)即Java管理扩展是一种为应用程序、设备、系统等植入管理功能的架构。它是基于Java语言的一种开放的、基于标准的解决方案,用于监控和管理应用程序、系统以及网络服务等。JMX规范...

    jmx资料

    总的来说,JMX提供了一个强大的工具集,使Java开发者能够创建可管理和可监控的应用程序,而JBoss的JMX实现进一步增强了这一能力,尤其是在类加载和热部署方面。通过深入理解和熟练运用JMX,可以提升Java应用的管理和...

    《jmx技术介绍》配套源代码

    总结来说,JMX是Java平台的重要管理工具,它提供了一种统一的接口来管理和监控应用程序和服务。通过《JMX技术介绍》一书及其配套源代码,读者可以深入了解并熟练运用JMX,提升其Java应用程序的管理和监控能力。

    JAVA JMX 学习资料

    Java自带的JConsole是JMX的一个示例客户端,它可以连接到本地或远程的JVM,并可视化地展示MBean的信息,进行监控和管理。 7. **JMX的应用场景**: JMX常用于服务器监控,如内存使用、线程状态、JDBC连接池等。在...

    JBoss Admin Development Guide3.26

    JBoss是一款基于Java的开源应用服务器,它支持Java平台上的各种服务,如Java EE应用程序。JBoss以其强大的功能、灵活性以及对最新技术的支持而闻名,在开源社区中占据了重要的位置。本书《JBoss Admin Development ...

    网络管理之jmx开发实战

    3. **创建Mlet**:这是第一个需要创建的MBean,其他MBean可以通过该Mlet来创建。 4. **调用MBean方法**:完成上述步骤后,即可调用每一个MBean的方法。 #### Mlet配置文件示例 下面给出一个简单的Mlet配置文件示例...

    jopr -jboss 工程师必备监控工具

    通过统一的图形化管理控制台,您可以管理和监控网络、操作系统、数据库等基础设施服务,也可以管理和监控Java虚拟机、JBoss Web、连接池等中间件,还可以通过自定义的JMX MBean管理和监控您的业务应用。通过对配置...

    jboss-4.0.2.zip

    总的来说,"jboss-4.0.2.zip"代表了一个成熟的Java EE应用服务器,它为企业提供了稳定且功能丰富的平台来构建和运行复杂的分布式应用程序。虽然当前的版本可能已经过时,但它仍然是学习和理解Java EE服务及中间件...

    Jboss基础.pdf

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

Global site tag (gtag.js) - Google Analytics