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

[JMX一步步来] 6、Model Bean

    博客分类:
  • java
阅读更多
    在上一节是用apache的commons-modeler来开发的一个model,只不过commons-modeler帮助我们实现了很多的代码,而 我们只需要写描述XML文件就行了。这一节,来一个实打实的Model Bean,不借助任何第三方工具包。例子还是沿用Hello这个类,以便于和以前的实现相比较。
    一、Model MBean实例
    1、Hello.java还是和以前的一样。这里它没有再加上一个MBean接口了,只是一个很普通的类
 
  1. public class Hello{  
  2.     private String name;  
  3.     public String getName() {  
  4.         return name;  
  5.     }  
  6.     public void setName(String name) {  
  7.         this.name = name;  
  8.     }  
  9.     public void printHello() {  
  10.         System.out.println("Hello World, " + name);  
  11.     }  
  12.     public void printHello(String whoName) {  
  13.         System.out.println("Hello , " + whoName);  
  14.     }  
  15. }  

    2、接下来是HelloAgent的写法,和以前就差一句:把“new Hello()”这一句删除了,加上了ModelMbeanUtils.createModlerMbean();
 
  1. import javax.management.MBeanServer;  
  2. import javax.management.MBeanServerFactory;  
  3. import javax.management.ObjectName;  
  4. import javax.management.modelmbean.RequiredModelMBean;  
  5.   
  6. import com.sun.jdmk.comm.HtmlAdaptorServer;  
  7.   
  8. public class HelloAgent {  
  9.     public static void main(String[] args) throws Exception {  
  10.         MBeanServer server = MBeanServerFactory.createMBeanServer();  
  11.         ObjectName helloName = new ObjectName("chengang:name=HelloWorld");  
  12.         //Hello hello = new Hello();  
  13.         RequiredModelMBean hello = ModelMBeanUtils.createModlerMBean();  
  14.         server.registerMBean(hello, helloName);  
  15.         ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082");  
  16.         HtmlAdaptorServer adapter = new HtmlAdaptorServer();  
  17.         server.registerMBean(adapter, adapterName);  
  18.         adapter.start();  
  19.         System.out.println("start.....");  
  20.     }  
  21. }  

    3、ModelMbeanUtils这个类是要我们自己来实现的,也是写model Bean最麻烦的地方,它主要是返回一个RequiredModelMBean类,此类主要包括了一个ModelMBeanInfo类的信息。在 ModelMBeanInfo中定义了所有对需要管理的属性和方法的描述。具体代码如下:
 
  1. import javax.management.MBeanParameterInfo;  
  2. import javax.management.modelmbean.ModelMBeanAttributeInfo;  
  3. import javax.management.modelmbean.ModelMBeanInfo;  
  4. import javax.management.modelmbean.ModelMBeanInfoSupport;  
  5. import javax.management.modelmbean.ModelMBeanOperationInfo;  
  6. import javax.management.modelmbean.RequiredModelMBean;  
  7. public class ModelMBeanUtils {  
  8.     private static final boolean READABLE = true;  
  9.     private static final boolean WRITABLE = true;  
  10.     private static final boolean BOOLEAN = true;  
  11.     private static final String STRING_CLASS = "java.lang.String";  
  12.     public static RequiredModelMBean createModlerMBean() {  
  13.         RequiredModelMBean model = null;  
  14.         try {  
  15.             model = new RequiredModelMBean();  
  16.             model.setManagedResource(new Hello(), "objectReference");  
  17.             ModelMBeanInfo info = createModelMBeanInfo();  
  18.             model.setModelMBeanInfo(info);  
  19.         } catch (Exception e) {  
  20.             e.printStackTrace();  
  21.         }  
  22.         return model;  
  23.     }  
  24.     private static ModelMBeanInfo createModelMBeanInfo() {  
  25.         //////////////////////////////////////////////////////////////////  
  26.         //                        属性                                        //  
  27.         //////////////////////////////////////////////////////////////////  
  28.         // 构造name属性信息  
  29.         ModelMBeanAttributeInfo nameAttrInfo = new ModelMBeanAttributeInfo(//  
  30.                 "Name"// 属性名         
  31.                 STRING_CLASS, //属性类型      
  32.                 "people name"// 描述文字        
  33.                 READABLE, WRITABLE, !BOOLEAN, // 读写        
  34.                 null // 属性描述子  
  35.         );  
  36.         //////////////////////////////////////////////////////////////////  
  37.         //                        方法                                        //  
  38.         //////////////////////////////////////////////////////////////////  
  39.         //构造 printHello()操作的信息         
  40.         ModelMBeanOperationInfo print1Info = new ModelMBeanOperationInfo(//  
  41.                 "printHello"//  
  42.                 null//    
  43.                 null//  
  44.                 "void"//    
  45.                 MBeanOperationInfo.INFO, //      
  46.                 null //  
  47.         );  
  48.         // 构造printHello(String whoName)操作信息       
  49.         ModelMBeanOperationInfo print2Info;  
  50.         MBeanParameterInfo[] param2 = new MBeanParameterInfo[1];  
  51.         param2[0] = new MBeanParameterInfo("whoName", STRING_CLASS, "say hello to who");  
  52.         print2Info = new ModelMBeanOperationInfo(//  
  53.                 "printHello"//  
  54.                 null,//  
  55.                 param2,//  
  56.                 "void"//  
  57.                 MBeanOperationInfo.INFO, //  
  58.                 null//  
  59.         );  
  60.         //////////////////////////////////////////////////////////////////  
  61.         //                        最后总合                                    //  
  62.         //////////////////////////////////////////////////////////////////  
  63.         // create ModelMBeanInfo         
  64.         ModelMBeanInfo mbeanInfo = new ModelMBeanInfoSupport(//  
  65.                 RequiredModelMBean.class.getName(), // MBean类  
  66.                 null// 描述文字       
  67.                 new ModelMBeanAttributeInfo[] { // 所有的属性信息(数组)  
  68.                 nameAttrInfo },//只有一个属性  
  69.                 null// 所有的构造函数信息    
  70.                 new ModelMBeanOperationInfo[] { // 所有的操作信息(数组)  
  71.                         print1Info,  
  72.                         print2Info },//  
  73.                 null// 所有的通知信息(本例无)  
  74.                 null//MBean描述子  
  75.         );  
  76.         return mbeanInfo;  
  77.     }  
  78. }  

    4、看效果的方法和以前一样,运行HelloAgent,用浏览器打开:http://localhost:8082 。效果图和standard mbean一样

