首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

jmx范例

2012-11-16 
jmx实例一共4个类,ServerMonitorAgent提供了3种连接方式,直接上例子,可以看出来jmx基于rmi??/** * @author

jmx实例

一共4个类,ServerMonitorAgent提供了3种连接方式,直接上例子,可以看出来jmx基于rmi

?

?

/** * @author river.wang */public interface ServerMonitorMBean {    public long getUptime();    public String getMemory();}

?

?

/** * ServerMonitor只能比接口少"MBean"这5个字母,不能写为ServerMonitorImpl * @author river.wang */public class ServerMonitor implements ServerMonitorMBean{    private final long startTime;    private Runtime runtime = Runtime.getRuntime();    public ServerMonitor() {        startTime = System.currentTimeMillis();    }    public long getUptime() {        return System.currentTimeMillis()-startTime;    }    public String getMemory() {        float freeMemory = (float)runtime.freeMemory();        float totalMemory = (float)runtime.totalMemory();        String memory = "idle scale : "+(freeMemory/totalMemory)+"%; freeMemory="            +(freeMemory)/1024+" KB; totalMemory="+(totalMemory)/1024+" KB" ;        return memory;    }}

?

?

?

/** * @author river.wang */public class ServerMonitorAgent {    public static void main( String[] args ) throws Exception {        //在指定端口上启动远程对象注册服务程序,启用RMI,对应于 JAVA_HOME/bin/rmiregistry.exe         LocateRegistry.createRegistry(9999);         //MBeanServer        MBeanServer server=MBeanServerFactory.createMBeanServer();          //被管理的bean        ObjectName monitorName = new ObjectName( "river:type=ServerMonitorMBean,name=serverMonitor" );        server.registerMBean( new ServerMonitor(), monitorName );                //打开远程连接服务,可以用jconsole连接,或者自己写client连接        JMXServiceURL url=new JMXServiceURL("service:jmx:rmi:///jndi/rmi://127.0.0.1:9999/serverMonitor");          JMXConnectorServer cs=JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);          cs.start();                 //打开HtmlAdaptorServer服务,在浏览器输入http://localhost:8899进行连接,依赖jmxtools.jar,可以在附件中下载        HtmlAdaptorServer adapter = new HtmlAdaptorServer(8899);        server.registerMBean(adapter, new ObjectName("river:name=htmlAdapter"));        adapter.start();    }}

?

?

ServerMonitorMBean monitor = JMX.newMBeanProxy( ...,ServerMonitorMBean.class );

从jvm,classloader的角度看,client的ServerMonitorMBean和server端的不是一个类,最好在两台机器上或者jvm试试。 ? ?

?

/** * @author river.wang */public class ServerMonitorClient {    public static void main( String[] args )        throws Exception {        JMXConnector conn = JMXConnectorFactory.connect(             new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://127.0.0.1:9999/serverMonitor" ), null );        ServerMonitorMBean monitor = JMX.newMBeanProxy( conn.getMBeanServerConnection(),             new ObjectName( "river:type=ServerMonitorMBean,name=serverMonitor" ),ServerMonitorMBean.class );                                    for ( int i = 0; i < 10; i++ ) {            System.out.println( monitor.getUptime() );            System.out.println( monitor.getMemory() );        }        conn.close();    }}

热点排行