JMX(5) Model Mbean

6636 단어 Model
1.Hello
Hello.자바는 여전히 예전과 같다.여기에 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
Model Mbean Utils라는 클래스는 우리 스스로 실현해야 하는 것이고 모델 Bean을 쓰는 가장 번거로운 부분이다. 이것은 주로 Required Model Mbean 클래스로 돌아가는 것이다. 이런 종류는 Model Mbean Info 클래스의 정보를 포함한다.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
다음은 Hello Agent의 쓰기 방법입니다. 이전과 한 마디 차이입니다.'new Hello()'라는 문장을 삭제하고 Model Mbean Utils를 추가했습니다.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류의 방법 논리를 스스로 실현해야 한다.

좋은 웹페이지 즐겨찾기