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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org