JMX中模型Mbean的学习应用

                    在网上看到JMX可以监控JBOSS,TOMCat,WebLogic等服务器主机的各种信息,所以学习一下JMX的。

采用模型MBean开发JMX。

首先开发对应相关的JMX模型bean类对象

package com.easyway.apache.moduler.jmx;
/**
 * 备注此处的JMX没有实现相关的XxxMBean的接口
 * @author longgangbai
 *
 */
public interface IEasywayService {

	public abstract void printHello();

	public abstract void printHello(String whoName);

}

 

package com.easyway.apache.moduler.jmx;
/**
 * 备注此处的JMX没有实现相关的XxxMBean的接口
 * @author longgangbai
 *
 */
public class EasywayService implements IEasywayService {

	private String serviceName;

	public String getServiceName() {
		return serviceName;
	}

	public void setServiceName(String serviceName) {
		this.serviceName = serviceName;
	}

	/* (non-Javadoc)
	 * @see com.easyway.apache.moduler.jmx.IEasywayService#printHello()
	 */
	public void printHello() {
		System.out.println("Hello World, " + serviceName);
	}

	/* (non-Javadoc)
	 * @see com.easyway.apache.moduler.jmx.IEasywayService#printHello(java.lang.String)
	 */
	public void printHello(String whoName) {
		System.out.println("Hello , " + serviceName);
	}

}

 创建构建模型MBean对象

package com.easyway.apache.moduler.jmx;

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;

/**
 * 创建ModelBean的各种信息
 * @author longgangbai
 * 
 *
 */
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";

    /**
     * 
     * @return
     */
    public static RequiredModelMBean createModlerMBean() {
        RequiredModelMBean model = null;
        try {
            model = new RequiredModelMBean();
            //注入相关的服务类
            model.setManagedResource(new EasywayService(), "ObjectReference");
            
            ModelMBeanInfo info = createModelMBeanInfo();
            model.setModelMBeanInfo(info);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return model;
    }

    /**
     * 创建ModelBean的过程
     * @return
     */
    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;
    }
}


 

 

创建JMX中模型MBean的Agent代理对象

package com.easyway.apache.moduler.jmx;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.modelmbean.RequiredModelMBean;

import com.sun.jdmk.comm.HtmlAdaptorServer;
/**
 * JMX代理测试ModelBean的应用
 * @author longgangbai
 * 
 * 备注:
 * 模型Mbean(Model MBean):动态可以配置
 * 动态bean
 * 标准MBean(standard mbean):
 *
 */
public class EasywayServiceModelBeanAgent {
	

	    public static void main(String[] args) throws Exception {
	    	MBeanServer server = MBeanServerFactory.createMBeanServer();
	        ObjectName helloName = new ObjectName("easyway:name=HelloWorld");
	        //获取测试bean的信息
	        RequiredModelMBean hello = ModelMBeanUtils.createModlerMBean();
	        //注册MBean对象
	        server.registerMBean(hello, helloName);
	        //获取对象的
	        ObjectName adapterName = new ObjectName("EasywayServiceModelBeanAgent:name=htmladapter,port=8082");
	        HtmlAdaptorServer adapter = new HtmlAdaptorServer();
	       //注册
	        server.registerMBean(adapter, adapterName);
	        adapter.start();
	        System.out.println("start.....");

	    }
	}

 

你可能感兴趣的:(apache,tomcat,bean,应用服务器,weblogic)