From a60ecfa4cc86490db8496f3f6117d28e8c28ab50 Mon Sep 17 00:00:00 2001 From: Lachlan Roberts Date: Mon, 18 Jan 2021 23:23:35 +1100 Subject: [PATCH] Issue #5832 - fix bugs when stopping the JavaxWebSocketClientContainer Signed-off-by: Lachlan Roberts --- .../client/JavaxWebSocketClientShutdown.java | 9 ++++ .../JavaxWebSocketClientContainer.java | 47 ++++++++++++++----- .../JavaxClientShutdownWithServerTest.java | 2 +- 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/jetty-websocket/websocket-javax-client/src/main/java/org/eclipse/jetty/websocket/javax/client/JavaxWebSocketClientShutdown.java b/jetty-websocket/websocket-javax-client/src/main/java/org/eclipse/jetty/websocket/javax/client/JavaxWebSocketClientShutdown.java index 481b2b701fc4..3d189cb70efb 100644 --- a/jetty-websocket/websocket-javax-client/src/main/java/org/eclipse/jetty/websocket/javax/client/JavaxWebSocketClientShutdown.java +++ b/jetty-websocket/websocket-javax-client/src/main/java/org/eclipse/jetty/websocket/javax/client/JavaxWebSocketClientShutdown.java @@ -23,9 +23,13 @@ import org.eclipse.jetty.util.component.ContainerLifeCycle; import org.eclipse.jetty.util.component.LifeCycle; import org.eclipse.jetty.websocket.javax.client.internal.JavaxWebSocketClientContainer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class JavaxWebSocketClientShutdown extends ContainerLifeCycle implements ServletContainerInitializer, ServletContextListener { + private static final Logger LOG = LoggerFactory.getLogger(JavaxWebSocketClientShutdown.class); + @Override public void onStartup(Set> c, ServletContext ctx) throws ServletException { @@ -36,12 +40,17 @@ public void onStartup(Set> c, ServletContext ctx) throws ServletExcepti @Override public void contextInitialized(ServletContextEvent sce) { + if (LOG.isDebugEnabled()) + LOG.debug("contextInitialized({}) {}", sce, this); LifeCycle.start(this); } @Override public void contextDestroyed(ServletContextEvent sce) { + if (LOG.isDebugEnabled()) + LOG.debug("contextDestroyed({}) {}", sce, this); + LifeCycle.stop(this); removeBeans(); JavaxWebSocketClientContainer.initialize(null); diff --git a/jetty-websocket/websocket-javax-client/src/main/java/org/eclipse/jetty/websocket/javax/client/internal/JavaxWebSocketClientContainer.java b/jetty-websocket/websocket-javax-client/src/main/java/org/eclipse/jetty/websocket/javax/client/internal/JavaxWebSocketClientContainer.java index 654a23d6c7a4..a535b9c0ede4 100644 --- a/jetty-websocket/websocket-javax-client/src/main/java/org/eclipse/jetty/websocket/javax/client/internal/JavaxWebSocketClientContainer.java +++ b/jetty-websocket/websocket-javax-client/src/main/java/org/eclipse/jetty/websocket/javax/client/internal/JavaxWebSocketClientContainer.java @@ -64,12 +64,14 @@ public class JavaxWebSocketClientContainer extends JavaxWebSocketContainer imple public static void initialize(ContainerLifeCycle container) { SHUTDOWN_CONTAINER.set(container); + if (LOG.isDebugEnabled()) + LOG.debug("initialized {} to {}", String.format("%s@%x", SHUTDOWN_CONTAINER.getClass().getSimpleName(), SHUTDOWN_CONTAINER.hashCode()), container); } protected WebSocketCoreClient coreClient; protected Function coreClientFactory; private final JavaxWebSocketClientFrameHandlerFactory frameHandlerFactory; - private boolean allowContextHandlerRegistration = true; + private boolean allowShutdownWithContextHandler = true; public JavaxWebSocketClientContainer() { @@ -110,9 +112,9 @@ public JavaxWebSocketClientContainer(WebSocketComponents components, Function