JMX初体验

      这些天在看《How Tomcat Works》这本书。里面讲到了JMX的内容。对我来说是个新知识点。

      JMX--Java Management Extensions,即Java管理扩展,是一个为应用程序、设备、系统等植入管理功能的框架。

JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应

用。可以非常容易的管理应用程序。许多基于服务器的应用程序(Tomcat, JBoss)都使用了JMX技术来管理各自的资源。

 
1.Architectural Overview

■ Instrumentation level(设备层)---定义了编写可由JMX管理的资源的标准,也就是如果编写MBean。
■ Agent level(代理层)---定义了创建代理的规范。代理封装了MBean服务器,提供了处理MBean的服务。API提供了创建默认MBean服务器的方法。
■ Distributed services level(分布式服务层)
■ Additional management protocol APIs(附加管理协议API)

 

 

2.MBean类型

其灵活性由低到高:标准类型,动态类型,开放类型,模型类型。

3.重要的类(在javax.management包及子包下)

MBean服务器是MBeanServer接口的实例。可通过 MBeanServerFactory.createMBeanServer()创建。

要将一个MBean注册到MBeanServer中,可以调用MBeanServer.registerMBean(Object o,ObjectName on)方法。

ObjectName唯一标识MBean。ObjectName由域和键值对组成。如 domain: key1 = value1 , key2 = value2

4.标准类型MBean演示

1 package com.ling;
2 
3 public interface CarMBean {
4      String getColor();
5      void  setColor(String color);
6      void drive();
7      
8 }
View Code
 1 package com.ling;
 2 
 3 public class Car implements CarMBean {
 4 
 5     private String color = "red";
 6     @Override
 7     public String getColor() {
 8         // TODO Auto-generated method stub
 9         return color;
10     }
11 
12     @Override
13     public void setColor(String color) {
14         // TODO Auto-generated method stub
15         this.color = color;
16     }
17 
18     @Override
19     public void drive() {
20         // TODO Auto-generated method stub
21          System.out.println("baby drive my car");
22     }
23 
24 }
View Code
 1 package com.ling;
 2 
 3 
 4 public class StandarAgent {
 5      private MBeanServer mBeanServer = null;
 6      public StandarAgent( ){
 7          this.mBeanServer = MBeanServerFactory.createMBeanServer();
 8      }
 9      
10      public MBeanServer getmBeanServer() {
11          return mBeanServer;
12      }
13      public void setmBeanServer(MBeanServer mBeanServer) {
14          this.mBeanServer = mBeanServer;
15      }
16      
17      public ObjectName createObjectName(String name){
18          ObjectName objectName = null;
19          try {
20             objectName = new ObjectName(name);
21         } catch (MalformedObjectNameException e) {
22             
23             e.printStackTrace();
24         } catch (NullPointerException e) {
25             
26             e.printStackTrace();
27         }
28         return objectName;
29      }
30      
31      private void createStandarBean(ObjectName objectName,String managedClassName){
32          try {
33             mBeanServer.createMBean(managedClassName, objectName);
34           } catch (Exception e) {
35             
36             e.printStackTrace();
37         } 
38      }
39      
40      public static void main(String [] args){
41          StandarAgent agent = new StandarAgent();
42          MBeanServer mBeanServer = agent.getmBeanServer();
43          String managedClassName = "com.ling.Car";
44          ObjectName objectName = agent.createObjectName("ling:type="+managedClassName);
45          System.out.println(objectName.getDomain());
46          agent.createStandarBean(objectName, managedClassName);
47          
48          try {
49             Attribute colorAttribute = new Attribute("Color", "red");
50             mBeanServer.setAttribute(objectName, colorAttribute);
51             System.out.println(mBeanServer.getAttribute(objectName, "color"));
52             mBeanServer.invoke(objectName, "drive", null, null);
53             
54         } catch (Exception e) {
55             e.printStackTrace();
56         }
57      }
58      
59     
60 }
View Code
原文地址:https://www.cnblogs.com/yuyutianxia/p/3230335.html