博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hello JMX!
阅读量:7080 次
发布时间:2019-06-28

本文共 2572 字,大约阅读时间需要 8 分钟。

环境:
jdk-6u21-windows-i586.exe
jmx-1_2_1-ri.zip
网上流传一种说法是jdk5之后,在rt.jar中已经包含了JMX的参考实现,经本人验证,是谬传!jmx-1_2_1-ri.zip是SUN提供的JMX规范的一种参考实现。当然像JBOSS、WebLogic、WebSphere都有自己的实现方式。
 
下面结合JMX的规范,实现一个最简单的JMX应用。
 
一、定义MBean接口
 
/** 
* MBean接口,实现此接口的类中方法都将是可以被管理的。 
* MBean起名是有规范的,就是原类名后加上MBean字样 
* @author Administrator 2010-12-6 17:54:50 
*/
 

public 
interface HelloMBean { 

  
public 
void sayHello1(); 

  
public 
void sayHello2(String someone); 

  
public 
void sayHello3(String msg); 

}
 
二、定义MBean的实现类(被管理类)
 
/** 
* MBean实现类,被管理类 
* @author Administrator 2010-12-6 17:56:25 
*/
 

public 
class Hello 
implements HelloMBean{ 

        
private String saySomething; 

        
private String msg; 


        
public Hello() { 

                
this.saySomething = 
"Hello JMX!"

        } 


        
public Hello(String saySomething) { 

                
this.saySomething = saySomething; 

        } 


        public void sayHello1() { 
                System.out.println("Hello.sayHello1()被调用:"+saySomething); 
        } 
        public void sayHello2(String someone) { 
                System.out.println("Hello.sayHello2(String someone)被调用:Hello, " + someone+"! This is a JMX Application!"); 
        } 
        public void sayHello3(String msg) { 
                System.out.println("Hello.sayHello3(String msg)被调用:Hello, you input value="+msg); 
        } 

        
public String getSaySomething() { 

                
return saySomething; 

        } 


        
public 
void setSaySomething(String saySomething) { 

                
this.saySomething = saySomething; 

        } 


        
public String getMsg() { 

                
return msg; 

        } 


        
public 
void setMsg(String msg) { 

                
this.msg = msg; 

        } 

}
 
三、写JMX的代理进程类
 
import javax.management.MBeanServer; 

import javax.management.MBeanServerFactory; 

import javax.management.ObjectName; 


import com.sun.jdmk.comm.HtmlAdaptorServer; 


/** 
* JMX代理进程 
* Agent只是一个Java进程,它包括这个MBeanServer和一系列附加的MbeanService。 
* 当然这些Service也是通过MBean的形式来发布。 
* @author Administrator 2010-12-6 18:02:26 
*/
 

public 
class HelloAgent { 

        
public 
static 
void main(String[] args) 
throws Exception { 

                
//创建一个MBeanServer,用来做MBean的容器 

                MBeanServer server = MBeanServerFactory.createMBeanServer(); 

                
//创建一个ObjectName类的对象,表示MBean的对象名,此类的实例是不可变的。 

                
// 对象名的字符串表示形式格式为“域名:name=MBean名称” 

                ObjectName helloName = 
new ObjectName(
"domainName:name=Hello"); 

                
//将Hello这个类的对象注册到MBeanServer中 

                server.registerMBean(
new Hello(), helloName); 


                
//创建一个名为htmladapter的Adapter的ObjectName对象 

                ObjectName adapterName = 
new ObjectName(
"HelloAgent:name=htmladapter,port=6666"); 

                
//创建一个AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面 

                
//AdaptorServer其实也是一个MBean。 

                HtmlAdaptorServer adapter = 
new HtmlAdaptorServer(); 

                server.registerMBean(adapter, adapterName); 

                
//设置adapter的访问端口 

                adapter.setPort(6667); 

                
//启动代理进程 

                adapter.start(); 

                System.out.println(
"start....."); 

        } 

}
 
四、启动代理进程,通过页面调用MBean方法
 
 
 
 
 
 
 
 
 本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/447466,如需转载请自行联系原作者
你可能感兴趣的文章
js与多行字符串
查看>>
基于bootstrap的后台管理系统
查看>>
基于物联网的窨井盖监测系统
查看>>
隐藏书签与书签隐藏
查看>>
Java接口回调机制详解
查看>>
PHPCMS V9静态化HTML生成设置及URL规则优化
查看>>
Mysql命令大全
查看>>
转---c#,从不是创建它的线程访问
查看>>
Linq三种查询
查看>>
深入理解this对象
查看>>
inodes 100%情况解决办法
查看>>
mysql 5.6 调优
查看>>
动态菜单树加载过程
查看>>
计算机存储单位及网络传输单位
查看>>
linux安装jdk
查看>>
Oracle JOB 用法小结
查看>>
自动生成的当前时间与实际时间相差8个小时
查看>>
How to generate UML Diagrams from Java code in Eclipse
查看>>
day14 Python百分号字符串拼接
查看>>
day20 Python 高阶函数,函数,嵌套,闭包 装饰器
查看>>