Java Management Extensions(JMX)入门教程

Java Management Extensions(JMX)入门教程

Java Management Extensions (JMX) 自Java 1.5引入,从此被Java开发社区广泛接受。它为本地或远程管理Java应用程序提供了易于配置、可伸缩、可靠且较友好的基础设施。该框架引入了用于实时管理应用程序的mbean概念。本文为初学者提供JMX入门教程,包括创建和配置基本的MBean,并通过JConsole工具进行管理。

1. JMX架构

JMX架构采用三层架构:

  • 装配层(Instrumentation layer)

    定义通过JMX代理注册的MBean,从而实现资源管理。

  • 代理层(JMX agent layer)

    核心组件(MbeanServer),负责维护托管MBean的注册表并提供访问接口。

  • 远程管理层(Remote management layer)

    客户端工具,如JConsole。

2. 示例

2.1. 创建MBean类

MBean类需遵循特定的设计规范,MBean模型类必须实现接口,接口名称为模型类名加上MBean。下面定义MBean接口及其类的实现:

package com.dataz.mbeans;

public interface GameMBean {
    public void playFootball(String clubName);
    
    public String getPlayerName();
 
    public void setPlayerName(String playerName);
}

对应实现类为:

package com.dataz.mbeans;

public class Game implements GameMBean {

    private String playerName;
    
    @Override
    public void playFootball(String clubName) {
        System.out.println(
          this.playerName + " playing football for " + clubName);
    }
 
    @Override
    public String getPlayerName() {
        System.out.println("Return playerName " + this.playerName);
        return playerName;
    }
 
    @Override
    public void setPlayerName(String playerName) {
        System.out.println("Set playerName to value " + playerName);
        this.playerName = playerName;
    }
}

Game类重写接口方法playFootball(),另外类还有成员变量planName以及getter/setter方法。注意getter/setter方法也需要在接口中声明。

2.2. 通过代理注册MBean

JMX代理是运行本地或远程的实体,提供对注册的MBean进行管理访问。这里使用JMX代理的核心组件PlatformMbeanServer注册Game MBean。
同时使用另一个实体————ObjectName注册Game类实例,有两部分字符串表示:

  • 域(domain)

可以是任意字符串,但遵循MBean命名规范,应该为Java包名(避免名称冲突)

  • 键值对

一组使用逗号分隔的键值对。

我们的示例使用ObjectName:“com.dataz.mbeans:type=basic,name=game”;
完整代码如下:

package com.dataz.mbeans;

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

public class JMXTutorialMainlauncher {

	public static void main(String[] args) {
		debug("This is basic JMX tutorial");

		ObjectName objectName = null;
		try {
			objectName = new ObjectName("com.dataz.mbeans:type=basic,name=game");
		} catch (MalformedObjectNameException e) {
			e.printStackTrace();
		}
		MBeanServer server = ManagementFactory.getPlatformMBeanServer();
		Game gameObj = new Game();
		try {
			server.registerMBean(gameObj, objectName);
		} catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException e) {
			e.printStackTrace();
		}
		debug("Registration for Game mbean with the platform server is successfull");
		debug("Please open jconsole to access Game mbean");

		while (true) {
			// to ensure application does not terminate
		}
	}

	public static void debug(String info) {
		System.out.println(info);
	}
}

其中获取MBeanServer的代码为:

MBeanServer server = ManagementFactory.getPlatformMBeanServer();

注册模型MBean类的代码:

ObjectName objectName = null;
try {
    objectName = new ObjectName("com.baeldung.tutorial:type=basic,name=game");
} catch (MalformedObjectNameException e) {
    e.printStackTrace();
}

最后为了测试方便,使用while循环避免程序在JConsole访问其之前退出。

2.3 访问MBean

  • 首先启动项目
  • 启动JConsole(jdk的bin目录下)

在这里插入图片描述

  • 在Jconsole的菜单中选择连接->新建连接->选择本地启动的应用->连接->出现不安全连接警告->继续使用不安全连接
  • 连接建立后,点击上面最右边的选项卡MBean
  • 点击com.dataz.mbeans->basic->game
  • 在game下,有两行,分别为属性和操作

在这里插入图片描述

2.4 管理MBean

MBean管理的基础比较简单:

  • 属性的读写
  • 方法调用,传入参数或返回值

下面看如何管理Game MBean:

属性

可以给playName输入新的值,如tommy,然后点击刷新按钮,应用会打印日志信息。

操作

给playFootBall()方法输入参数,如dataz,点击方法按钮,弹出方法执行成功对话框。后台打印日志:

tommy playing football for dataz

3. 总结

本教程介绍了使用mbean设置启用jmx应用程序的基础知识。同时还讨论了如何使用典型的客户端工具(如JConsole)来管理注册的MBean。
JMX技术的领域非常广泛,本教程仅为初学者入门篇。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值