一句话介绍JMX

what?

The Java Management Extensions (JMX) API is a standard API for management and monitoring of resources such as applications, devices, services, and the Java virtual machine.

一句话:对系统资源进行管理的规范API.

where to use?

ypical uses of the JMX technology include:

  • Consulting and changing application configuration
  • Accumulating statistics about application behavior and making them available
  • Notifying of state changes and erroneous conditions.

一句话 典型应用:改变、查看程序配置;收集计算程序行为数据;通知、告警。

import notion

An MBean is a managed Java object, similar to a JavaBeanTM, that follows the design patterns set forth in the instrumentation level of the JMX specification.

(4 kinds MBean)

- standard MBeans

- dynamic MBeans

- open MBeans

- model MBeans.

MBeans expose a management interface: a set of readable and/or writable attributes and a set of invokable operations, along with a self-description. The management interface does not change throughout the life of an MBean instance.

一句话 MBean是JMX的核心,MBean类似与javaBean,我们通过MBean暴漏出的接口去获取MBean所检测程序的各种信息。

standard MBean

A standard MBean is defined by writing a Java interface called SomethingMBean and a Java class called Something that implements that interface.

A standard MBean is composed of the MBean interface which lists the methods for all exposed attributes and operations, and the class which implements this interface and provides the functionality of the instrumented resource.

一句话,standard MBean 就是 一个实现了 接口:***MBean 的实现类(如TimerMBean,自己去看API docs),这里暴漏出获取信息的方法,以便活动你要的各种信息。

例子:

/* HelloMBean.java - MBean interface describing the management
   operations and attributes for the Hello World MBean.  In this case
   there are two operations, "sayHello" and "add", and two attributes,
   "Name" and "CacheSize". */

package com.example.mbeans;

public interface HelloMBean {
    // operations

    public void sayHello();
    public int add(int x, int y);

    // attributes

    // a read-only attribute called Name of type String
    public String getName();

    // a read-write attribute called CacheSize of type int
    public int getCacheSize();
    public void setCacheSize(int size);
}
/* Hello.java - MBean implementation for the Hello World MBean.
   This class must implement all the Java methods declared in the
   HelloMBean interface, with the appropriate behavior for each one.  */

package com.example.mbeans;

public class Hello implements HelloMBean {
    public void sayHello() {
    System.out.println("hello, world");
    }

    public int add(int x, int y) {
    return x + y;
    }

    /* Getter for the Name attribute.  The pattern shown here is
       frequent: the getter returns a private field representing the
       attribute value.  In our case, the attribute value never
       changes, but for other attributes it might change as the
       application runs.  Consider an attribute representing
       statistics such as uptime or memory usage, for example.  Being
       read-only just means that it can‘t be changed through the
       management interface.  */
    public String getName() {
    return this.name;
    }

    /* Getter for the CacheSize attribute.  The pattern shown here is
       frequent: the getter returns a private field representing the
       attribute value, and the setter changes that field.  */
    public int getCacheSize() {
    return this.cacheSize;
    }

    /* Setter for the CacheSize attribute.  To avoid problems with
       stale values in multithreaded situations, it is a good idea
       for setters to be synchronized.  */
    public synchronized void setCacheSize(int size) {
    this.cacheSize = size;

    /* In a real application, changing the attribute would
       typically have effects beyond just modifying the cacheSize
       field.  For example, resizing the cache might mean
       discarding entries or allocating new ones.  The logic for
       these effects would be here.  */
    System.out.println("Cache size now " + this.cacheSize);
    }

    private final String name = "Reginald";
    private int cacheSize = DEFAULT_CACHE_SIZE;
    private static final int DEFAULT_CACHE_SIZE = 200;
}
/* Main.java - main class for Hello World example.  Create the
   HelloWorld MBean, register it, then wait forever (or until the
   program is interrupted).  */

package com.example.mbeans;

import java.lang.management.*;
import javax.management.*;

public class Main {
    /* For simplicity, we declare "throws Exception".  Real programs
       will usually want finer-grained exception handling.  */
    public static void main(String[] args) throws Exception {
    // Get the Platform MBean Server   attention!
    MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

    // Construct the ObjectName for the MBean we will register
    ObjectName name = new ObjectName("com.example.mbeans:type=Hello");

    // Create the Hello World MBean
    Hello mbean = new Hello();

    // Register the Hello World MBean   attention!
    mbs.registerMBean(mbean, name);

    // Wait forever
    System.out.println("Waiting forever...");
    Thread.sleep(Long.MAX_VALUE);
    }
}

According to the JMX specification, an MBean interface consists of named and typed attributes that are readable and possibly writable, and named and typed operations that can be invoked by the applications that are managed by the MBean.

**一句话:

接口 以 **MBean 定义,并且这个MBean接口要写明 属性(如 , Name , CacheSize) 名称,类型,并且暴漏出去获取或设置他们的方法以及一些操作。如例子中add() and sayHello()。

用一个JMX agent去管理 MBean:JMX agent 的核心组件是the MBean server,管理之前要先注册进去。

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

通过调用java.lang.management.ManagementFactory.getPlatformMBeanServer()方法 获取运行在platform上的MBean Server.如果platform没有,则会自动获取一个(通过MBeanServerFactory.createMBeanServer())。

发送消息

MBeans can generate notifications, for example to signal a state change, a detected event, or a problem.

不要忘了,MBean可以监测一个事件,问题,状态,并因此发送消息通知

