写点什么

druid 源码阅读 9—— init 中的 JMX 是干啥的

作者:张大彪
  • 2022 年 5 月 19 日
  • 本文字数:1090 字

    阅读完需:约 4 分钟

在阅读 8 的时候,有这么一个地方没懂,今天花点时间把这块了解下。

13、registerMbean 注册 druid 的 Mbean,所以 JMX 可以用来监控 Druid 连接池了。//这块没看懂,有空的时候看一下吧。

public void registerMbean() {    if (!mbeanRegistered) {        AccessController.doPrivileged(new PrivilegedAction<Object>() {
@Override public Object run() { ObjectName objectName = DruidDataSourceStatManager.addDataSource(DruidDataSource.this, DruidDataSource.this.name);
DruidDataSource.this.setObjectName(objectName); DruidDataSource.this.mbeanRegistered = true;
return null; } }); }}
复制代码

首先 mbean 是什么东西呢?

原文链接:https://blog.csdn.net/u010833547/article/details/92806510

# 什么是 MBean

- MBean 就是一种规范的 JavaBean,通过集成和实现一套标准的 Bean 接口,这种叫 MBean,Mbean 注册到 MBeanServer 中。之后将被 MBeanServer 中注册过的 Adapter(比如渲染为 HTML 的 HtmlAdapter)渲染为直观的页面将 MBean 的属性和方法展示给用户。

MBean -> MBeanServer -> HtmlAdapter

以上这套架构有一个专业的名词描述:JMX,全称为 Java Management Extensions

- 当然用户需要访问 HtmlAdapter 页面还需要提供一个链接入口,通常都是提供 rmi 入口。

- rmi 的核心是一个 java.rmi.registry.Registry 注册中心,需要暴露给客户端的自定义 RMI 服务接口会提前注册到这个 Registry 中,并声明好访问的链接,之后用户访问【自定义 RMI 服务接口】时就会链接到 Registry 并访问到和链接对应的【自定义 RMI 服务接口】。

- MBeanServer 就是我们刚刚提到的【自定义 RMI 服务接口】,

javax.management.remote.JMXConnectorServer 负责将 MBeanServer 与 URL 绑定(url 类似长成这样子:service:jmx:rmi:///jndi/rmi://localhost:1099/helloworld)并注册到 localhost:1099 的 Registry 注册中心。

- MBean 可以用来干嘛?就是可以有一套 JDK 级别的对外的服务接口。比如,你写了一个 JVM 允许状态辅助查询的 Bean,你希望别人下载一个 Jconsole 就可以看到你写的杰作。那你就可以考虑用 MBean 规范来实现。很多垃圾收集器算法 Bean 就这么干的(说的就是这个类 sun.management.MemoryImpl)。

结束语:挺古老的一套机制,但是关键时刻可以帮助我们更好的理解 JVM 的运行状况,这得感谢 JAVA 的动态加载机制。


那我们怎么用呢?

跑一个 Mbean 试试。

运行 druid 的程序,然后 jconsole 一下,就出来了。


用户头像

张大彪

关注

还未添加个人签名 2018.04.25 加入

还未添加个人简介

评论

发布
暂无评论
druid 源码阅读 9—— init 中的JMX是干啥的_张大彪_InfoQ写作社区