From 04303896161b3a6fee2acad9b7cddf1771fa002f Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Tue, 22 Dec 2020 10:42:26 +0100 Subject: [PATCH] Fixes #981 - WebSocketTransport.Factory does not add WebSocketContainer as a bean. Adding WebSocketContainer as a bean has no effect because WebSocketContainer comes from the Servlet Container implementation and implements the server version of LifeCycle, so the webapp version of LifeCycle won't recognize it as a LifeCycle and won't manage its life. However, it is useful to add it for dump() purposes. Signed-off-by: Simone Bordet --- .../client/websocket/javax/WebSocketTransport.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cometd-java/cometd-java-client/cometd-java-client-websocket/cometd-java-client-websocket-javax/src/main/java/org/cometd/client/websocket/javax/WebSocketTransport.java b/cometd-java/cometd-java-client/cometd-java-client-websocket/cometd-java-client-websocket-javax/src/main/java/org/cometd/client/websocket/javax/WebSocketTransport.java index 7bd8b85153..198ff72405 100644 --- a/cometd-java/cometd-java-client/cometd-java-client-websocket/cometd-java-client-websocket-javax/src/main/java/org/cometd/client/websocket/javax/WebSocketTransport.java +++ b/cometd-java/cometd-java-client/cometd-java-client-websocket/cometd-java-client-websocket-javax/src/main/java/org/cometd/client/websocket/javax/WebSocketTransport.java @@ -31,7 +31,6 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; - import javax.websocket.ClientEndpointConfig; import javax.websocket.CloseReason; import javax.websocket.ContainerProvider; @@ -42,7 +41,6 @@ import javax.websocket.MessageHandler; import javax.websocket.Session; import javax.websocket.WebSocketContainer; - import org.cometd.bayeux.Message.Mutable; import org.cometd.client.transport.ClientTransport; import org.cometd.client.transport.TransportListener; @@ -258,6 +256,13 @@ public void afterResponse(HandshakeResponse hr) { public static class Factory extends ContainerLifeCycle implements ClientTransport.Factory { private final WebSocketContainer container = ContainerProvider.getWebSocketContainer(); + public Factory() { + // The WebSocketContainer comes from the Servlet Container, + // so its lifecycle cannot be managed by this class due to + // classloader differences; we just add it for dump() purposes. + addBean(container, false); + } + @Override public ClientTransport newClientTransport(String url, Map options) { ScheduledExecutorService scheduler = (ScheduledExecutorService)options.get(ClientTransport.SCHEDULER_OPTION);