flow
                                
                                
                                
                                    flow copied to clipboard
                            
                            
                            
                        Occasionally getting "Failed to cancel resource" when shutting down the development server
Description of the bug
Sometimes when shutting down the development server, there's an error like this in the console:
2024-02-29T10:33:12.275+02:00 ERROR 79839 --- [ionShutdownHook] o.atmosphere.cpr.AsynchronousProcessor   : Failed to cancel resource: ed5ec82c-adfc-4acb-93ef-4eb03ca51ed3
java.lang.IllegalStateException: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6a24b490 has been closed already
	at org.springframework.context.support.AbstractApplicationContext.assertBeanFactoryActive(AbstractApplicationContext.java:1215) ~[spring-context-6.1.4.jar:6.1.4]
	at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1376) ~[spring-context-6.1.4.jar:6.1.4]
	at com.vaadin.flow.spring.SpringLookupInitializer$SpringLookup.lookup(SpringLookupInitializer.java:105) ~[vaadin-spring-24.4.0.alpha13.jar:na]
	at com.vaadin.flow.internal.BrowserLiveReloadAccessor.lambda$getLiveReloadFromContext$1(BrowserLiveReloadAccessor.java:88) ~[flow-server-24.4.0.alpha13.jar:24.4.0.alpha13]
	at java.base/java.util.Optional.map(Optional.java:260) ~[na:na]
	at com.vaadin.flow.internal.BrowserLiveReloadAccessor.getLiveReloadFromContext(BrowserLiveReloadAccessor.java:88) ~[flow-server-24.4.0.alpha13.jar:24.4.0.alpha13]
	at com.vaadin.flow.internal.BrowserLiveReloadAccessor.getLiveReloadFromService(BrowserLiveReloadAccessor.java:70) ~[flow-server-24.4.0.alpha13.jar:24.4.0.alpha13]
	at com.vaadin.flow.server.communication.PushHandler.handleConnectionLost(PushHandler.java:394) ~[flow-server-24.4.0.alpha13.jar:24.4.0.alpha13]
	at com.vaadin.flow.server.communication.PushHandler.connectionLost(PushHandler.java:368) ~[flow-server-24.4.0.alpha13.jar:24.4.0.alpha13]
	at com.vaadin.flow.server.communication.PushAtmosphereHandler.onStateChange(PushAtmosphereHandler.java:62) ~[flow-server-24.4.0.alpha13.jar:24.4.0.alpha13]
	at org.atmosphere.cpr.AsynchronousProcessor.invokeAtmosphereHandler(AsynchronousProcessor.java:538) ~[atmosphere-runtime-3.0.3.slf4jvaadin2.jar:3.0.3.slf4jvaadin2]
	at org.atmosphere.cpr.AsynchronousProcessor.completeLifecycle(AsynchronousProcessor.java:480) ~[atmosphere-runtime-3.0.3.slf4jvaadin2.jar:3.0.3.slf4jvaadin2]
	at org.atmosphere.cpr.AsynchronousProcessor.endRequest(AsynchronousProcessor.java:584) ~[atmosphere-runtime-3.0.3.slf4jvaadin2.jar:3.0.3.slf4jvaadin2]
	at org.atmosphere.websocket.DefaultWebSocketProcessor.executeClose(DefaultWebSocketProcessor.java:689) ~[atmosphere-runtime-3.0.3.slf4jvaadin2.jar:3.0.3.slf4jvaadin2]
	at org.atmosphere.websocket.DefaultWebSocketProcessor.close(DefaultWebSocketProcessor.java:635) ~[atmosphere-runtime-3.0.3.slf4jvaadin2.jar:3.0.3.slf4jvaadin2]
	at org.atmosphere.container.JSR356Endpoint.onClose(JSR356Endpoint.java:318) ~[atmosphere-runtime-3.0.3.slf4jvaadin2.jar:3.0.3.slf4jvaadin2]
	at org.apache.tomcat.websocket.WsSession.fireEndpointOnClose(WsSession.java:662) ~[tomcat-embed-websocket-10.1.18.jar:10.1.18]
	at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:588) ~[tomcat-embed-websocket-10.1.18.jar:10.1.18]
	at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:554) ~[tomcat-embed-websocket-10.1.18.jar:10.1.18]
	at org.apache.tomcat.websocket.WsSession.close(WsSession.java:542) ~[tomcat-embed-websocket-10.1.18.jar:10.1.18]
	at org.apache.tomcat.websocket.WsWebSocketContainer.destroy(WsWebSocketContainer.java:1019) ~[tomcat-embed-websocket-10.1.18.jar:10.1.18]
	at org.apache.tomcat.websocket.server.WsContextListener.contextDestroyed(WsContextListener.java:46) ~[tomcat-embed-websocket-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4482) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5109) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:242) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1348) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1337) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na]
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) ~[na:na]
	at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:931) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:242) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1348) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1337) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na]
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) ~[na:na]
	at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:931) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:242) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:496) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:242) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:969) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:242) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.startup.Tomcat.stop(Tomcat.java:498) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.stopTomcat(TomcatWebServer.java:297) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.destroy(TomcatWebServer.java:370) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.doClose(ServletWebServerApplicationContext.java:177) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1090) ~[spring-context-6.1.4.jar:6.1.4]
	at org.springframework.boot.SpringApplicationShutdownHook.closeAndWait(SpringApplicationShutdownHook.java:145) ~[spring-boot-3.2.2.jar:3.2.2]
	at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
	at org.springframework.boot.SpringApplicationShutdownHook.run(SpringApplicationShutdownHook.java:114) ~[spring-boot-3.2.2.jar:3.2.2]
	at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
The error is harmless in the sense that the process is still terminated but it's still a bit annoying and might be an indication of other issues hiding somewhere.
No similar error was observed despite doing multiple test runs with Vaadin 24.3.5
Expected behavior
No exceptions at shutdown
Minimal reproducible example
- Get skeleton-starter-flow-spring from e.g. start.vaadin.com
 - Update to use Vaadin 24.4.0.alpha7
 - Launch from the terminal with 
mvn - Wait until the application is opened in the browser and then close the browser tab
 - Terminate the process with 
^C - If the error isn't shown, then try repeating steps 3 - 5 a couple of times since this doesn't happen every time
 
Versions
- Vaadin / Flow version: Vaadin 24.4.0.alpha7
 - Java version: 21
 - OS version: MacOS 13.6.3