http://www.blogjava.net/hengheng123456789/articles/65690.html html
关于jmx的概述,能够参考 JMXjava
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX能够跨越一系列异构操做系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。(清空缓存、从新加载配置文件、远程调用等)浏览器
问题:应用有配置信息,好比服务的IP地址,端口号,链接池等,如何配?缓存
1. 程序初哥通常是写死在程序里,到要改变时就去改程序,而后再编译发布;
2. 程序熟手则通常把这些信息写在一个配置文件里(JAVA通常都是*.properties文件),到要改变时只要改配置文件,但仍是从新启动系统,以便读取配置文件里的新值;
3. 程序好手则会写一个段代码,把配置值缓存起来,系统在读值的时候,先看看配置文件有没有更动。若有更改则重读一遍,不然从缓存里读取值
4. 程序高手则懂得取物为我所用,用JMX!把配置属性集中在一个类,而后写一个叫MBean的东东,再配置一下就轻松搞定了。并且JMX自动提供了一个WEB页面来给你来改变这些配置信息。tomcat
jar包网络
一、JDK1.三、1.4
去SUN网站下载SUN的JMX实现,共两个ZIP文件,下载网址:http://java.sun.com/products/JavaManagement/download.html。
(1)jmx-1_2_1-ri.zip
解压后的lib目录包含:jmxri.jar、jmxtools.jar
(2)jmx_remote-1_0_1_03-ri.zip
解压后的lib目录包含:jmxremote.jar、jmxremote_optional.jar、rmissl.jar
若是在DOS下用命令行开发,则把这五个JAR包加入到classpath系统变量中。若是你用Eclipse开发,则把JAR包加入到项目属性的Libratries(库)引用中。
二、JDK5.0
JDK5.0的jre\lib\rt.jar已经包含了jmxri.jar、jmxremote.jar、rmissl.jar三个包的代码。若是你用到jmxtools.jar、jmxremote_optional.jar的类,则须要将这两个类加入到classpath或 Eclipse的项目库引用中。框架
访问 http://maven.ibiblio.org/maven/mule/dependencies/jmxri/jmxtools/1.2/dom
下载jmxtools,配置到工程里maven
codeide
/** * MBean * 包含在MBean中方法都将是能够被管理的。MBean起名是有规范的,就是原类名后加上MBean字样 */ public interface HelloWorldMBean { void setGreeting(String greeting); String getGreeting(); void printGreeting(); String status(); void start(); void stop(); void printHello(String message); } /** * 须要被管理的类(普通类) */ public class HelloWorld implements HelloWorldMBean { private String greeting = null; public HelloWorld(String greeting) { this.greeting = greeting; } public HelloWorld() { this.greeting = "Hello World! I am Standard MBean"; } @Override public void setGreeting(String greeting) { this.greeting = greeting; System.out.println("setGreeting : " + this.greeting); } @Override public String getGreeting() { System.out.println("getGreeting : " + this.greeting); return greeting; } @Override public void printGreeting() { System.out.println(greeting); } @Override public String status() { return greeting; } @Override public void start() { //do nothing } @Override public void stop() { //do nothing } @Override public void printHello(String message) { System.out.println("hi, " + message); } } public class HelloAgent { public static void main(String[] args) throws Exception { // 建立一个MBeanServer做为MBean容器,设定MBeanServer的域名为'HelloAgent' //MBeanServer mbs = MBeanServerFactory.createMBeanServer("i.love.you");//jconsole看不到 MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();//jconsole看获得 HelloWorld hello = new HelloWorld(); /** * MBeanServer中注册的每个在MBean组件都有一个惟一的对象名称标识ObjectName,一个ObjectName包含两个部分, * 域和属性键值对,格式为 "domain:type=MBeanName ,如“com.jmx.demo:type=Hello", * domain和MBeanName能够随意命名 */ ObjectName helloName = new ObjectName("HelloAgent:name=helloWorld"); //注册MBean mbs.registerMBean(hello, helloName); // 建立一个HTML适配器AdaptorServer,用来和JMX代理交互,HTML适配器提供了使用Web客户端侵入JMX代理的方式。AdaptorServer同时做为MBean注册在MBeanServer里 ObjectName adapterName = new ObjectName("HelloAgent:name=htmlAdapter"); HtmlAdaptorServer adapter = new HtmlAdaptorServer(); //adapter.setPort(9092); mbs.registerMBean(adapter, adapterName); adapter.start(); //当使用jconsole时,htmlAdaptorServer做用等价于 Thread.sleep(Integer.MAX_VALUE); System.out.println("HelloAgent is running"); } }
run main
访问方式 一
浏览器访问 : http://localhost:8082/ ,出现以下:
这种界面和tomcat的控制台 很相似
在搜索框里输入 : HelloAgent:name=helloWorld ,结果以下
点击 name=helloWorld
修改 1 处的值,点击 2 ,控制台会有setter,getter的输出。
点击 3 ,控制台输出 greeting 的值
访问方式 二
win + r -----> cmd
netstat -ano|findstr 8082 : 寻找占用8082端口的pid
----->jconsole
在实际系统中咱们能够把name变成决定数库连接池的变量,这样我就能够对系统的运行参数进行实现的监控和配置(管理)。并且也能够对一些方法(如printHello)进行远程调用了。