JMX学习笔记(三)-MXBean

 

在MBean中有只要遵循以下两个规则,我们就可以在jconsole中动态的改变MBean中的属性值

1. JMX中要定义接口必须以xxxMBean的规范定义

2. 得有类实现xxxMBean接口

 

例如:

 

Java代码
  1. package com.haitao.jmx.mxbean;   
  2.   
  3. /**  
  4.  * Server Configure MBean  
  5.  *   
  6.  * @author haitao.tu  
  7.  *  
  8.  */  
  9. public interface ServerConfigureMBean {   
  10.   
  11.     public int getPort();   
  12.   
  13.     public void setPort(int port);   
  14.   
  15.     public String getHost();   
  16.   
  17.     public void setHost(String host);   
  18.   
  19.     public int getMaxThread();   
  20.   
  21.     public void setMaxThread(int maxThread);   
  22.   
  23.     public int getMinThread();   
  24.   
  25.     public void setMinThread(int minThread);   
  26.        
  27. }  

 

 

接着实现这个MBean:

 

 

Java代码
  1. package com.haitao.jmx.mxbean;   
  2.   
  3.   
  4. /**  
  5.  * Server Configure  
  6.  *   
  7.  * @author haitao.tu  
  8.  *  
  9.  */  
  10. public class ServerConfigure implements ServerConfigureMBean {   
  11.   
  12.     private int port;   
  13.        
  14.     private String host;   
  15.        
  16.     private int maxThread;   
  17.        
  18.     private int minThread;   
  19.        
  20.     public ServerConfigure(int port, String host, int maxThread, int minThread) {   
  21.         this.port = port;   
  22.         this.host = host;   
  23.         this.maxThread = maxThread;   
  24.         this.minThread = minThread;   
  25.     }   
  26.   
  27.     public int getPort() {   
  28.         return port;   
  29.     }   
  30.   
  31.     public void setPort(int port) {   
  32.         this.port = port;   
  33.     }   
  34.   
  35.     public String getHost() {   
  36.         return host;   
  37.     }   
  38.   
  39.     public void setHost(String host) {   
  40.         this.host = host;   
  41.     }   
  42.   
  43.     public int getMaxThread() {   
  44.         return maxThread;   
  45.     }   
  46.   
  47.     public void setMaxThread(int maxThread) {   
  48.         this.maxThread = maxThread;   
  49.     }   
  50.   
  51.     public int getMinThread() {   
  52.         return minThread;   
  53.     }   
  54.   
  55.     public void setMinThread(int minThread) {   
  56.         this.minThread = minThread;   
  57.     }   
  58.        
  59. }  

 

测试:

 

Java代码
  1. package com.haitao.jmx.mxbean;   
  2.   
  3. import java.lang.management.ManagementFactory;   
  4.   
  5. import javax.management.MBeanServer;   
  6. import javax.management.ObjectName;   
  7.   
  8. /**  
  9.  * Server Test  
  10.  *   
  11.  * @author haitao.tu  
  12.  *  
  13.  */  
  14. public class ServerTest {   
  15.   
  16.     public static void main(String[] args) throws Exception {   
  17.         testServerConfigureMBean();   
  18.     }   
  19.        
  20.     public static void testServerConfigureMBean() throws Exception {   
  21.         MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();   
  22.   
  23.         ServerConfigure serverConfigure = new ServerConfigure(8080,   
  24.                 "test.haitao.com"20100);   
  25.   
  26.         ObjectName serverName = new ObjectName(   
  27.                 "com.haitao.jmx.mxbean:type=ServerConfigure");   
  28.         mbs.registerMBean(serverConfigure, serverName);   
  29.         System.out.println("Waiting...");   
  30.         Thread.sleep(Long.MAX_VALUE);   
  31.     }   
  32.   
  33. }  

 

打开jconsole:

 

但是以上这些ServerConfigure的属性都是基本类型,包含在java.lang.*里,设想,如果说jconsole在类外一个远端的jvm上,如果这里的属性是一个自定义对象,远端的jvm可能不知道该类型的对象:

 

