From 5efab340e8bb4229eadbef3e388ed027ff0bef4d Mon Sep 17 00:00:00 2001 From: Yanming Zhou Date: Sat, 9 Jan 2021 11:34:38 +0800 Subject: [PATCH] Refine JMX ObjectName (#1681) fix https://github.com/brettwooldridge/HikariCP/issues/1678 --- .../java/com/zaxxer/hikari/pool/PoolBase.java | 10 ++++++++-- .../com/zaxxer/hikari/pool/TestMBean.java | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/zaxxer/hikari/pool/PoolBase.java b/src/main/java/com/zaxxer/hikari/pool/PoolBase.java index 991ab024c..07ee56941 100644 --- a/src/main/java/com/zaxxer/hikari/pool/PoolBase.java +++ b/src/main/java/com/zaxxer/hikari/pool/PoolBase.java @@ -279,8 +279,14 @@ void handleMBeans(final HikariPool hikariPool, final boolean register) try { final MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); - final ObjectName beanConfigName = new ObjectName("com.zaxxer.hikari:type=PoolConfig (" + poolName + ")"); - final ObjectName beanPoolName = new ObjectName("com.zaxxer.hikari:type=Pool (" + poolName + ")"); + ObjectName beanConfigName, beanPoolName; + if ("true".equals(System.getProperty("hikaricp.jmx.register2.0"))) { + beanConfigName = new ObjectName("com.zaxxer.hikari:type=PoolConfig,name=" + poolName); + beanPoolName = new ObjectName("com.zaxxer.hikari:type=Pool,name=" + poolName); + } else { + beanConfigName = new ObjectName("com.zaxxer.hikari:type=PoolConfig (" + poolName + ")"); + beanPoolName = new ObjectName("com.zaxxer.hikari:type=Pool (" + poolName + ")"); + } if (register) { if (!mBeanServer.isRegistered(beanConfigName)) { mBeanServer.registerMBean(config, beanConfigName); diff --git a/src/test/java/com/zaxxer/hikari/pool/TestMBean.java b/src/test/java/com/zaxxer/hikari/pool/TestMBean.java index 2f0697fae..34a9c76f8 100644 --- a/src/test/java/com/zaxxer/hikari/pool/TestMBean.java +++ b/src/test/java/com/zaxxer/hikari/pool/TestMBean.java @@ -96,6 +96,25 @@ public void testMBeanReporting() throws SQLException, InterruptedException, Malf finally { System.clearProperty("com.zaxxer.hikari.housekeeping.periodMs"); } + + System.setProperty("hikaricp.jmx.register2.0", "true"); + + try (HikariDataSource ds = new HikariDataSource(config)) { + + getUnsealedConfig(ds).setIdleTimeout(3000); + + TimeUnit.SECONDS.sleep(1); + + MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); + ObjectName poolName = new ObjectName("com.zaxxer.hikari:type=Pool,name=testMBeanReporting"); + HikariPoolMXBean hikariPoolMXBean = JMX.newMXBeanProxy(mBeanServer, poolName, HikariPoolMXBean.class); + + assertEquals(0, hikariPoolMXBean.getActiveConnections()); + assertEquals(3, hikariPoolMXBean.getIdleConnections()); + } + finally { + System.clearProperty("hikaricp.jmx.register2.0"); + } } @Test