You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/07/23 14:50:17 UTC

svn commit: r1506017 - in /tomcat/trunk: java/org/apache/tomcat/websocket/server/ test/org/apache/catalina/filters/ test/org/apache/tomcat/websocket/server/

Author: markt
Date: Tue Jul 23 12:50:17 2013
New Revision: 1506017

URL: http://svn.apache.org/r1506017
Log:
Simplify WebSocket initialisation. Remove some features from  earlier versions of the specification.

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java
    tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java
    tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java
    tomcat/trunk/test/org/apache/catalina/filters/TesterServletContext.java
    tomcat/trunk/test/org/apache/tomcat/websocket/server/TestWsServerContainer.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java?rev=1506017&r1=1506016&r2=1506017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java Tue Jul 23 12:50:17 2013
@@ -60,6 +60,12 @@ public class WsFilter implements Filter 
             "258EAFA5-E914-47DA-95CA-C5AB0DC85B11".getBytes(ISO_8859_1);
     private final Queue<MessageDigest> sha1Helpers =
             new ConcurrentLinkedQueue<>();
+    private final WsServerContainer sc;
+
+
+    WsFilter(WsServerContainer sc) {
+        this.sc = sc;
+    }
 
 
     @Override
@@ -94,7 +100,6 @@ public class WsFilter implements Filter 
         HttpServletResponse resp = (HttpServletResponse) response;
 
         // Check to see if this WebSocket implementation has a matching mapping
