1. 概述
Java Management Extensions (JMX) 框架自Java 1.5起引入,并自那时起在Java开发者社区中得到了广泛接受。它提供了一种易于配置、可扩展、可靠且相对友好的基础设施,用于本地或远程管理Java应用。框架引入了MBeans的概念,以实现实时应用程序管理。
本文是一篇针对初学者的逐步指南,介绍如何创建并设置基本的MBean,并通过JConsole进行管理。
2. JMX架构
JMX架构遵循三层结构:
- 仪器化层: 通过JMX代理注册MBeans,用于管理资源
- JMX代理层: 核心组件(MBeanServer),维护受管MBeans的注册表,并提供访问它们的接口
- 远程管理层: 通常为JConsole等客户端工具
3. 创建MBean类
在创建MBeans时,我们必须遵循特定的设计模式。模型MBean类必须实现一个接口,接口名称为:"model class name" + MBean
。
首先定义我们的MBean接口和实现它的类:
public interface GameMBean {
public void playFootball(String clubName);
public String getPlayerName();
public void setPlayerName(String playerName);
}
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()
方法。此外,类中有一个成员变量playerName
,以及对应的getter和setter。
请注意,getter和setter也在父接口中声明。
4. 使用JMX代理进行仪器化
JMX代理是运行在本地或远程的实体,它们提供了对注册到它们的MBeans的管理访问权限。
我们将使用PlatformMbeanServer
——JMX代理的核心组件,并将Game
MBean注册到其中。
我们还会使用另一个实体ObjectName
——将Game
类实例与PlatformMbeanServer
注册,它是一个由逗号分隔的“key=value”对组成的字符串:
- 域:可以是任意字符串,但根据MBean命名约定,应使用Java包名(避免命名冲突)
- 键:一系列键值对列表
在这个例子中,我们将使用:"com.baledung.tutorial:type=basic,name=game
"。
我们将从java.lang.management.ManagementFactory
工厂类获取MBeanServer
,然后使用创建的ObjectName
注册模型MBean:
try {
ObjectName objectName = new ObjectName("com.baeldung.tutorial:type=basic,name=game");
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
server.registerMBean(new Game(), objectName);
} catch (MalformedObjectNameException | InstanceAlreadyExistsException |
MBeanRegistrationException | NotCompliantMBeanException e) {
// handle exceptions
}
最后,为了能够测试,我们将在应用结束前添加一个while
循环:
while (true) {
}
5. 访问MBean
5.1. 从客户端连接
- 在Eclipse中启动应用
- 启动JConsole(位于你机器上JDK安装目录的bin文件夹中)
- 连接 > 新建连接 > 选择本教程的本地Java进程 > 连接 > 不安全的SSL连接警告 > 继续使用不安全连接
- 建立连接后,点击视图面板右上角的MBeans标签页
- 左侧列将显示已注册的MBeans
- 点击
com.baeldung.tutorial
>basic
>game
- 在
game
下,将看到两行,分别对应属性和操作
以下是JConsole部分过程的快速预览:
5.2. 管理MBean
MBean的基本管理很简单:
- 属性可以读取或写入
- 方法可以调用,可以提供参数,也可以从它们返回值
让我们看看Game
MBean在实际操作中的含义:
- 属性: 为属性
playerName
输入新值,例如“Messi”,然后点击刷新按钮
将在Eclipse控制台输出: 将playerName设置为值Messi
- 操作: 为
playFootBall()
方法的String参数输入值,例如“Barcelona”,然后点击方法按钮。将出现一个成功调用的窗口提示
Eclipse控制台将输出: Messi正在为Barcelona踢足球
6. 结论
本文介绍了如何通过MBeans启用JMX功能的应用设置,以及如何使用像JConsole这样的典型客户端工具进行管理。JMX技术的领域非常广泛,本文可以被视为迈向这个领域的初学者步骤。
本教程的源代码可以在GitHub上找到。