一共有四种MBean:
标准MBean(Standard MBeans)设计和实现是最简单的,这类MBean使用自己的方法名作为管理接口。
动态MBean(Dynamic MBeans)必须实现一个指定的接口,由于动态MBeans在运行期间暴露它们的管理接口,因此更为灵活。
开放MBean(Open MBeans)属于动态MBeans,这类MBean依靠基础数据类型来实现通用管理,并为友情用户进行自我声明。
模型MBean(Model MBeans)同样也是动态MBeans,这类MBeans是完全可配置的,在运行期间进行自我声明;它们为资源动态工具提供一个一般性的,有默认行为的MBeans类。
下面将演示标准MBean和模型MBean的使用方法。
以下演示的源码地址:https://github.com/smallbug-vip/repo,除此之外自己在网上还搜索了一个动态MBean的Demo。
标准MBean:
首先定义被管理的bean:
public class Bug implements BugMBean{
private String name;
private String food;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFood() {
return food;
}
public void setFood(String food) {
this.food = food;
}
public void eat(String eat) {
System.out.println("the bug is eating " + eat + ".");
}
@Override
public String toString() {
return "Bug [name=" + name + ", food=" + food + "]";
}
}
该Bean实现了一个名称以MBean结尾的接口,这个接口中声明的方法都是Bean对象要向外暴露的操作接口方法。
public interface BugMBean {
/**
* 获取名字
*
* @timestamp Feb 10, 2016 3:22:58 PM
* @return
*/
public String getName();
/**
* 设置名字
*
* @timestamp Feb 10, 2016 3:23:23 PM
* @param name
*/
public void setName(String name);
/**
* 最喜欢的食物是什么
*
* @timestamp Feb 10, 2016 3:23:37 PM
* @return
*/
public String getFood();
/**
* 设置最喜欢的食物
*
* @timestamp Feb 10, 2016 3:23:55 PM
* @param food
*/
public void setFood(String food);
/**
* 吃
*
* @timestamp Feb 10, 2016 3:24:08 PM
* @param eat
*/
public void eat(String eat);
/**
* 查看状态
*
* @timestamp Feb 10, 2016 3:24:15 PM
* @return
*/
public String toString();
}
使用工具Adaptor测试代码:
try {
helloName = new ObjectName("smallbug:name=Bug");
server.registerMBean(new Bug(), helloName);
ObjectName adapterName = new ObjectName("StandardAgent:name=htmladapter,port=8082");
HtmlAdaptorServer adapter = new HtmlAdaptorServer();
server.registerMBean(adapter, adapterName);
adapter.start();
System.out.println("start.....");
} catch (Exception e) {
throw new RuntimeException(e);
}
之后可以在浏览器中输入:localhost:8082来管理Bug对象了。注意要使用HtmlAdaptorServer必须在pom.xml中引入:
<dependency>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
<version>1.2.1</version>
</dependency>
也可以不使用Adapter:
private void test02() {
try {
helloName = new ObjectName("smallbug:name=Bug");
server.registerMBean(new Bug(), helloName);
changeProperties();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private void changeProperties() {
Attribute name = new Attribute("Name", "smallbug");
Attribute food = new Attribute("Food", "leaves");
try {
server.setAttribute(helloName, name);
server.setAttribute(helloName, food);
System.out.println("the name is " + server.getAttribute(helloName, "Name"));
Object[] params = { "beans" };
String[] sign = { "java.lang.String" };
server.invoke(helloName, "eat", params, sign);
String s = (String) server.invoke(helloName, "toString", null, null);
System.out.println(s);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
模板MBean:
被管理Bean除了不实现接口,其他与上面Bug一样。然后定义BugMBean类,该类继承了BaseModelMBean:
public class BugMBean extends BaseModelMBean {
public BugMBean() throws MBeanException, RuntimeOperationsException {
super();
}
@Override
public String getClassName() {
return (this.resource.getClass().getName());
}
@Override
public Object getAttribute(String name) throws AttributeNotFoundException, MBeanException, ReflectionException {
System.out.println("-------------------" + name);
return super.getAttribute(name);
}
@Override
public void setAttribute(Attribute attribute) throws AttributeNotFoundException, MBeanException, ReflectionException {
System.out.println("+++++++++++++++++++" + attribute);
super.setAttribute(attribute);
}
}
对需要暴露的接口进行配置:
<?xml version="1.0"?>
<!DOCTYPE mbeans-descriptors PUBLIC
"-//Apache Software Foundation//DTD Model MBeans Configuration File"
"http://jakarta.apache.org/commons/dtds/mbeans-descriptors.dtd">
<mbeans-descriptors>
<mbean name="myMBean" className="cn.smallbug.jdk.jmx._02.BugMBean"
type="cn.smallbug.jdk.jmx._02.Bug">
<attribute name="Name" type="java.lang.String" />
<attribute name="Food" type="java.lang.String" />
<operation name="eat" impact="ACTION" returnType="void">
<parameter name="eat" type="java.lang.String" />
</operation>
<operation name="toString" impact="ACTION" returnType="java.lang.String">
<parameter name="eat" type="java.lang.String" />
</operation>
</mbean>
</mbeans-descriptors>
测试:
public class ModelAgent {
private Registry registry;
private MBeanServer mBeanServer;
public ModelAgent() {
registry = createRegistry();
try {
mBeanServer = Registry.getServer();
} catch (Throwable t) {
t.printStackTrace(System.out);
System.exit(1);
}
}
public MBeanServer getMBeanServer() {
return mBeanServer;
}
public Registry createRegistry() {
Registry registry = null;
try {
URL url = ModelAgent.class.getResource("/jmx/bug-mbean.xml");
InputStream stream = url.openStream();
Registry.loadRegistry(stream);
stream.close();
registry = Registry.getRegistry();
} catch (Throwable t) {
System.out.println(t.toString());
}
return (registry);
}
public ModelMBean createModelMBean(String mBeanName) throws Exception {
ManagedBean managed = registry.findManagedBean(mBeanName);
if (managed == null) {
System.out.println("ManagedBean null");
return null;
}
ModelMBean mbean = managed.createMBean();
ObjectName objectName = createObjectName();
return mbean;
}
private ObjectName createObjectName() {
ObjectName objectName = null;
String domain = mBeanServer.getDefaultDomain();
try {
objectName = new ObjectName(domain + ":type=MyCar");
} catch (MalformedObjectNameException e) {
e.printStackTrace();
}
return objectName;
}
public static void main(String[] args) {
ModelAgent agent = new ModelAgent();
MBeanServer mBeanServer = agent.getMBeanServer();
Bug bug = new Bug();
System.out.println("Creating ObjectName");
ObjectName objectName = agent.createObjectName();
try {
ModelMBean modelMBean = agent.createModelMBean("myMBean");
modelMBean.setManagedResource(bug, "ObjectReference");
mBeanServer.registerMBean(modelMBean, objectName);
} catch (Exception e) {
System.out.println(e.toString());
}
// manage the bean
try {
Attribute name = new Attribute("Name", "smallbug");
Attribute food = new Attribute("Food", "leaves");
mBeanServer.setAttribute(objectName, name);
mBeanServer.setAttribute(objectName, food);
String color = (String) mBeanServer.getAttribute(objectName, "Name");
System.out.println("Name:" + color);
Object[] params = { "beans" };
String[] sign = { "java.lang.String" };
mBeanServer.invoke(objectName, "eat", params, sign);
String s = (String) mBeanServer.invoke(objectName, "toString", null, null);
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
NULL 博文链接:https://jasonhan-sh-hotmail-com.iteye.com/blog/1171904
MBean主要分为两种类型:Standard MBean和Dynamic MBean。 ##### Standard MBean Standard MBean是最常见的MBean类型,它要求实现特定的接口,并遵循一定的命名约定。通常情况下,开发者只需要编写一个普通的...
Java Management Extensions(JMX)是Java平台上的一个标准技术,用于管理和监控应用程序、操作系统和网络设备等资源。它提供了一种灵活的框架,允许开发者创建、注册和管理名为Managed Beans(MBeans)的对象,这些...
Druid数据源连接池;mybatis配置集成,多数据源;jmx监控MBean;定时任务配置;aop_spring-boot-service
总的来说,JMX和MBean Server提供了一种标准、灵活的管理方式,使得Java应用的管理和监控变得更加便捷。通过结合Spring框架,开发者可以更轻松地在应用中集成JMX功能,实现对应用的全方位管理。
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
java
Java Management Extensions(JMX)是Java平台上的一个标准管理框架,它允许开发人员创建、注册和管理名为MBeans(Managed Beans)的对象,这些对象代表了系统、应用程序或服务的可管理资源。通过JMX,我们可以远程...
在本章《JMX实战(四)》中,我们将深入探讨最简单的MBean类型:标准MBean。标准MBean适用于具有稳定、已知接口的资源。这一章将介绍如何使用标准MBean来配置应用程序资源(如日志工具和应用属性),以及如何将应用...
MBeans有三种类型:标准MBean、模型MBean和动态MBean。标准MBean通过特定的接口定义其管理属性和操作;模型MBean根据运行时的元数据自动生成接口;动态MBean则允许在运行时动态定义MBean的行为。 3. **MBean服务器*...
MBean可以是标准MBean、模型MBean或开放MBean,它们通过实现特定接口或使用特定注解来暴露其属性、操作和通知。 - **MBean Server**:MBean Server是JMX架构的核心,负责管理MBean的生命周期,包括创建、注册、查找...
接着,书中的章节详细讲述了如何创建自定义MBean,包括标准MBean、开放MBean和模型MBean的不同类型,以及它们的注册和管理过程。此外,书中还讨论了MBean服务器的选择和配置,如内置MBean服务器和远程MBean服务器的...
Java Management Extensions(JMX)是Java平台上的一个标准技术,用于管理和监控应用程序、操作系统和网络设备。它提供了一种统一的方式来创建、配置、查询和管理Java应用中的资源。本篇文章将深入探讨JMX的核心概念...
MBean分为标准MBean、动态MBean、开放MBean和模型MBean等不同类型,它们分别适用于不同的监控和管理场景。 JMX技术的另一个重要概念是通知。通知是JMX框架用来实现异步通信的一种机制。当MBean的某个属性发生变化,...
3. **模型MBean**:模型MBean通过元数据描述其属性、操作和通知,这样可以更灵活地处理各种类型的MBean,而无需为每个MBean创建单独的接口。 4. **开放MBean**:开放MBean提供了一种标准的数据类型和转换机制,使得...
有标准MBean、模型MBean和动态MBean三种类型。 3. **MBean Server**:MBean Server是JMX框架的中心,负责注册MBean、执行MBean的操作以及处理MBean之间的交互。 4. **JMX连接器**:JMX连接器允许远程客户端连接到...
MBean是JMX的核心元素,分为标准MBean和动态MBean。标准MBean适用于定义明确、稳定的资源,它们基于Java Bean模式,通过内省机制获取属性和方法信息。动态MBean则提供了更大的灵活性,包括Open MBean和Model MBean,...
**JMX(Java Management Extensions)** 是Java平台提供的一种管理和监控的标准框架,它允许开发者对应用程序、设备和服务进行管理,提供了动态发现、监控和管理的能力。JMX 可以帮助我们远程控制应用,查看其运行...
有标准MBean、开放MBean、模型MBean和动态MBean四种类型,它们各有不同的创建和使用方式。 2. **MBeanServer**:MBeanServer是JMX架构的核心组件,负责注册、管理MBean以及处理MBean之间的交互。开发者可以通过...
Java Management Extensions (JMX) 是Java平台的一个标准API,用于创建、管理和监控各种资源,如Java应用程序、网络设备、操作系统等。JMX提供了一种标准的方式来注册MBeans(Managed Beans),这些MBeans是代表可...