修改上边的ServerConfigre,使他成为一个聚合对象,去掉ServerConfigureMBean接口实现:

 

 

Java代码
  1. package com.haitao.jmx.mxbean;   
  2.   
  3.   
  4. /**  
  5.  * Server Configure  
  6.  *   
  7.  * @author haitao.tu  
  8.  *  
  9.  */  
  10. public class ServerConfigure {   
  11.   
  12.     private int port;   
  13.        
  14.     private String host;   
  15.        
  16.     private int maxThread;   
  17.        
  18.     private int minThread;   
  19.        
  20.     public ServerConfigure(int port, String host, int maxThread, int minThread) {   
  21.         this.port = port;   
  22.         this.host = host;   
  23.         this.maxThread = maxThread;   
  24.         this.minThread = minThread;   
  25.     }   
  26.   
  27.     public int getPort() {   
  28.         return port;   
  29.     }   
  30.   
  31.     public void setPort(int port) {   
  32.         this.port = port;   
  33.     }   
  34.   
  35.     public String getHost() {   
  36.         return host;   
  37.     }   
  38.   
  39.     public void setHost(String host) {   
  40.         this.host = host;   
  41.     }   
  42.   
  43.     public int getMaxThread() {   
  44.         return maxThread;   
  45.     }   
  46.   
  47.     public void setMaxThread(int maxThread) {   
  48.         this.maxThread = maxThread;   
  49.     }   
  50.   
  51.     public int getMinThread() {   
  52.         return minThread;   
  53.     }   
  54.   
  55.     public void setMinThread(int minThread) {   
  56.         this.minThread = minThread;   
  57.     }   
  58.        
  59. }  
 

新建一个ServerMBean接口:

 

Java代码
  1. package com.haitao.jmx.mxbean;   
  2.   
  3. /**  
  4.  * Server MBean  
  5.  *   
  6.  * @author haitao.tu  
  7.  *  
  8.  */  
  9. public interface ServerMBean {   
  10.        
  11.     public ServerConfigure getServerConfigure();   
  12.        
  13.     public void setServerConfigure(ServerConfigure serverConfigure);   
  14.        
  15.     public void defaultServerConfigure();   
  16.        
  17. }  

 

实现ServerMBean并封装ServerConfigure类:

 

Java代码
  1. package com.haitao.jmx.mxbean;   
  2.   
  3. /**  
  4.  * Server  
  5.  *   
  6.  * @author haitao.tu  
  7.  *  
  8.  */  
  9. public class Server implements ServerMBean {   
  10.        
  11.     /**  
  12.      * 封装  
  13.      */  
  14.     private ServerConfigure serverConfigure;   
  15.        
  16.     public Server(ServerConfigure serverConfigure) {   
  17.         this.serverConfigure = serverConfigure;   
  18.     }   
  19.        
  20.     @Override  
  21.     public ServerConfigure getServerConfigure() {   
  22.         synchronized (serverConfigure) {   
  23.             return this.serverConfigure;   
  24.         }   
  25.     }   
  26.        
  27.     @Override  
  28.     public void setServerConfigure(ServerConfigure serverConfigure) {   
  29.         synchronized (serverConfigure) {   
  30.             this.serverConfigure = serverConfigure;   
  31.         }   
  32.     }   
  33.        
  34.     @Override  
  35.     public void defaultServerConfigure() {   
  36.         synchronized (serverConfigure) {   
  37.             serverConfigure.setPort(80);   
  38.             serverConfigure.setHost("www.haitao.com");   
  39.             serverConfigure.setMinThread(10);   
  40.             serverConfigure.setMaxThread(500);   
  41.         }   
  42.     }   
  43.        
  44. }  

 

测试:

 