-        WsServerContainer sc = WsServerContainer.getServerContainer();
         String path;
         String pathInfo = req.getPathInfo();
         if (pathInfo == null) {

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java?rev=1506017&r1=1506016&r2=1506017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java Tue Jul 23 12:50:17 2013
@@ -127,8 +127,7 @@ public class WsSci implements ServletCon
 
     static WsServerContainer init(ServletContext servletContext) {
 
-        WsServerContainer sc = WsServerContainer.getServerContainer();
-        sc.setServletContext(servletContext);
+        WsServerContainer sc = new WsServerContainer(servletContext);
 
         servletContext.setAttribute(
                 Constants.SERVER_CONTAINER_SERVLET_CONTEXT_ATTRIBUTE, sc);

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java?rev=1506017&r1=1506016&r2=1506017&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java Tue Jul 23 12:50:17 2013
@@ -25,7 +25,6 @@ import java.util.Map;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
-import java.util.WeakHashMap;
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.servlet.DispatcherType;
@@ -60,11 +59,6 @@ import org.apache.tomcat.websocket.pojo.
 public class WsServerContainer extends WsWebSocketContainer
         implements ServerContainer {
 
-    // Needs to be a WeakHashMap to prevent memory leaks when a context is
-    // stopped
-    private static final Map<ClassLoader,WsServerContainer>
-            classLoaderContainerMap = new WeakHashMap<>();
-    private static final Object classLoaderContainerMapLock = new Object();
     private static final StringManager sm =
             StringManager.getManager(Constants.PACKAGE_NAME);
     private static final CloseReason AUTHENTICATED_HTTP_SESSION_CLOSED =
@@ -72,29 +66,9 @@ public class WsServerContainer extends W
                     "This connection was established under an authenticated " +
                     "HTTP session that has ended.");
 
-    public static WsServerContainer getServerContainer() {
-        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
-        WsServerContainer result = null;
-        synchronized (classLoaderContainerMapLock) {
-            result = classLoaderContainerMap.get(tccl);
-            if (result == null) {
-                result = new WsServerContainer();
-                classLoaderContainerMap.put(tccl, result);
-            }
-        }
-        return result;
-    }
-
-    // For unit testing
-    protected static void recycle() {
-        synchronized (classLoaderContainerMapLock) {
-            classLoaderContainerMap.clear();
-        }
-    }
-
     private final WsWriteTimeout wsWriteTimeout = new WsWriteTimeout();
 
-    private volatile ServletContext servletContext = null;
+    private final ServletContext servletContext;
     private final Map<String,ServerEndpointConfig> configExactMatchMap =
             new ConcurrentHashMap<>();
     private final ConcurrentHashMap<Integer,SortedSet<TemplatePathMatch>>
@@ -103,16 +77,7 @@ public class WsServerContainer extends W
     private final ConcurrentHashMap<String,Set<WsSession>> authenticatedSessions =
             new ConcurrentHashMap<>();
 
-    private WsServerContainer() {
-        // Hide default constructor
-    }
-
-
-    public void setServletContext(ServletContext servletContext) {
-
-        if (this.servletContext == servletContext) {
-            return;
-        }
+    WsServerContainer(ServletContext servletContext) {
 
         this.servletContext = servletContext;
 
@@ -130,7 +95,7 @@ public class WsServerContainer extends W
         }
 
         FilterRegistration fr = servletContext.addFilter(
-                WsFilter.class.getName(), WsFilter.class);
+                WsFilter.class.getName(), new WsFilter(this));
 
         EnumSet<DispatcherType> types = EnumSet.of(DispatcherType.REQUEST,
                 DispatcherType.FORWARD);

Modified: tomcat/trunk/test/org/apache/catalina/filters/TesterServletContext.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/filters/TesterServletContext.java?rev=1506017&r1=1506016&r2=1506017&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/filters/TesterServletContext.java (original)
+++ tomcat/trunk/test/org/apache/catalina/filters/TesterServletContext.java Tue Jul 23 12:50:17 2013
@@ -233,7 +233,8 @@ public class TesterServletContext implem
     @Override
     public javax.servlet.FilterRegistration.Dynamic addFilter(
             String filterName, Filter filter) {
-        throw new RuntimeException("Not implemented");
+        return new ApplicationFilterRegistration(
+                new FilterDef(), new TesterContext());
     }
 
     @Override

Modified: tomcat/trunk/test/org/apache/tomcat/websocket/server/TestWsServerContainer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/server/TestWsServerContainer.java?rev=1506017&r1=1506016&r2=1506017&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/server/TestWsServerContainer.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/server/TestWsServerContainer.java Tue Jul 23 12:50:17 2013
@@ -77,9 +77,8 @@ public class TestWsServerContainer exten
 
     @Test
     public void testSpecExample3() throws Exception {
-        WsServerContainer.recycle();
-        WsServerContainer sc = WsServerContainer.getServerContainer();
-        sc.setServletContext(new TesterServletContext());
+        WsServerContainer sc =
+                new WsServerContainer(new TesterServletContext());
 
         ServerEndpointConfig configA = ServerEndpointConfig.Builder.create(
                 Object.class, "/a/{var}/c").build();
@@ -100,9 +99,8 @@ public class TestWsServerContainer exten
 
     @Test
     public void testSpecExample4() throws Exception {
-        WsServerContainer.recycle();
-        WsServerContainer sc = WsServerContainer.getServerContainer();
-        sc.setServletContext(new TesterServletContext());
+        WsServerContainer sc =
+                new WsServerContainer(new TesterServletContext());
 
         ServerEndpointConfig configA = ServerEndpointConfig.Builder.create(
                 Object.class, "/{var1}/d").build();
@@ -118,9 +116,8 @@ public class TestWsServerContainer exten
 
     @Test(expected = javax.websocket.DeploymentException.class)
     public void testDuplicatePaths_01() throws Exception {
-        WsServerContainer.recycle();
-        WsServerContainer sc = WsServerContainer.getServerContainer();
-        sc.setServletContext(new TesterServletContext());
+        WsServerContainer sc =
+                new WsServerContainer(new TesterServletContext());
 
         ServerEndpointConfig configA = ServerEndpointConfig.Builder.create(
                 Object.class, "/a/b/c").build();
@@ -134,9 +131,8 @@ public class TestWsServerContainer exten
 
     @Test(expected = javax.websocket.DeploymentException.class)
     public void testDuplicatePaths_02() throws Exception {
-        WsServerContainer.recycle();
-        WsServerContainer sc = WsServerContainer.getServerContainer();
-        sc.setServletContext(new TesterServletContext());
+        WsServerContainer sc =
+                new WsServerContainer(new TesterServletContext());
 
         ServerEndpointConfig configA = ServerEndpointConfig.Builder.create(
                 Object.class, "/a/b/{var}").build();
@@ -150,9 +146,8 @@ public class TestWsServerContainer exten
 
     @Test(expected = javax.websocket.DeploymentException.class)
     public void testDuplicatePaths_03() throws Exception {
-        WsServerContainer.recycle();
-        WsServerContainer sc = WsServerContainer.getServerContainer();
-        sc.setServletContext(new TesterServletContext());
+        WsServerContainer sc =
+                new WsServerContainer(new TesterServletContext());
 
         ServerEndpointConfig configA = ServerEndpointConfig.Builder.create(
                 Object.class, "/a/b/{var1}").build();
@@ -166,9 +161,8 @@ public class TestWsServerContainer exten
 
     @Test
     public void testDuplicatePaths_04() throws Exception {
-        WsServerContainer.recycle();
-        WsServerContainer sc = WsServerContainer.getServerContainer();
-        sc.setServletContext(new TesterServletContext());
+        WsServerContainer sc =
+                new WsServerContainer(new TesterServletContext());
 
         ServerEndpointConfig configA = ServerEndpointConfig.Builder.create(
                 Object.class, "/a/{var1}/{var2}").build();



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org