diff --git a/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/AbstractSpringBootApp.java b/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/AbstractSpringBootApp.java index cd345e60f..449e83d83 100644 --- a/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/AbstractSpringBootApp.java +++ b/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/AbstractSpringBootApp.java @@ -14,6 +14,7 @@ import java.io.File; import java.io.IOException; import java.lang.management.ManagementFactory; import java.lang.management.PlatformManagedObject; +import java.time.Duration; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -22,6 +23,7 @@ import java.util.Optional; import java.util.Properties; import java.util.Set; import java.util.StringTokenizer; +import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; import javax.management.InstanceNotFoundException; @@ -40,6 +42,7 @@ import org.springframework.ide.vscode.commons.boot.app.cli.livebean.LiveBeansMod import org.springframework.ide.vscode.commons.boot.app.cli.requestmappings.Boot1xRequestMapping; import org.springframework.ide.vscode.commons.boot.app.cli.requestmappings.RequestMapping; import org.springframework.ide.vscode.commons.boot.app.cli.requestmappings.RequestMappingsParser20; +import org.springframework.ide.vscode.commons.util.AsyncRunner; import org.springframework.ide.vscode.commons.util.ExceptionUtil; import org.springframework.ide.vscode.commons.util.FuctionWithException; import org.springframework.ide.vscode.commons.util.FunctionWithException; @@ -52,12 +55,19 @@ import com.google.common.collect.ImmutableList; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import reactor.core.scheduler.Schedulers; + /** * A abstract base class which attempts to capture commonalities between * Local and Remote connections to SpringBootApp using JMX. */ public abstract class AbstractSpringBootApp implements SpringBootApp { + protected static AsyncRunner async = new AsyncRunner(Schedulers.elastic()); + private static final Duration TIMEOUT = Duration.ofMillis(1000); + protected static T withTimeout(Callable doit) throws Exception { + return async.invoke(TIMEOUT, doit).get(); + } private static final String SPRINGFRAMEWORK_BOOT_DOMAIN = "org.springframework.boot"; protected static Logger logger = LoggerFactory.getLogger(SpringBootApp.class); @@ -112,12 +122,11 @@ public abstract class AbstractSpringBootApp implements SpringBootApp { }, //disposing jmx connector: (connector) -> { - try { - logger.info("Disposing JMX connector: "+connector); + logger.info("Disposing JMX connector: "+connector); + AsyncRunner.thenLog(logger, async.invoke(TIMEOUT, () -> { connector.close(); - } catch (IOException e) { - //ignore - } + return "done"; + })); } ); diff --git a/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/LocalSpringBootApp.java b/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/LocalSpringBootApp.java index 590664c3b..845dfb358 100644 --- a/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/LocalSpringBootApp.java +++ b/headless-services/commons/commons-boot-app-cli/src/main/java/org/springframework/ide/vscode/commons/boot/app/cli/LocalSpringBootApp.java @@ -19,7 +19,6 @@ import java.util.concurrent.Callable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.ide.vscode.commons.util.AsyncRunner; import org.springframework.ide.vscode.commons.util.CollectorUtil; import org.springframework.ide.vscode.commons.util.ExceptionUtil; @@ -27,8 +26,6 @@ import com.sun.tools.attach.AttachNotSupportedException; import com.sun.tools.attach.VirtualMachine; import com.sun.tools.attach.VirtualMachineDescriptor; -import reactor.core.scheduler.Schedulers; - /** * @author Martin Lippert */ @@ -36,18 +33,11 @@ public class LocalSpringBootApp extends AbstractSpringBootApp { private static final Logger logger = LoggerFactory.getLogger(LocalSpringBootApp.class); - private static AsyncRunner async = new AsyncRunner(Schedulers.elastic()); - private static T withTimeout(Callable doit) throws Exception { - return async.invoke(TIMEOUT, doit).get(); - } - private VirtualMachine vm; private VirtualMachineDescriptor vmd; private static final String LOCAL_CONNECTOR_ADDRESS = "com.sun.management.jmxremote.localConnectorAddress"; - private static final Duration TIMEOUT = Duration.ofMillis(1000); - private Boolean isSpringBootApp; private static LocalSpringBootAppCache cache = new LocalSpringBootAppCache();