From e02c7e4a1ea809b8115c02d1aa0a6d1128603998 Mon Sep 17 00:00:00 2001 From: nsingh Date: Tue, 24 Apr 2018 13:36:08 +0200 Subject: [PATCH] Ensure jmx connector is closed after getting domain --- .../commons/boot/app/cli/SpringBootApp.java | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/SpringBootApp.java b/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/SpringBootApp.java index cb0913130..c16f2cf22 100644 --- a/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/SpringBootApp.java +++ b/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/SpringBootApp.java @@ -61,7 +61,7 @@ public class SpringBootApp { private static final String SPRING_FRAMEWORK_BOOT_DOMAIN = "org.springframework.boot"; private Boolean isSpringBootApp; - private String domain; + private String jmxMBeanDomain; // NOTE: Gson-based serialisation replaces the old Jackson ObjectMapper. Not sure if this makes a difference in the long run, but to retain the same output that Jackson Object Mapper // was generating during serialisatino, some configuration in Gson is required, as the default behaviour of Gson is different than Object Mapper. @@ -437,7 +437,7 @@ public class SpringBootApp { } protected ObjectName getObjectName(String keyProperties) throws Exception { - String domain = getMBeanActuatorDomain(); + String domain = getJmxMbeanDomain(); if (StringUtil.hasText(domain) && StringUtil.hasText(keyProperties)) { String fullName = domain + ":" + keyProperties; return ObjectName.getInstance(fullName); @@ -455,21 +455,28 @@ public class SpringBootApp { * @return JMX MBean domain containing actuator information, or null if not resolved. * @throws Exception when resolving domain from JMX */ - protected String getMBeanActuatorDomain() throws Exception { - if (this.domain == null) { - JMXConnector jmxConnector = getJmxConnector(); - MBeanServerConnection connection = jmxConnector.getMBeanServerConnection(); - String[] domains = connection.getDomains(); - if (domains != null) { - for (String domain : domains) { - if (SPRING_FRAMEWORK_BOOT_DOMAIN.equals(domain)) { - this.domain = SPRING_FRAMEWORK_BOOT_DOMAIN; - break; + protected String getJmxMbeanDomain() throws Exception { + if (this.jmxMBeanDomain == null) { + JMXConnector jmxConnector = null; + try { + jmxConnector = getJmxConnector(); + MBeanServerConnection connection = jmxConnector.getMBeanServerConnection(); + String[] domains = connection.getDomains(); + if (domains != null) { + for (String domain : domains) { + if (SPRING_FRAMEWORK_BOOT_DOMAIN.equals(domain)) { + this.jmxMBeanDomain = SPRING_FRAMEWORK_BOOT_DOMAIN; + break; + } } } + } finally { + if (jmxConnector != null) { + jmxConnector.close(); + } } } - return this.domain; + return this.jmxMBeanDomain; } @Override