Java代码
  1. package com.haitao.jmx.mxbean;   
  2.   
  3. import java.lang.management.ManagementFactory;   
  4.   
  5. import javax.management.MBeanServer;   
  6. import javax.management.ObjectName;   
  7.   
  8. /**  
  9.  * Server Test  
  10.  *   
  11.  * @author haitao.tu  
  12.  *  
  13.  */  
  14. public class ServerTest {   
  15.   
  16.     public static void main(String[] args) throws Exception {   
  17.         testServerMBean();   
  18.     }   
  19.        
  20.     public static void testServerMBean() throws Exception {   
  21.         MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();   
  22.   
  23.         ServerConfigure serverConfigure = new ServerConfigure(8080,   
  24.                 "test.haitao.com"20100);   
  25.   
  26.         Server server = new Server(serverConfigure);   
  27.   
  28.         ObjectName serverName = new ObjectName(   
  29.                 "com.haitao.jmx.mxbean:type=Server");   
  30.         mbs.registerMBean(server, serverName);   
  31.         System.out.println("Waiting...");   
  32.         Thread.sleep(Long.MAX_VALUE);   
  33.     }   
  34.   
  35. }  

 

打开jconsole查看:

 

为了让与远端JVM认识该对象,我们需要将ServerMbean改为ServerMXBean,并使用java.beans.ConstructorProperties注解告诉JVM怎样组装该对象:

 

1. 使用java.beans.ConstructorProperties注解:

 

Java代码
  1. package com.haitao.jmx.mxbean;   
  2.   
  3. import java.beans.ConstructorProperties;   
  4.   
  5. /**  
  6.  * Server Configure  
  7.  *   
  8.  * @author haitao.tu  
  9.  *  
  10.  */  
  11. public class ServerConfigure {   
  12.   
  13.     private int port;   
  14.        
  15.     private String host;   
  16.        
  17.     private int maxThread;   
  18.        
  19.     private int minThread;   
  20.        
  21.     /**  
  22.      * 加入@ConstructorPropertiesz注解  
  23.      */  
  24.     @ConstructorProperties({"port""host""maxThread""minThread"})   
  25.     public ServerConfigure(int port, String host, int maxThread, int minThread) {   
  26.         this.port = port;   
  27.         this.host = host;   
  28.         this.maxThread = maxThread;   
  29.         this.minThread = minThread;   
  30.     }   
  31.   
  32.     public int getPort() {   
  33.         return port;   
  34.     }   
  35.   
  36.     public void setPort(int port) {   
  37.         this.port = port;   
  38.     }   
  39.   
  40.     public String getHost() {   
  41.         return host;   
  42.     }   
  43.   
  44.     public void setHost(String host) {   
  45.         this.host = host;   
  46.     }   
  47.   
  48.     public int getMaxThread() {   
  49.         return maxThread;   
  50.     }   
  51.   
  52.     public void setMaxThread(int maxThread) {   
  53.         this.maxThread = maxThread;   
  54.     }   
  55.   
  56.     public int getMinThread() {   
  57.         return minThread;   
  58.     }   
  59.   
  60.     public void setMinThread(int minThread) {   
  61.         this.minThread = minThread;   
  62.     }   
  63.        
  64. }  

 2. 修改ServerMbean为ServerMXBean:

 

Java代码
  1. package com.haitao.jmx.mxbean;   
  2.   
  3. /**  
  4.  * Server MXBean  
  5.  *   
  6.  * @author haitao.tu  
  7.  *  
  8.  */  
  9. public interface ServerMXBean {   
  10.        
  11.     public ServerConfigure getServerConfigure();   
  12.        
  13.     public void setServerConfigure(ServerConfigure serverConfigure);   
  14.        
  15.     public void defaultServerConfigure();   
  16.        
  17. }  
 

测试代码一样,就不再重复,最后运行测试,查看jconsole:

 

 

双击值,我们将会看到:

 

实际上MXBean的概念很简单,就是定义xxxMXBean接口,然后实现这个接口,与MBean类似,

 

为了阐述这个MXBean与MBean的不同才列出这么多代码,希望大家能理解:)

 

本文原帖:http://tuhaitao.javaeye.com/blog/807398

你可能感兴趣的:(java,exception,String,server,jmx,interface)