MBean其实也是JavaBean的一种,但是MBean往往代表的是JMX中的一种可以被管理的资源。MBean会通过接口定义,给出这些资源的一些特定操作:
- 属性的读和写操作;
- 可以被执行的操作;
- 关于自己的描述信息;
MBean可以看作是JavaBean的一种特殊形式,其定义是符合JavaBean的规范的。但是MBean在定义是,首先需要定义一个名字结尾为“MBean”的接口,例如:HelloMBean,然后这个接口的实现类的名字必须叫做Hello。
而MXBean与MBean的区别主要是在于在接口中会引用到一些其他类型的类时,其表现方式的不一样。在MXBean中,如果一个MXBean的接口定义了一个属性是一个自定义类型,如MemoryMXBean中定义了heapMemoryUsage属性,这个属性是MemoryUsage类型的,当JMX使用这个MXBean时,这个MemoryUsage就会被转换成一种标准的类型,这些类型被称为开放类型,是定义在
javax.management.openmbean包中的。而这个转换的规则是,如果是原生类型,如int或者是String,则不会有变化,但如果是其他自定义类型,则被转换成CompositeDataSupport类。
用两个简单的例子来比较一下MBean与MXBean的区别。
定义一个MBean:
public interface HelloMBean { public int getAge(); public String getName(); public String getEmail(); public void setEmail(String email); public String sayHello(); }
这个MBean定义了三个属性:age,name和email,其中age和name是只读的。同时定义了一个操作,sayHello。下面是这个MBean的实现:
public class Hello implements HelloMBean { private final String name; private final int age; private String email; public Hello(String name, int age, String email) { this.name = name; this.age = age; this.email = email; } @Override public int getAge() { return age; } @Override public String getName() { return name; } @Override public String getEmail() { return email; } @Override public void setEmail(String email) { this.email = email; } @Override public String sayHello() { return "Hello, I'm " + name + "."; } }
上面这个MBean的实现,可以看到,这个实现类的名字与MBean接口的定义是相同的。然后再写一个调用的类:
public class MyMBeanServer { public static void main(String[] args) throws Exception { MBeanServer server = ManagementFactory.getPlatformMBeanServer(); ObjectName mbeanName = new ObjectName("me.clarenceau.jmx.mbean:type=Hello"); Hello mbean = new Hello("ClarenceAu", 23, "ozhencong@gmail.com"); server.registerMBean(mbean, mbeanName); System.out.println("Wait ..."); Thread.sleep(Long.MAX_VALUE); } }
然后启动这个类,再通过jconsole就可以看到这个mbean的属性以及调用这个mbean的操作。
然后下面可以试一下定义一个自定义类型,然后在mbean中作为属性来返回,我们定义一个Book类型:
public class Book { public String name; public double price; public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } }
在原来的mbean上增加两个操作:
public Book getBook(); public void addBook(Book book);
再次启动server,看看这次效果会怎么样:
可以看到,属性和操作都多了刚才定义的内容。但是如果希望看到book的内容时就会看到下面的情况:
这时,我们把这个mbean定义为一个MXBean:
public interface HelloMXBean { public int getAge(); public String getName(); public String getEmail(); public void setEmail(String email); public String sayHello(); public Book getBook(); public void addBook(Book book); }
并且在Server类启动时,为mbean添加几本书:
public class MyMXBeanServer { public static void main(String[] args) throws Exception { MBeanServer server = ManagementFactory.getPlatformMBeanServer(); ObjectName mbeanName = new ObjectName("me.clarenceau.jmx.mxbean:type=Hello"); Hello mbean = new Hello("ClarenceAu", 23, "ozhencong@gmail.com"); mbean.addBook(new Book("Thinking in Java", 99.0)); mbean.addBook(new Book("Design Pattern", 59.0)); server.registerMBean(mbean, mbeanName); System.out.println("Wait ..."); Thread.sleep(Long.MAX_VALUE); } }
启动后,我们可以再通过jconsole看到下图:
此时,book已经被转换成了CompositeDataSupport类型,双击这个这个属性,则可以看到:
这个就是MBean与MXBean的区别所在。
相关推荐
学习JMX和MXBean,你需要了解以下关键点: 1. **MBean服务器**:这是JMX的核心组件,它负责注册、存储和管理MBeans。每个Java虚拟机都有一个默认的MBean服务器。 2. **MBean接口**:MBean必须实现一个接口,该接口...
【JMX学习——一步步来】 JMX,全称为Java Management Extensions,是一个用于植入管理功能到Java应用程序的框架。它提供了一套标准的接口和服务,使得开发者可以在任何Java应用中实现管理和监控。对于初学者来说,...
1. **创建MBean**: 首先,你需要创建一个实现了所需管理功能的Java类,然后通过`@ManagedBean`注解声明它为一个MBean。 2. **注册MBean**: 使用`MBeanServer`注册你的MBean。`MBeanServer`是JMX的核心组件,负责...
### Java分布式应用学习笔记09JMX-MBean的介绍 #### MBean概念及作用 MBean,即Managed Bean,是在JMX(Java Management Extensions)框架中用于管理资源的一种特殊Java对象。通过MBean,可以方便地对应用程序进行...
**JMX(一)——MBean Server** Java Management Extensions (JMX) 是Java平台上的一个标准,用于管理和监控应用程序、设备和服务。它提供了一个灵活的框架,使得开发者能够轻松地创建可管理的组件,并通过标准接口...
学习JMX,需要理解其基本概念,熟悉MBean的创建和注册,掌握如何使用JMX Connectors进行远程监控,以及如何利用JMX进行应用性能调优。对于开发者而言,JMX是提高应用可维护性和可管理性的重要工具。通过深入学习和...
1. Standard MBeans:这是最基本的MBean类型,通过实现特定的MBean接口(通常是`javax.management.MBean`或其子接口)来创建。例如,`CarMBean.java`就是这样一个接口,它定义了可管理的操作和属性。 ```java ...
JMX 1.2.1 Reference Implementation(重点) Include com.sun.jdmk.comm.HtmlAdaptorServer class http://www.sun.com/software/jdmk/ Downloads, sun-jdmk-runtime-5.1-b34.2.zip/SUNWjdmk/5.1/lib/jdmkrt.jar
JMX(Java Management Extensions)是Java平台上的一个...结合源码学习和使用工具,JMX可以帮助我们更好地理解和控制我们的Java应用程序。无论是开发人员还是运维人员,熟悉和掌握JMX都将对日常工作带来极大的便利。
Java Management Extensions(JMX)是Java平台上的一个标准技术,用于管理和监控...学习并利用这些JMX资源,开发者能够构建高度可管理和可监控的应用程序,提高系统的透明度和可靠性,同时简化故障排查和性能优化过程。
Java Management Extensions(JMX)是Java平台上的一个标准管理框架,它允许开发人员创建、注册和管理名为MBeans(Managed Beans)的...学习和实践这些例子,能够帮助开发者更好地利用JMX来管理和监控复杂的Java系统。
【JMX 学习文档】 Java Management Extensions (JMX) 是一种用于在Java应用程序中集成管理功能的框架。它提供了一种标准的方式来管理和监控应用程序,包括配置、性能和资源管理。JMX允许开发者创建可管理和自描述的...
MBean服务器是JMX的核心,它负责管理所有的MBeans,执行MBean操作,并提供与管理工具的交互接口。MBean服务器可以本地运行,也可以作为远程服务提供。 四、JMX连接器 JMX连接器允许客户端连接到MBean服务器,实现...
通过研究"jmx-1_2_1-ri.zip"中的源代码,开发者可以学习到如何创建自定义MBeans,如何与MBean服务器交互,以及如何利用JMX进行复杂的监控和管理任务。对于开发高效、可扩展和可管理的Java应用程序来说,深入理解JMX...
标题和描述均提到了“jmx第一个学习例子”,这标志着文章旨在引导读者通过一个实践性的示例理解Java Management Extensions(JMX)的基础概念和技术。JMX作为一项由Sun Microsystems(现Oracle)提出的技术,用于...
通过这个API,开发者可以学习如何创建MBeans、注册它们到MBean服务器、以及如何使用标准的MBean服务器接口进行交互。 JMX的核心概念包括: 1. **MBean(Managed Bean)**:MBean是Java对象,代表要管理的资源或...
在这个场景中,提到的两个jar文件——`jmx_remote-1_0_1_03-ri.zip`和`jmx-1_2_1-ri.zip`,都是与JMX相关的库,用于支持远程管理和监控。 1. `jmx-1_2_1-ri.zip`: 这个文件包含了JMX 1.2.1版本的Runtime ...
Java语言进行封装。JMX的核心概念是MBean(Managed Bean),它是一个Java...对于初学者,了解JMX的基本概念、MBean、MBean服务器以及其层次结构是学习的关键,这些知识将有助于开发和维护高效、可管理的Java应用程序。
1. **MBean**(Managed Beans):MBean是JMX中的管理对象,代表了可管理的资源。它可以是任何Java对象,通过它,我们可以暴露管理接口,让外部工具或管理系统能够访问和操作。 2. **MBeanServer**:MBeanServer是...
NULL 博文链接:https://jasonhan-sh-hotmail-com.iteye.com/blog/1171904