You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2015/06/15 14:04:06 UTC
svn commit: r1685562 - in /tomcat/tc8.0.x/trunk:
java/org/apache/tomcat/websocket/WsSession.java
java/org/apache/tomcat/websocket/WsWebSocketContainer.java
test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
webapps/docs/changelog.xml
Author: remm
Date: Mon Jun 15 12:04:06 2015
New Revision: 1685562
URL: http://svn.apache.org/r1685562
Log:
Port fix for 57974: Key the open session map on the endpoint instance rather than endpoint class.
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/WsSession.java
tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
tomcat/tc8.0.x/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml
Modified: tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/WsSession.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1685562&r1=1685561&r2=1685562&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/WsSession.java Mon Jun 15 12:04:06 2015
@@ -416,7 +416,7 @@ public class WsSession implements Sessio
@Override
public Set<Session> getOpenSessions() {
checkState();
- return webSocketContainer.getOpenSessions(localEndpoint.getClass());
+ return webSocketContainer.getOpenSessions(localEndpoint);
}
Modified: tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java?rev=1685562&r1=1685561&r2=1685562&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java (original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Mon Jun 15 12:04:06 2015
@@ -115,7 +115,7 @@ public class WsWebSocketContainer
private final Object asynchronousChannelGroupLock = new Object();
private final Log log = LogFactory.getLog(WsWebSocketContainer.class);
- private final Map<Class<?>, Set<WsSession>> endpointSessionMap =
+ private final Map<Endpoint, Set<WsSession>> endpointSessionMap =
new HashMap<>();
private final Map<WsSession,WsSession> sessions = new ConcurrentHashMap<>();
private final Object endPointSessionMapLock = new Object();
@@ -402,8 +402,6 @@ public class WsWebSocketContainer
protected void registerSession(Endpoint endpoint, WsSession wsSession) {
- Class<?> endpointClazz = endpoint.getClass();
-
if (!wsSession.isOpen()) {
// The session was closed during onOpen. No need to register it.
return;
@@ -412,10 +410,10 @@ public class WsWebSocketContainer
if (endpointSessionMap.size() == 0) {
BackgroundProcessManager.getInstance().register(this);
}
- Set<WsSession> wsSessions = endpointSessionMap.get(endpointClazz);
+ Set<WsSession> wsSessions = endpointSessionMap.get(endpoint);
if (wsSessions == null) {
wsSessions = new HashSet<>();
- endpointSessionMap.put(endpointClazz, wsSessions);
+ endpointSessionMap.put(endpoint, wsSessions);
}
wsSessions.add(wsSession);
}
@@ -425,14 +423,12 @@ public class WsWebSocketContainer
protected void unregisterSession(Endpoint endpoint, WsSession wsSession) {
- Class<?> endpointClazz = endpoint.getClass();
-
synchronized (endPointSessionMapLock) {
- Set<WsSession> wsSessions = endpointSessionMap.get(endpointClazz);
+ Set<WsSession> wsSessions = endpointSessionMap.get(endpoint);
if (wsSessions != null) {
wsSessions.remove(wsSession);
if (wsSessions.size() == 0) {
- endpointSessionMap.remove(endpointClazz);
+ endpointSessionMap.remove(endpoint);
}
}
if (endpointSessionMap.size() == 0) {
@@ -443,7 +439,7 @@ public class WsWebSocketContainer
}
- Set<Session> getOpenSessions(Class<?> endpoint) {
+ Set<Session> getOpenSessions(Endpoint endpoint) {
HashSet<Session> result = new HashSet<>();
synchronized (endPointSessionMapLock) {
Set<WsSession> sessions = endpointSessionMap.get(endpoint);
Modified: tomcat/tc8.0.x/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java?rev=1685562&r1=1685561&r2=1685562&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java (original)
+++ tomcat/tc8.0.x/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java Mon Jun 15 12:04:06 2015
@@ -47,13 +47,15 @@ import javax.websocket.server.ServerEndp
import org.junit.Assert;
import org.junit.Assume;
import org.junit.Test;
-
import org.apache.catalina.Context;
import org.apache.catalina.servlets.DefaultServlet;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.startup.TomcatBaseTest;
import org.apache.coyote.http11.Http11Protocol;
import org.apache.tomcat.util.net.TesterSupport;
+import org.apache.tomcat.websocket.TesterEchoServer;
+import org.apache.tomcat.websocket.TestWsWebSocketContainer.EndpointA;
+import org.apache.tomcat.websocket.TestWsWebSocketContainer.EndpointB;
import org.apache.tomcat.websocket.TesterMessageCountClient.BasicBinary;
import org.apache.tomcat.websocket.TesterMessageCountClient.BasicHandler;
import org.apache.tomcat.websocket.TesterMessageCountClient.BasicText;
@@ -625,16 +627,18 @@ public class TestWsWebSocketContainer ex
WebSocketContainer wsContainer =
ContainerProvider.getWebSocketContainer();
- Session s1a = connectToEchoServer(wsContainer, EndpointA.class,
+ EndpointA endpointA = new EndpointA();
+ Session s1a = connectToEchoServer(wsContainer, endpointA,
TesterEchoServer.Config.PATH_BASIC);
- Session s2a = connectToEchoServer(wsContainer, EndpointA.class,
+ Session s2a = connectToEchoServer(wsContainer, endpointA,
TesterEchoServer.Config.PATH_BASIC);
- Session s3a = connectToEchoServer(wsContainer, EndpointA.class,
+ Session s3a = connectToEchoServer(wsContainer, endpointA,
TesterEchoServer.Config.PATH_BASIC);
- Session s1b = connectToEchoServer(wsContainer, EndpointB.class,
+ EndpointB endpointB = new EndpointB();
+ Session s1b = connectToEchoServer(wsContainer, endpointB,
TesterEchoServer.Config.PATH_BASIC);
- Session s2b = connectToEchoServer(wsContainer, EndpointB.class,
+ Session s2b = connectToEchoServer(wsContainer, endpointB,
TesterEchoServer.Config.PATH_BASIC);
Set<Session> setA = s3a.getOpenSessions();
@@ -678,11 +682,12 @@ public class TestWsWebSocketContainer ex
wsContainer.setDefaultMaxSessionIdleTimeout(5000);
wsContainer.setProcessPeriod(1);
- connectToEchoServer(wsContainer, EndpointA.class,
+ EndpointA endpointA = new EndpointA();
+ connectToEchoServer(wsContainer, endpointA,
TesterEchoServer.Config.PATH_BASIC);
- connectToEchoServer(wsContainer, EndpointA.class,
+ connectToEchoServer(wsContainer, endpointA,
TesterEchoServer.Config.PATH_BASIC);
- Session s3a = connectToEchoServer(wsContainer, EndpointA.class,
+ Session s3a = connectToEchoServer(wsContainer, endpointA,
TesterEchoServer.Config.PATH_BASIC);
// Check all three sessions are open
@@ -735,13 +740,14 @@ public class TestWsWebSocketContainer ex
wsContainer.setDefaultMaxSessionIdleTimeout(5000);
wsContainer.setProcessPeriod(1);
- Session s1a = connectToEchoServer(wsContainer, EndpointA.class,
+ EndpointA endpointA = new EndpointA();
+ Session s1a = connectToEchoServer(wsContainer, endpointA,
TesterEchoServer.Config.PATH_BASIC);
s1a.setMaxIdleTimeout(3000);
- Session s2a = connectToEchoServer(wsContainer, EndpointA.class,
+ Session s2a = connectToEchoServer(wsContainer, endpointA,
TesterEchoServer.Config.PATH_BASIC);
s2a.setMaxIdleTimeout(6000);
- Session s3a = connectToEchoServer(wsContainer, EndpointA.class,
+ Session s3a = connectToEchoServer(wsContainer, endpointA,
TesterEchoServer.Config.PATH_BASIC);
s3a.setMaxIdleTimeout(9000);
@@ -776,8 +782,8 @@ public class TestWsWebSocketContainer ex
}
private Session connectToEchoServer(WebSocketContainer wsContainer,
- Class<? extends Endpoint> clazz, String path) throws Exception {
- return wsContainer.connectToServer(clazz,
+ Endpoint endpoint, String path) throws Exception {
+ return wsContainer.connectToServer(endpoint,
ClientEndpointConfig.Builder.create().build(),
new URI("ws://localhost:" + getPort() + path));
}
@@ -898,7 +904,7 @@ public class TestWsWebSocketContainer ex
WebSocketContainer wsContainer =
ContainerProvider.getWebSocketContainer();
- Session s = connectToEchoServer(wsContainer, EndpointA.class, path);
+ Session s = connectToEchoServer(wsContainer, new EndpointA(), path);
StringBuilder msg = new StringBuilder();
for (long i = 0; i < size; i++) {
Modified: tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml?rev=1685562&r1=1685561&r2=1685562&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml Mon Jun 15 12:04:06 2015
@@ -122,6 +122,11 @@
<code>javax.websocket.server.ServerEndpointConfig</code> as they vary
between different requests. (violetagg)
</fix>
+ <fix>
+ <bug>57974</bug>: Session.getOpenSessions should return all sessions
+ associated with a given endpoint instance, rather than all sessions
+ from the endpoint class. (remm)
+ </fix>
</changelog>
</subsection>
<subsection name="Web applications">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org