二、总结
    我们发现模型Mbean(Model MBean)要比标准MBean(standard mbean)复杂多了,那有什么理由让我们选择使用模型MBean吗?我认为,最大的理由就是模型MBean可以动态配置。试想一下这个应用场景:由于安 全或其他原因,系统要把某个MBean公开的可管理方法隐藏起来。这时,如果你是用标准MBean,这需要修改接口类,然后重新编译发布;如果用 Apache commons-modeler来写的模型MBean,则只需要修改XML文件就行了,不需要重新编译发布(可能要重启一下系统)。这就是模型Mbean 优势之所在了。

    细心的人会发现动态MBean和这一节的模型Mbean非常相似,但它们还是有很大不同的:动态MBean没有Hello类,它要自己实现Hello类中的方法逻辑。   

这里有个问题:
    MBean的属性Name是可读写的,就是说可以对Name进行赋值,但是在运行的界面中对Name赋值后,调用print1Info打印出的信息是"Hello World, null",说明Name属性并没有赋值,不知道该如何正确操作才能正确对Name赋值。
   
分享到:
评论

相关推荐

    jmx一步步来 jmx快速上手指南

    2. **监控与诊断**:JMX提供了一种机制来收集有关应用程序的运行时信息,包括但不限于内存使用情况、线程统计信息等,有助于开发者进行故障排查。 3. **自动化管理**:利用JMX,可以编写脚本或者工具来自动生成报告...

    JMX学习——一步步来

    【JMX学习——一步步来】 JMX,全称为Java Management Extensions,是一个用于植入管理功能到Java应用程序的框架。它提供了一套标准的接口和服务,使得开发者可以在任何Java应用中实现管理和监控。对于初学者来说,...

    JMX一步一步来,快速学会开发JMX应用

    【JMX 一步步来】 JMX(Java Management Extensions)是一个用于在Java应用程序中添加管理和监控功能的框架。它提供了一套标准的接口和服务,使得开发者能够轻松地在Java应用中集成管理和监控的能力。JMX的核心概念...

    spring框架下jmx入门例子

    首先,JMX是一种Java标准,它允许开发者创建可管理的Java组件,并提供了一种统一的方式来管理和监控这些组件。在Spring中,我们可以利用JMX来创建MBeans(Managed Beans),这些MBeans代表了我们的管理对象,可以是...

    书籍JMX-IN-ACTION

    《JMX in Action》是一本深入探讨Java管理扩展(Java Management Extensions, JMX)技术的专业书籍,对于希望理解和掌握JMX的IT从业者来说,是一份不可或缺的参考资料。JMX是Java平台上的一个标准组件,它提供了管理...

    jmx例子一则

    总的来说,JMX是一个强大的工具,它让开发者能够轻松地对Java应用进行监控和管理,通过暴露管理接口,使得运维人员可以在运行时动态调整应用程序的行为,提高系统的可维护性和稳定性。通过学习和实践JMX,开发者可以...

    jmx三种访问方式

    Java Management Extensions(JMX)是Java平台中用于管理和监控应用程序、操作系统、网络设备等资源的一种标准框架。通过JMX,开发者可以创建管理代理(MBeans),这些代理暴露了各种管理特性,使得系统管理员可以...

    JMX实战 JMX开发

    JMX实战 书中不仅有对于基础知识的介绍,还有对于JMX开发中重大的体系架构问题的深入探讨,总结了大量JMX开发中的设计模式,并讨论了框架、安全性与性能等等。书中提供了几个典型的例子,兼顾各种开发平台,这些...

    jmx技术介绍(ppt)

    JMX(Java Management Extensions)是一种Java平台上的管理框架,它提供了一种标准的方式来管理和监控应用程序、设备和服务。JMX的核心概念包括MBean(Management Bean)、MBean服务器和管理接口。 **概述** JMX是...

    JMX、MXBean学习

    6. **安全性**:JMX支持安全管理,可以通过设置权限来控制谁可以访问和操作MBeans。 7. **使用场景**:JMX常用于性能监控、日志管理、配置管理以及健康检查等任务。例如,你可以通过JMX监控Tomcat服务器的线程池...

    jmx监控activeMQ监控

    jmx(Java Management Extensions)是一种Java技术,为Java应用程序提供了管理和监控的功能。ActiveMQ是Apache软件基金会下的一个开源消息队列系统,提供了高效、可靠的消息传递服务。在生产环境中, ActiveMQ的监控...

    JMX与Spring 结合

    **JMX(Java Management Extensions)** 是Java平台提供的一种管理和监控的标准框架,它允许开发者对应用程序、设备和服务进行管理,提供了动态发现、监控和管理的能力。JMX 可以帮助我们远程控制应用,查看其运行...

    jmx.rar_jmx

    JMX允许开发者创建和注册管理 Bean(MBeans),这些Bean可以代表任何可管理的对象,如服务器、设备或者应用程序的组件。通过MBeans,我们可以获取运行时信息,设置参数,甚至执行远程操作。 在描述中提到的“jmx....

    jmxri-1.2.1.jar+jmxtools-1.2.1.jar

    Java Management Extensions (JMX) 是Java平台上的一个标准技术,用于管理和监控应用程序、操作系统和网络设备。`jmxri-1.2.1.jar` 和 `jmxtools-1.2.1.jar` 是与JMX相关的两个核心库文件,它们在Java应用程序中扮演...

    jmx所需的jar

    MBean(Managed Bean)是JMX中的核心概念,它代表了管理的对象,可以是系统的一个组件、服务或者任何需要被管理的资源。 2. `jmx_remote-1_0_1_03-ri.zip`: 这个文件包含了JMX的远程访问支持。JMX远程接口允许管理...

    JMX配置与使用

    Java Management Extensions(JMX)是Java平台上的一个标准,它提供了管理和监视应用程序、服务、硬件设备等资源的能力。JMX允许开发人员创建可管理和监视的组件,并将它们集成到Java应用中。以下是对JMX配置与使用...

    JMX小例子以及介绍

    本篇文章将深入探讨JMX的核心概念、功能及如何通过一个小例子来理解和使用JMX。 **1. JMX核心概念** - **MBean(Managed Beans)**: MBean是JMX中最基本的管理单元,它是Java对象,代表可管理的资源或服务。MBean...

    jboss远程调用JMX

    JMX(Java Management Extensions)是Java平台的一部分,用于管理应用程序、设备和服务。JMX允许开发者创建和注册MBeans(Managed Beans),这些MBeans代表了可管理的资源,从而实现对系统的监控和管理。当我们谈论...

    jmx监控weblogic,tomcat,websphere源码

    首先,WebLogic是由Oracle公司提供的一个全面的企业级Java应用服务器,它支持JMX来暴露管理接口,允许管理员远程监控服务器的状态、配置以及执行管理操作。通过JMX,你可以获取到WebLogic服务器的运行时信息,如JVM...

Global site tag (gtag.js) - Google Analytics