Author: markt Date: Wed Mar 6 16:18:39 2013 New Revision: 1453401 URL: http://svn.apache.org/r1453401 Log: Complete update to v014 API plus some minor proposed tweaks
Added: tomcat/trunk/java/javax/websocket/server/ServerContainer.java (with props) tomcat/trunk/java/javax/websocket/server/ServerContainerProvider.java (with props) tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java - copied, changed from r1453350, tomcat/trunk/java/org/apache/tomcat/websocket/server/ServerContainerImpl.java tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainerProvider.java (with props) tomcat/trunk/res/META-INF/tomcat-websocket.jar/services/javax.websocket.server.ServerContainerProvider Removed: tomcat/trunk/java/org/apache/tomcat/websocket/server/ServerContainerImpl.java Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/DefaultServerEndpointConfigurator.java tomcat/trunk/java/org/apache/tomcat/websocket/server/WsListener.java tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServlet.java tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java tomcat/trunk/test/org/apache/tomcat/websocket/TesterEchoServer.java tomcat/trunk/test/org/apache/tomcat/websocket/server/TestServerContainerImpl.java tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/WsConfigListener.java Added: tomcat/trunk/java/javax/websocket/server/ServerContainer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/server/ServerContainer.java?rev=1453401&view=auto ============================================================================== --- tomcat/trunk/java/javax/websocket/server/ServerContainer.java (added) +++ tomcat/trunk/java/javax/websocket/server/ServerContainer.java Wed Mar 6 16:18:39 2013 @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package javax.websocket.server; + +import javax.websocket.DeploymentException; +import javax.websocket.WebSocketContainer; + +public interface ServerContainer extends WebSocketContainer { + public abstract void addEndpoint(Class<?> clazz) throws DeploymentException; + + public abstract void addEndpoint(ServerEndpointConfig sec) + throws DeploymentException; +} Propchange: tomcat/trunk/java/javax/websocket/server/ServerContainer.java ------------------------------------------------------------------------------ svn:eol-style = native Added: tomcat/trunk/java/javax/websocket/server/ServerContainerProvider.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/server/ServerContainerProvider.java?rev=1453401&view=auto ============================================================================== --- tomcat/trunk/java/javax/websocket/server/ServerContainerProvider.java (added) +++ tomcat/trunk/java/javax/websocket/server/ServerContainerProvider.java Wed Mar 6 16:18:39 2013 @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package javax.websocket.server; + +import java.util.Iterator; +import java.util.ServiceLoader; + +public abstract class ServerContainerProvider { + + private static final String DEFAULT_PROVIDER_CLASS_NAME = + "org.apache.tomcat.websocket.ServerContainerImpl"; + + /** + * Use the service loader API to obtain a reference to the + * {@link ServerContainer}. + */ + static ServerContainer getServerContainer() { + ServerContainer result = null; + + ServiceLoader<ServerContainerProvider> serviceLoader = + ServiceLoader.load(ServerContainerProvider.class); + Iterator<ServerContainerProvider> iter = serviceLoader.iterator(); + while (result == null && iter.hasNext()) { + result = iter.next().getContainer(); + } + + // Fall-back. Also used by unit tests + if (result == null) { + try { + Class<ServerContainer> clazz = + (Class<ServerContainer>) Class.forName( + DEFAULT_PROVIDER_CLASS_NAME); + result = clazz.newInstance(); + } catch (ClassNotFoundException | InstantiationException | + IllegalAccessException e) { + // No options left. Just return null. + } + } + return result; + + } + + protected abstract ServerContainer getContainer(); +} Propchange: tomcat/trunk/java/javax/websocket/server/ServerContainerProvider.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/DefaultServerEndpointConfigurator.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/DefaultServerEndpointConfigurator.java?rev=1453401&r1=1453400&r2=1453401&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/server/DefaultServerEndpointConfigurator.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/server/DefaultServerEndpointConfigurator.java Wed Mar 6 16:18:39 2013 @@ -72,14 +72,14 @@ public class DefaultServerEndpointConfig return requestPath.equals(path); } - String servletPath = ServerContainerImpl.getServletPath(path); + String servletPath = WsServerContainer.getServletPath(path); if (!requestPath.startsWith(servletPath)) { return false; } Map<String,String> params; try { - params = ServerContainerImpl.getServerContainer().getPathParameters( + params = WsServerContainer.getServerContainer().getPathParameters( servletPath, requestPath.substring(servletPath.length())); } catch (IllegalArgumentException iae) { return false; Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsListener.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsListener.java?rev=1453401&r1=1453400&r2=1453401&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsListener.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsListener.java Wed Mar 6 16:18:39 2013 @@ -29,7 +29,7 @@ public class WsListener implements Servl @Override public void contextInitialized(ServletContextEvent sce) { - ServerContainerImpl sc = ServerContainerImpl.getServerContainer(); + WsServerContainer sc = WsServerContainer.getServerContainer(); sc.setServletContext(sce.getServletContext()); } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java?rev=1453401&r1=1453400&r2=1453401&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java Wed Mar 6 16:18:39 2013 @@ -52,7 +52,7 @@ public class WsProtocolHandler implement private final Endpoint ep; private final EndpointConfig endpointConfig; private final ClassLoader applicationClassLoader; - private final ServerContainerImpl webSocketContainer; + private final WsServerContainer webSocketContainer; private final WsRequest request; private final String subProtocol; private final Map<String,String> pathParameters; @@ -62,7 +62,7 @@ public class WsProtocolHandler implement public WsProtocolHandler(Endpoint ep, EndpointConfig endpointConfig, - ServerContainerImpl wsc, WsRequest request, String subProtocol, + WsServerContainer wsc, WsRequest request, String subProtocol, Map<String,String> pathParameters, boolean secure) { this.ep = ep; this.endpointConfig = endpointConfig; Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java?rev=1453401&r1=1453400&r2=1453401&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java Wed Mar 6 16:18:39 2013 @@ -51,7 +51,7 @@ public class WsRemoteEndpointImplServer public WsRemoteEndpointImplServer(ServletOutputStream sos, - ServerContainerImpl serverContainer) { + WsServerContainer serverContainer) { this.sos = sos; this.wsWriteTimeout = serverContainer.getTimeout(); } 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=1453401&r1=1453400&r2=1453401&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java Wed Mar 6 16:18:39 2013 @@ -43,11 +43,11 @@ public class WsSci implements ServletCon return; } - ServerContainerImpl sc = ServerContainerImpl.getServerContainer(); + WsServerContainer sc = WsServerContainer.getServerContainer(); sc.setServletContext(ctx); for (Class<?> clazz : clazzes) { try { - sc.deploy(clazz); + sc.addEndpoint(clazz); } catch (DeploymentException e) { throw new ServletException(e); } Copied: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java (from r1453350, tomcat/trunk/java/org/apache/tomcat/websocket/server/ServerContainerImpl.java) URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java?p2=tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java&p1=tomcat/trunk/java/org/apache/tomcat/websocket/server/ServerContainerImpl.java&r1=1453350&r2=1453401&rev=1453401&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/server/ServerContainerImpl.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java Wed Mar 6 16:18:39 2013 @@ -24,6 +24,7 @@ import java.util.concurrent.ConcurrentHa import javax.servlet.ServletContext; import javax.servlet.ServletRegistration; import javax.websocket.DeploymentException; +import javax.websocket.server.ServerContainer; import javax.websocket.server.ServerEndpoint; import javax.websocket.server.ServerEndpointConfig; @@ -45,25 +46,26 @@ import org.apache.tomcat.websocket.pojo. * <li>{@link Constants#TEXT_BUFFER_SIZE_SERVLET_CONTEXT_INIT_PARAM}</li> * </ul> */ -public class ServerContainerImpl extends WsWebSocketContainer { +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,ServerContainerImpl> + 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 final Log log = LogFactory.getLog(ServerContainerImpl.class); + private final Log log = LogFactory.getLog(WsServerContainer.class); - public static ServerContainerImpl getServerContainer() { + public static WsServerContainer getServerContainer() { ClassLoader tccl = Thread.currentThread().getContextClassLoader(); - ServerContainerImpl result = null; + WsServerContainer result = null; synchronized (classLoaderContainerMapLock) { result = classLoaderContainerMap.get(tccl); if (result == null) { - result = new ServerContainerImpl(); + result = new WsServerContainer(); classLoaderContainerMap.put(tccl, result); } } @@ -113,7 +115,8 @@ public class ServerContainerImpl extends * @param sec The configuration to use when creating endpoint instances * @throws DeploymentException */ - public void deploy(ServerEndpointConfig sec) + @Override + public void addEndpoint(ServerEndpointConfig sec) throws DeploymentException { if (servletContext == null) { throw new DeploymentException( @@ -141,13 +144,14 @@ public class ServerContainerImpl extends /** - * Provides the equivalent of {@link #deploy(ServerEndpointConfig)} + * Provides the equivalent of {@link #addEndpoint(ServerEndpointConfig)} * for publishing plain old java objects (POJOs) that have been annotated as * WebSocket endpoints. * * @param pojo The annotated POJO */ - public void deploy(Class<?> pojo) throws DeploymentException { + @Override + public void addEndpoint(Class<?> pojo) throws DeploymentException { ServerEndpoint annotation = pojo.getAnnotation(ServerEndpoint.class); if (annotation == null) { Added: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainerProvider.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainerProvider.java?rev=1453401&view=auto ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainerProvider.java (added) +++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainerProvider.java Wed Mar 6 16:18:39 2013 @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.tomcat.websocket.server; + +import javax.websocket.server.ServerContainer; +import javax.websocket.server.ServerContainerProvider; + + +public class WsServerContainerProvider extends ServerContainerProvider { + + @Override + protected ServerContainer getContainer() { + return new WsServerContainer(); + } +} Propchange: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainerProvider.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServlet.java?rev=1453401&r1=1453400&r2=1453401&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServlet.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServlet.java Wed Mar 6 16:18:39 2013 @@ -92,7 +92,7 @@ public class WsServlet extends HttpServl return; } // Need an Endpoint instance to progress this further - ServerContainerImpl sc = ServerContainerImpl.getServerContainer(); + WsServerContainer sc = WsServerContainer.getServerContainer(); Map<String,String> pathParameters = sc.getPathParameters( req.getServletPath(), req.getPathInfo()); ServerEndpointConfig sec = sc.getServerEndpointConfiguration( Added: tomcat/trunk/res/META-INF/tomcat-websocket.jar/services/javax.websocket.server.ServerContainerProvider URL: http://svn.apache.org/viewvc/tomcat/trunk/res/META-INF/tomcat-websocket.jar/services/javax.websocket.server.ServerContainerProvider?rev=1453401&view=auto ============================================================================== --- tomcat/trunk/res/META-INF/tomcat-websocket.jar/services/javax.websocket.server.ServerContainerProvider (added) +++ tomcat/trunk/res/META-INF/tomcat-websocket.jar/services/javax.websocket.server.ServerContainerProvider Wed Mar 6 16:18:39 2013 @@ -0,0 +1 @@ +org.apache.tomcat.websocket.server.WsServerContainerProvider \ No newline at end of file Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java?rev=1453401&r1=1453400&r2=1453401&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java (original) +++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java Wed Mar 6 16:18:39 2013 @@ -50,8 +50,8 @@ import org.apache.tomcat.websocket.Teste import org.apache.tomcat.websocket.TesterSingleMessageClient.BasicHandler; import org.apache.tomcat.websocket.TesterSingleMessageClient.BasicText; import org.apache.tomcat.websocket.TesterSingleMessageClient.TesterEndpoint; -import org.apache.tomcat.websocket.server.ServerContainerImpl; import org.apache.tomcat.websocket.server.WsListener; +import org.apache.tomcat.websocket.server.WsServerContainer; public class TestWsWebSocketContainer extends TomcatBaseTest { @@ -412,10 +412,10 @@ public class TestWsWebSocketContainer ex @Override public void contextInitialized(ServletContextEvent sce) { super.contextInitialized(sce); - ServerContainerImpl sc = ServerContainerImpl.getServerContainer(); + WsServerContainer sc = WsServerContainer.getServerContainer(); sc.setServletContext(sce.getServletContext()); try { - sc.deploy(BlockingPojo.class); + sc.addEndpoint(BlockingPojo.class); } catch (DeploymentException e) { throw new IllegalStateException(e); } @@ -522,9 +522,9 @@ public class TestWsWebSocketContainer ex @Override public void contextInitialized(ServletContextEvent sce) { super.contextInitialized(sce); - ServerContainerImpl sc = ServerContainerImpl.getServerContainer(); + WsServerContainer sc = WsServerContainer.getServerContainer(); try { - sc.deploy(ServerEndpointConfig.Builder.create( + sc.addEndpoint(ServerEndpointConfig.Builder.create( ConstantTxEndpoint.class, PATH).build()); if (TestWsWebSocketContainer.timoutOnContainer) { sc.setAsyncSendTimeout(TIMEOUT_MS); Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TesterEchoServer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TesterEchoServer.java?rev=1453401&r1=1453400&r2=1453401&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/tomcat/websocket/TesterEchoServer.java (original) +++ tomcat/trunk/test/org/apache/tomcat/websocket/TesterEchoServer.java Wed Mar 6 16:18:39 2013 @@ -25,8 +25,8 @@ import javax.websocket.OnMessage; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; -import org.apache.tomcat.websocket.server.ServerContainerImpl; import org.apache.tomcat.websocket.server.WsListener; +import org.apache.tomcat.websocket.server.WsServerContainer; public class TesterEchoServer { @@ -38,11 +38,11 @@ public class TesterEchoServer { @Override public void contextInitialized(ServletContextEvent sce) { super.contextInitialized(sce); - ServerContainerImpl sc = ServerContainerImpl.getServerContainer(); + WsServerContainer sc = WsServerContainer.getServerContainer(); sc.setServletContext(sce.getServletContext()); try { - sc.deploy(Async.class); - sc.deploy(Basic.class); + sc.addEndpoint(Async.class); + sc.addEndpoint(Basic.class); } catch (DeploymentException e) { throw new IllegalStateException(e); } Modified: tomcat/trunk/test/org/apache/tomcat/websocket/server/TestServerContainerImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/server/TestServerContainerImpl.java?rev=1453401&r1=1453400&r2=1453401&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/tomcat/websocket/server/TestServerContainerImpl.java (original) +++ tomcat/trunk/test/org/apache/tomcat/websocket/server/TestServerContainerImpl.java Wed Mar 6 16:18:39 2013 @@ -24,20 +24,20 @@ public class TestServerContainerImpl { @Test public void testGetServletMappingPath() throws Exception { Assert.assertEquals("/foo/*", - ServerContainerImpl.getServletPath("/foo")); + WsServerContainer.getServletPath("/foo")); Assert.assertEquals("/foo/*", - ServerContainerImpl.getServletPath("/foo/")); + WsServerContainer.getServletPath("/foo/")); Assert.assertEquals("/foo/bar/*", - ServerContainerImpl.getServletPath("/foo/bar")); + WsServerContainer.getServletPath("/foo/bar")); Assert.assertEquals("/foo/bar/*", - ServerContainerImpl.getServletPath("/foo/bar/")); + WsServerContainer.getServletPath("/foo/bar/")); Assert.assertEquals("/foo/*", - ServerContainerImpl.getServletPath("/foo/{bar}")); + WsServerContainer.getServletPath("/foo/{bar}")); Assert.assertEquals("/foo/*", - ServerContainerImpl.getServletPath("/foo/{bar}/")); + WsServerContainer.getServletPath("/foo/{bar}/")); Assert.assertEquals("/foo/*", - ServerContainerImpl.getServletPath("/foo/x{bar}")); + WsServerContainer.getServletPath("/foo/x{bar}")); Assert.assertEquals("/foo/*", - ServerContainerImpl.getServletPath("/foo/x{bar}/")); + WsServerContainer.getServletPath("/foo/x{bar}/")); } } Modified: tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/WsConfigListener.java URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/WsConfigListener.java?rev=1453401&r1=1453400&r2=1453401&view=diff ============================================================================== --- tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/WsConfigListener.java (original) +++ tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/WsConfigListener.java Wed Mar 6 16:18:39 2013 @@ -21,8 +21,8 @@ import javax.servlet.annotation.WebListe import javax.websocket.DeploymentException; import javax.websocket.server.ServerEndpointConfig; -import org.apache.tomcat.websocket.server.ServerContainerImpl; import org.apache.tomcat.websocket.server.WsListener; +import org.apache.tomcat.websocket.server.WsServerContainer; @WebListener public class WsConfigListener extends WsListener { @@ -30,9 +30,9 @@ public class WsConfigListener extends Ws @Override public void contextInitialized(ServletContextEvent sce) { super.contextInitialized(sce); - ServerContainerImpl sc = ServerContainerImpl.getServerContainer(); + WsServerContainer sc = WsServerContainer.getServerContainer(); try { - sc.deploy(ServerEndpointConfig.Builder.create( + sc.addEndpoint(ServerEndpointConfig.Builder.create( EchoEndpoint.class, "/websocket/echoProgrammatic").build()); } catch (DeploymentException e) { throw new IllegalStateException(e); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org