待续…….

时间: 2024-10-19 14:11:53

一句话介绍JMX的相关文章

51CTO博客2.0新功能上线,快来跟我一起用一句话介绍自己

在今天这个万众瞩目世界杯,人人等待端午节的日子里,我们51CTO博客2.0终于又迎来了一次版本更新. 现在大家跟我一起使用本次更新的新功能,用一句话介绍自己吧!! Q:一句话简介可以在那儿被看到? 1. 你的简介可以在个人主页被看大家看到 2. 你的简介可以在文章详情页被大家看到 Q:我的一句话简介要在哪设置? 第一步,点开自己的个人主页.具体位置,如图所示 第二步,点击个人主页,如图所示红框中小蓝笔. PS,如果您点击的是第一步中的博客管理,请按下图操作 第三步,在如图的红框之中写一个不超过2

一句话介绍编程语言!

就编程语言来讲,从低级到高级依次是:机器语言(机器码),汇编语言(指令系统,第一代).C/FORTHAN语言(面向过程,第二代).Java/c++(面向对象,第三代).Python属于第3.5代语言,这一类型的的语言有几个特点:即可面向过程,也可面向对象,执行前编译,集成度高简单几行代码可以完成很多事情,易学易用,但是执行效率不高,适合于非专业的编程人员,属于万精油一类的.第四代语言就是比较专用的了,比如MATLAB精于数值计算,Map适合符号运算,R/sas等适合统计计算,专业性较强.C语言比

一句话介绍 之 java.util.Optional

废话少说:java.util.Optional 类可以大大减少 null 判断以及 NullPointerException 的异常发生. 1. Optional.of Optional.of(null);//报 NullPointerException ,这方法不常用 2. Optional.ofNullable Optional.ofNullable(null);//不报异常 3. Optional.get Optional.ofNullable(null).get();//报空指针异常 4

一句话介绍java知识

1.方法的重载 A1:在一个类中定义多个名称相同,参数不同的方法,即为方法的重载 2.方法的递归 A2:在一个方法的内部调用自身的过程,递归必须有结束条件,否则会陷入无限递归的状态. 3.面向对象的特点——多态性 A3:在程序中允许出现重名现象,一个类中定义的属性和方法被其他类集成后,它们可以具有不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义. 4.类的定义 A4:描述一组对象的共同特征和行为,包括成员变量和成员方法 5.成员变量和局部变量 A5:定义在类中的

[转载]Tomcat部署与配置

转载来源: http://ibash.cc/frontend/article/2/ 感觉挺好的  自己之前总是怕麻烦 其实是水平不够. 一句话介绍Tomcat Tomcat是一个免费的开源的Web应用服务器,属于轻量级的应用服务器,具有处理HTML页面的功能:另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式. Tomcat安装 note:本文的JDK版本为1.8,Tomcat版本为8.0,安装过程均采用源码安装 部署JDK 下载页面: http://ww

风险投资

风险投资(Venture Capital)简称是VC,在中国是一个约定俗成的具有特定内涵的概念,其实把它翻译成创业投资更为妥当.广义的风险投资泛指一切具有高风险.高潜在收益的投资:狭义的风险投资是指以高新技术为基础,生产与经营技术密集型产品的投资.根据美国全美风险投资协会的定义,风险投资是由职业金融家投入到新兴的.迅速发展的.具有巨大竞争潜力的企业中一种权益资本. 概念释义 从投资行为的角度来讲,风险投资是把资本投向蕴藏着失败风险的高新技术及其产品的研究开发领域,旨在促使高新技术成果尽快商品化.

Sublime Text使用简介

简介 对Sublime Text(ST)的一句话介绍: 性感无比的代码编辑器!程序员必备神器! 文档 官方的文档:Sublime Text 3 Documentation 官方文档中还提供了一个非官方的文档链接:Sublime Text Unofficial Documentation,上面的内容可谓非常全面,有时间可以细看,而且在不停地更新,还可以全文下载. 下载与安装 我使用的是ST3,目前还属于测试版,但是比ST2增加了大量的改进,所以就迫不及待的用上了~ 建议下载绿色版,下载完解压到相应

学员心声(四)

学员:徐同学 一句话介绍学习感受:庆兴把钱花在刀刃上 学习经历: 1991年生,目前还在杭州重点高等学校读书,2014年本科毕业几乎是混着过来的,也就懂点STM32和51单片机,做个几个简单的电子小设计,但是对于嵌入式,基于操作系统的应用并没有太多了解.虽然一直想学习,毕竟这是个软件当道的世界,硬件方面的工作确实不太好找(主要还是水平不行,公司要求颇高). 15年5月无意间看到了韦东山老师的视频,在此之前看过**的视频,大都是对着LDD第三版的概念泛泛而谈,听过看过之后就忘了,总感觉用不起来.然

STL六大组件之——分配器(内存分配,好深奥的东西)

SGI设计了双层级配置器,第一级配置器直接使用malloc()和free(),第二级配置器则视情况采用不同的策略:当配置区块超过128bytes时,视之为“足够大”,便调用第一级配置器:当配置区小于128bytes时,视之为“过小”,为了降低额外负担,便采用复杂的memory pool 整理方式,而不再求助于第一级配置器.整个设计究竟只开放第一级配置器,取决于_USE_MALLOC是否被定义: 1 #ifdef __USE_MALLOC 2 ... 3 typedef __malloc_allo