JMX MBeans之一Standard MBean
这种类型的MBean最简单,它能管理的资源(包括属性,方法,时间)必须定义在接口中,然后MBean必须实现这个接口。而且这个MBean实现类中,必须至少有一个public的构造函数。
而且类中的getter和setter函数必须遵守命名标准。
类的命名也必须遵循一定的规范,例如我们的MBean为Hello,则接口必须为HelloMBean,而且是大小写敏感的。如果不这么做,可能会有javax.management.NotCompliantMBeanException抛出。
接口为:
public interface HelloWorldMBean
{
public void setGreeting( String greeting );
public String getGreeting();
public void printGreeting();
}
MBean的类实现它:
public class HelloWorld implements HelloWorldMBean
{
private String greeting = null;
public HelloWorld()
{
this.greeting = "Hello World! I am a Standard MBean";
}
public HelloWorld( String greeting )
{
this.greeting = greeting;
}
public void setGreeting( String greeting )
{
this.greeting = greeting;
}
public String getGreeting()
{
return greeting;
}
public void printGreeting()
{
System.out.println( greeting );
}
}
下面编写agent
1: 创建 MBeanServer
2:创建一个adapter
3:将MBean注册到MBeanServer,同时将adapter也注册到MBeanServer
4: 启动adapter
import javax.management.*;
import com.sun.jdmk.comm.*;
public class HelloAgent
{
private MBeanServer mbs = null;
public HelloAgent()
{
mbs = MBeanServerFactory.createMBeanServer( "HelloAgent" );
HtmlAdaptorServer adapter = new HtmlAdaptorServer();
HelloWorld hw = new HelloWorld();
ObjectName adapterName = null;
ObjectName helloWorldName = null;
try
{
helloWorldName = new ObjectName( "HelloAgent:name=helloWorld1" );
mbs.registerMBean( hw, helloWorldName );
adapterName = new ObjectName( "HelloAgent:name=htmladapter,port=9092" );
adapter.setPort(9092);
mbs.registerMBean(adapter, adapterName );
adapter.start();
}
catch( Exception e )
{
e.printStackTrace();
}
}
public static void main( String args[] )
{
System.out.println( "HelloAgent is running" );
HelloAgent agent = new HelloAgent();
}
}
上面的代码使用了sun的一个adapter:HtmlAdaptorServer,位于com.sun.jdmk.comm包中,
使得html客户端可以管理MBean server。
注意ObjectName类,这个class为MBean提供命名系统,为注册在MBean server中的每个MBean提供唯一的标识。它的书写规则是这样的:"A Domain name:key=value,key2=value2",每个名字包括两个部分:
A Domain name--这个名字通常是这个MBean所要注册的MBeanServer的domain name.如果不是的话,往往都是为了将之与其它的MBeans分开所致.
key=value--属性名称/值对,用来唯一的标识一个MBean,经常也用来提供Mbean的信息,常用的有name,port值,location,purpose等等。
因为createMBeanServer方法中我们使用了参数"HelloAgent",因此后面的Domain names必须为HelloAgent。
运行将jmx的包放到classpath中,运行HelloAgent类,然后通过浏览器访问http://localhost:9092即可。