这个简单的mbean只有一个属性和一个方法,stardbeandemomain 为调用类,main方法中调用下面三个方法,代码中都有详细的注释: sbean.doregistbean(); sbean.domanagebean(); sbean.reghtmladaptor();
运行后,可以看到控制台打印的信息,register standmbean sucess..attribute:state -init valueattribute:state 2 -new statemy service start…..
由于启动了htmladaptor的服务,所以程序一直处于运行状态,(htmladaptor是sun jmx实现自带的一个适配器)测试可以在浏览器中访问:http://localhost:8082 就可以在浏览器中管理mbean了,在list of mbean operations下面按startservice 按钮,可以看到控制台打出的信息,说明startservice方法被调用了。
/** * mbean接口 * standbeanmbean.java * @author zmxj */public interface standbeanmbean { public string getstate() ; public void setstate(string s) ; public void startservice();}
/** * mbean实现 * standbean.java * @author zmxj */public class standbean implements standbeanmbean {
private string state = "init value";
public string getstate() { return state; }
public void setstate(string s) { state = s; }
public void startservice() { system.out.println("my service start….."); }
}
import javax.management.attribute;import javax.management.attributenotfoundexception;import javax.management.instancenotfoundexception;import javax.management.invalidattributevalueexception;import javax.management.mbeanexception;import javax.management.mbeanserver;import javax.management.mbeanserverfactory;import javax.management.malformedobjectnameexception;import javax.management.objectname;import javax.management.reflectionexception;
import com.sun.jdmk.comm.htmladaptorserver;
/** * agent类 * stardbeandemomain.java * @author zmxj */public class stardbeandemomain {
private mbeanserver mbserver = null; objectname mbeanobjectname = null; string domain = null; string mbeanname = "standbean"; public static void main(string[] args) { stardbeandemomain sbean = new stardbeandemomain(); sbean.doregistbean(); sbean.domanagebean(); sbean.reghtmladaptor(); } /** * 创建mbeanserver并注册一个mbean */ private void doregistbean() { //创建mbeanserver mbserver = mbeanserverfactory.creatembeanserver(); domain = mbserver.getdefaultdomain();
try { mbeanobjectname = new objectname(domain + ":type=" + mbeanname); /* //这里可以直接创建并且同时注册一个mbean到mbeanserver. server.creatembean(mbeanname,mbeanobjectname); */ standbean bean = new standbean(); mbserver.registermbean(bean, mbeanobjectname); system.out.println("register standmbean sucess.."); } catch(malformedobjectnameexception e) { e.printstacktrace(); system.exit(1); } catch(exception e){ e.printstacktrace(); system.exit(1); } }
/* * 演示管理mbean,通过mbserver修改mbean的属性和执行mbean的方法 */ private void domanagebean() { try { objectname mbeanobjectname = new objectname(domain + ":type=" + mbeanname); system.out.println("attribute:state -"+mbserver.getattribute(mbeanobjectname,"state"));
//修改属性state attribute stateattribute = new attribute("state","new state"); mbserver.setattribute(mbeanobjectname, stateattribute); //取得属性值 system.out.println("attribute:state 2 -"+mbserver.getattribute(mbeanobjectname,"state")); //调用方法startservice mbserver.invoke(mbeanobjectname,"startservice",null,null); } catch (exception e) { e.printstacktrace(); } } /* * 注册htmladaptor,注册后可以通过http://localhost:8082执行mbean管理操作 */ private void reghtmladaptor() { htmladaptorserver html = new htmladaptorserver(); objectname html_name = null; try { html_name = new objectname("adaptor:name=html,port=8082"); mbserver.registermbean(html, html_name); } catch(exception e) { system.out.println("\t!!! could not create the html adaptor !!!"); e.printstacktrace(); return; } html.start(); }}
