`
ywChen
  • 浏览: 117799 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JMX(五)Model MBean

    博客分类:
  • J2EE
 
阅读更多

1.Hello

Hello.java还是和以前的一样。这里它没有再加上一个MBean接口了,只是一个很普通的类。

package jmx.modelbean;

public class Hello{
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void printHello() {
        System.out.println("Hello World, " + name);
    }
    public void printHello(String whoName) {
        System.out.println("Hello , " + whoName);
    }
} 

 2.ModelMBeanUtils

ModelMbeanUtils这个类是要我们自己来实现的,也是写model Bean最麻烦的地方,它主要是返回一个RequiredModelMBean类,此类主要包括了一个ModelMBeanInfo类的信息。在ModelMBeanInfo中定义了所有对需要管理的属性和方法的描述。具体代码如下: 

package jmx.modelbean;

import javax.management.MBeanOperationInfo;
import javax.management.MBeanParameterInfo;
import javax.management.modelmbean.ModelMBeanAttributeInfo;
import javax.management.modelmbean.ModelMBeanInfo;
import javax.management.modelmbean.ModelMBeanInfoSupport;
import javax.management.modelmbean.ModelMBeanOperationInfo;
import javax.management.modelmbean.RequiredModelMBean;
public class ModelMBeanUtils {
    private static final boolean READABLE = true;
    private static final boolean WRITABLE = true;
    private static final boolean BOOLEAN = true;
    private static final String STRING_CLASS = "java.lang.String"; 
    public static RequiredModelMBean createModlerMBean() {
        RequiredModelMBean model = null;
        try {
            model = new RequiredModelMBean();
            model.setManagedResource(new Hello(), "ObjectReference");
            ModelMBeanInfo info = createModelMBeanInfo();
            model.setModelMBeanInfo(info);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return model;
    } 
    private static ModelMBeanInfo createModelMBeanInfo() {
        //////////////////////////////////////////////////////////////////
        //                        属性                                        //
        //////////////////////////////////////////////////////////////////
        // 构造name属性信息
        ModelMBeanAttributeInfo nameAttrInfo = new ModelMBeanAttributeInfo(//
                "Name", // 属性名       
                STRING_CLASS, //属性类型    
                "people name", // 描述文字      
                READABLE, WRITABLE, !BOOLEAN, // 读写      
                null // 属性描述子
        ); 
        //////////////////////////////////////////////////////////////////
        //                        方法                                        //
        //////////////////////////////////////////////////////////////////
        //构造 printHello()操作的信息       
        ModelMBeanOperationInfo print1Info = new ModelMBeanOperationInfo(//
                "printHello", //
                null, //  
                null, //
                "void", //  
                MBeanOperationInfo.INFO, //    
                null //
        ); 
        // 构造printHello(String whoName)操作信息     
        ModelMBeanOperationInfo print2Info;
        MBeanParameterInfo[] param2 = new MBeanParameterInfo[1];
        param2[0] = new MBeanParameterInfo("whoName", STRING_CLASS, "say hello to who");
        print2Info = new ModelMBeanOperationInfo(//
                "printHello", //
                null,//
                param2,//
                "void", //
                MBeanOperationInfo.INFO, //
                null//
        ); 
        //////////////////////////////////////////////////////////////////
        //                        最后总合                                    //
        //////////////////////////////////////////////////////////////////
        // create ModelMBeanInfo       
        ModelMBeanInfo mbeanInfo = new ModelMBeanInfoSupport(//
                RequiredModelMBean.class.getName(), // MBean类
                null, // 描述文字     
                new ModelMBeanAttributeInfo[] { // 所有的属性信息(数组)
                nameAttrInfo },//只有一个属性
                null, // 所有的构造函数信息  
                new ModelMBeanOperationInfo[] { // 所有的操作信息(数组)
                        print1Info,
                        print2Info },//
                null, // 所有的通知信息(本例无)
                null//MBean描述子
        );
        return mbeanInfo;
    }
} 

 3.HelloAgent

接下来是HelloAgent的写法,和以前就差一句:把“new Hello()”这一句删除了,加上了ModelMbeanUtils.createModlerMbean();

package jmx.modelbean;

import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.modelmbean.RequiredModelMBean;
import com.sun.jdmk.comm.HtmlAdaptorServer;

public class HelloAgent {
	public static void main(String[] args) throws Exception {
		MBeanServer server = MBeanServerFactory.createMBeanServer();
		ObjectName helloName = new ObjectName("chengang:name=HelloWorld");
		// Hello hello = new Hello();
		RequiredModelMBean hello = ModelMBeanUtils.createModlerMBean();
		server.registerMBean(hello, helloName);
		ObjectName adapterName = new ObjectName(
				"HelloAgent:name=htmladapter,port=8082");
		HtmlAdaptorServer adapter = new HtmlAdaptorServer();
		server.registerMBean(adapter, adapterName);
		adapter.start();
		System.out.println("start.....");
	}
} 

  

4.总结

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

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

分享到:
评论

相关推荐

    Model MBean Instrumentor-开源

    JMX Instrumentor 是一个微型 Java 工具,用于将任意对象检测为 JMX 模型 MBean。 它通过反射检查对象的类并构造相应的 ModelMBeanInfo。 甚至可以通过特殊的 JMX 注释来改进此信息。

    扩展Spring的JMX支持

    虽然Spring框架的JMX管理基础架构的默认配置已经很不错了,但是仍然有定制的余地,特别是涉及ModelMBean提供的更高层功能时。在本文中,我使用了一种相对简单的操作——为基于Spring的应用程序的方法

    How Tomcat Works: A Guide to Developing Your Own Java Servlet Container

    20.4.2 ModelMBean实例 161 20.5 Commons Modeler 161 20.5.1 MBean描述符 162 20.5.1.1 mbean 162 20.5.1.2 attribute 163 20.5.1.3 operation 163 20.5.1.4 parameter 163 20.5.2 mbean标签实例 164 20.5.3 自己...

    how-tomcat-works

    20.4.2 ModelMBean实例 161 20.5 Commons Modeler 161 20.5.1 MBean描述符 162 20.5.1.1 mbean 162 20.5.1.2 attribute 163 20.5.1.3 operation 163 20.5.1.4 parameter 163 20.5.2 mbean标签实例 164 20.5.3 自己...

    JAVA_API1.6文档(中文)

    javax.management.modelmbean 提供了 ModelMBean 类的定义。 javax.management.monitor 提供 monitor 类的定义。 javax.management.openmbean 提供开放数据类型和 Open MBean 描述符类。 javax.management....

    java jdk-api-1.6 中文 chmd

    javax.management.modelmbean 提供了 ModelMBean 类的定义。 javax.management.monitor 提供 monitor 类的定义。 javax.management.openmbean 提供开放数据类型和 Open MBean 描述符类。 javax.management....

    [Java参考文档].JDK_API 1.6

    javax.management.modelmbean 提供了 ModelMBean 类的定义。 javax.management.monitor 提供 monitor 类的定义。 javax.management.openmbean 提供开放数据类型和 Open MBean 描述符类。 javax.management.relation ...

    Java 1.6 API 中文 New

    javax.management.modelmbean 提供了 ModelMBean 类的定义。 javax.management.monitor 提供 monitor 类的定义。 javax.management.openmbean 提供开放数据类型和 Open MBean 描述符类。 javax.management.relation ...

    java api最新7.0

    javax.management.modelmbean 提供了 ModelMBean 类的定义。 javax.management.monitor 提供 monitor 类的定义。 javax.management.openmbean 提供开放数据类型和 Open MBean 描述符类。 javax.management.relation ...

    JDK_1_6 API

    javax.management.modelmbean 提供了 ModelMBean 类的定义。 javax.management.monitor 提供 monitor 类的定义。 javax.management.openmbean 提供开放数据类型和 Open MBean 描述符类。 javax.management.relation...

    JavaAPI1.6中文chm文档 part1

    javax.management.modelmbean 提供了 ModelMBean 类的定义。 javax.management.monitor 提供 monitor 类的定义。 javax.management.openmbean 提供开放数据类型和 Open MBean 描述符类。 javax.management....

    JavaAPI中文chm文档 part2

    javax.management.modelmbean 提供了 ModelMBean 类的定义。 javax.management.monitor 提供 monitor 类的定义。 javax.management.openmbean 提供开放数据类型和 Open MBean 描述符类。 javax.management....

    [Java参考文档]

    javax.management.modelmbean 提供了 ModelMBean 类的定义。 javax.management.monitor 提供 monitor 类的定义。 javax.management.openmbean 提供开放数据类型和 Open MBean 描述符类。 javax.management....

    JavaSE-6.0-英文手册(2008/11/30_FullUpdate)

    javax.management.modelmbean javax.management.monitor javax.management.openmbean javax.management.relation javax.management.remote javax.management.remote.rmi javax.management.timer javax.naming...

    The JBoss 4 Application Server Guide

    Notification Model ...........................................................................................20 2.1.4.3. MBean Metadata Classes .........................................................

Global site tag (gtag.js) - Google Analytics