Issue #4315 - Jetty and Javax WebSocketSessions are no longer LifeCycles

Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
This commit is contained in:
Lachlan Roberts 2019-11-27 13:51:14 +11:00
parent 738de7bb02
commit 2410f9d6c4
8 changed files with 7 additions and 40 deletions

View File

@ -38,12 +38,9 @@ import javax.websocket.RemoteEndpoint.Basic;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;
import org.eclipse.jetty.util.Callback;
import org.eclipse.jetty.util.SharedBlockingCallback;
import org.eclipse.jetty.util.component.AbstractLifeCycle;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
import org.eclipse.jetty.websocket.core.CloseStatus;
import org.eclipse.jetty.websocket.core.ExtensionConfig;
import org.eclipse.jetty.websocket.core.FrameHandler;
import org.eclipse.jetty.websocket.javax.common.decoders.AvailableDecoders;
@ -53,7 +50,7 @@ import org.eclipse.jetty.websocket.javax.common.util.ReflectUtils;
/**
* Client Session for the JSR.
*/
public class JavaxWebSocketSession extends AbstractLifeCycle implements javax.websocket.Session
public class JavaxWebSocketSession implements javax.websocket.Session
{
private static final Logger LOG = Log.getLogger(JavaxWebSocketSession.class);
@ -547,25 +544,6 @@ public class JavaxWebSocketSession extends AbstractLifeCycle implements javax.we
return coreSession.isSecure();
}
@Override
protected void doStop()
{
coreSession.close(CloseStatus.SHUTDOWN, "Container being shut down", new Callback()
{
@Override
public void succeeded()
{
coreSession.abort();
}
@Override
public void failed(Throwable x)
{
coreSession.abort();
}
});
}
@Override
public synchronized void removeMessageHandler(MessageHandler handler)
{

View File

@ -21,10 +21,10 @@ package org.eclipse.jetty.websocket.javax.common;
import java.util.Collections;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.websocket.CloseReason;
import javax.websocket.Session;
import org.eclipse.jetty.util.component.AbstractLifeCycle;
import org.eclipse.jetty.util.component.LifeCycle;
public class SessionTracker extends AbstractLifeCycle implements JavaxWebSocketSessionListener
{
@ -50,10 +50,12 @@ public class SessionTracker extends AbstractLifeCycle implements JavaxWebSocketS
@Override
protected void doStop() throws Exception
{
for (JavaxWebSocketSession session : sessions)
for (Session session : sessions)
{
LifeCycle.stop(session);
// GOING_AWAY is abnormal close status so it will hard close connection after sent.
session.close(new CloseReason(CloseReason.CloseCodes.GOING_AWAY, "Container being shut down"));
}
super.doStop();
}
}

View File

@ -41,7 +41,6 @@ public abstract class AbstractSessionTest
JavaxWebSocketFrameHandler frameHandler = container.newFrameHandler(websocketPojo, upgradeRequest);
FrameHandler.CoreSession coreSession = new FrameHandler.CoreSession.Empty();
session = new JavaxWebSocketSession(container, coreSession, frameHandler, null);
container.addManaged(session);
}
@AfterAll

View File

@ -44,7 +44,6 @@ public abstract class AbstractClientSessionTest
JavaxWebSocketFrameHandler frameHandler = container.newFrameHandler(websocketPojo, upgradeRequest);
FrameHandler.CoreSession coreSession = new FrameHandler.CoreSession.Empty();
session = new JavaxWebSocketSession(container, coreSession, frameHandler, null);
container.addManaged(session);
}
@AfterAll

View File

@ -82,13 +82,11 @@ public class SessionAddMessageHandlerTest
// Session
session = frameHandler.getSession();
session.start();
}
@AfterEach
public void stopSession() throws Exception
{
session.stop();
container.stop();
}

View File

@ -23,7 +23,6 @@ import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.eclipse.jetty.util.component.AbstractLifeCycle;
import org.eclipse.jetty.util.component.LifeCycle;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.StatusCode;
import org.eclipse.jetty.websocket.api.WebSocketSessionListener;
@ -40,7 +39,6 @@ public class SessionTracker extends AbstractLifeCycle implements WebSocketSessio
@Override
public void onWebSocketSessionOpened(Session session)
{
LifeCycle.start(session);
sessions.add(session);
}
@ -48,7 +46,6 @@ public class SessionTracker extends AbstractLifeCycle implements WebSocketSessio
public void onWebSocketSessionClosed(Session session)
{
sessions.remove(session);
LifeCycle.stop(session);
}
@Override

View File

@ -23,7 +23,6 @@ import java.net.SocketAddress;
import java.time.Duration;
import java.util.Objects;
import org.eclipse.jetty.util.component.AbstractLifeCycle;
import org.eclipse.jetty.util.component.Dumpable;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
@ -35,7 +34,7 @@ import org.eclipse.jetty.websocket.api.UpgradeResponse;
import org.eclipse.jetty.websocket.api.WebSocketBehavior;
import org.eclipse.jetty.websocket.core.FrameHandler;
public class WebSocketSession extends AbstractLifeCycle implements Session, SuspendToken, Dumpable
public class WebSocketSession implements Session, SuspendToken, Dumpable
{
private static final Logger LOG = Log.getLogger(WebSocketSession.class);
private final FrameHandler.CoreSession coreSession;

View File

@ -134,11 +134,6 @@ public class ConcurrentConnectTest
}
closeListener.closeLatch.await(5, TimeUnit.SECONDS);
for (EventSocket l : listeners)
{
assertTrue(((WebSocketSession)l.session).isStopped());
}
assertTrue(client.getOpenSessions().isEmpty());
assertTrue(client.getContainedBeans(WebSocketSession.class).isEmpty());
}