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/01/31 13:15:23 UTC

svn commit: r1440926 - in /tomcat/trunk: java/javax/websocket/ java/org/apache/tomcat/websocket/ test/javax/websocket/ test/org/apache/tomcat/websocket/

Author: markt
Date: Thu Jan 31 12:15:23 2013
New Revision: 1440926

URL: http://svn.apache.org/viewvc?rev=1440926&view=rev
Log:
Update WebSocket API to latest EG version (between v011 and v012)

Removed:
    tomcat/trunk/test/javax/websocket/
Modified:
    tomcat/trunk/java/javax/websocket/ClientEndpointConfiguration.java
    tomcat/trunk/java/javax/websocket/ContainerProvider.java
    tomcat/trunk/java/javax/websocket/DefaultClientConfiguration.java
    tomcat/trunk/java/javax/websocket/Extension.java
    tomcat/trunk/java/javax/websocket/RemoteEndpoint.java
    tomcat/trunk/java/javax/websocket/Session.java
    tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
    tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java

Modified: tomcat/trunk/java/javax/websocket/ClientEndpointConfiguration.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/ClientEndpointConfiguration.java?rev=1440926&r1=1440925&r2=1440926&view=diff
==============================================================================
--- tomcat/trunk/java/javax/websocket/ClientEndpointConfiguration.java (original)
+++ tomcat/trunk/java/javax/websocket/ClientEndpointConfiguration.java Thu Jan 31 12:15:23 2013
@@ -23,7 +23,7 @@ public interface ClientEndpointConfigura
 
     List<String> getPreferredSubprotocols();
 
-    List<String> getExtensions();
+    List<Extension> getExtensions();
 
     /**
      * Provides the client with a mechanism to inspect and/or modify the headers

Modified: tomcat/trunk/java/javax/websocket/ContainerProvider.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/ContainerProvider.java?rev=1440926&r1=1440925&r2=1440926&view=diff
==============================================================================
--- tomcat/trunk/java/javax/websocket/ContainerProvider.java (original)
+++ tomcat/trunk/java/javax/websocket/ContainerProvider.java Thu Jan 31 12:15:23 2013
@@ -16,21 +16,12 @@
  */
 package javax.websocket;
 
-import java.util.Map;
-import java.util.WeakHashMap;
-
 /**
  * Provides access to the implementation. This version of the API is hard-coded
  * to use the Apache Tomcat WebSocket implementation.
  */
 public class ContainerProvider {
 
-    // Needs to be a WeakHashMap to prevent memory leaks when a context is
-    // stopped
-    private static Map<ClassLoader,WebSocketContainer> classLoaderContainerMap =
-            new WeakHashMap<>();
-    private static Object classLoaderContainerMapLock = new Object();
-
     private static final String DEFAULT_PROVIDER_CLASS_NAME =
             "org.apache.tomcat.websocket.WsWebSocketContainer";
 
@@ -46,22 +37,15 @@ public class ContainerProvider {
     }
 
     /**
-     * Obtain a reference to the per class loader ClientContainer used to create
-     * outgoing WebSocket connections.
+     * Create a new ClientContainer used to create outgoing WebSocket
+     * connections.
      */
-    public static WebSocketContainer getClientContainer() {
-        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+    public static WebSocketContainer createClientContainer() {
         WebSocketContainer result = null;
-        synchronized (classLoaderContainerMapLock) {
-            result = classLoaderContainerMap.get(tccl);
-            if (result == null) {
-                try {
-                    result = clazz.newInstance();
-                } catch (InstantiationException | IllegalAccessException e) {
-                    throw new IllegalArgumentException(e);
-                }
-                classLoaderContainerMap.put(tccl, result);
-            }
+        try {
+            result = clazz.newInstance();
+        } catch (InstantiationException | IllegalAccessException e) {
+            throw new IllegalArgumentException(e);
         }
         return result;
     }

Modified: tomcat/trunk/java/javax/websocket/DefaultClientConfiguration.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/DefaultClientConfiguration.java?rev=1440926&r1=1440925&r2=1440926&view=diff
==============================================================================
--- tomcat/trunk/java/javax/websocket/DefaultClientConfiguration.java (original)
+++ tomcat/trunk/java/javax/websocket/DefaultClientConfiguration.java Thu Jan 31 12:15:23 2013
@@ -22,7 +22,7 @@ import java.util.Map;
 
 public class DefaultClientConfiguration implements ClientEndpointConfiguration {
     private List<String> preferredSubprotocols = new ArrayList<>();
-    private List<String> extensions = new ArrayList<>();
+    private List<Extension> extensions = new ArrayList<>();
     private List<Encoder> encoders = new ArrayList<>();
     private List<Decoder> decoders = new ArrayList<>();
 
@@ -38,12 +38,12 @@ public class DefaultClientConfiguration 
     }
 
     @Override
-    public List<String> getExtensions() {
+    public List<Extension> getExtensions() {
         return extensions;
     }
 
     public ClientEndpointConfiguration setExtensions(
-            List<String> extensions) {
+            List<Extension> extensions) {
         this.extensions = extensions;
         return this;
     }

Modified: tomcat/trunk/java/javax/websocket/Extension.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/Extension.java?rev=1440926&r1=1440925&r2=1440926&view=diff
==============================================================================
--- tomcat/trunk/java/javax/websocket/Extension.java (original)
+++ tomcat/trunk/java/javax/websocket/Extension.java Thu Jan 31 12:15:23 2013
@@ -16,9 +16,14 @@
  */
 package javax.websocket;
 
-import java.util.Map;
+import java.util.List;
 
 public interface Extension {
     String getName();
-    Map<String,String> getParameters();
+    List<Parameter> getParameters();
+
+    interface Parameter {
+        String getName();
+        String getValue();
+    }
 }

Modified: tomcat/trunk/java/javax/websocket/RemoteEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/RemoteEndpoint.java?rev=1440926&r1=1440925&r2=1440926&view=diff
==============================================================================
--- tomcat/trunk/java/javax/websocket/RemoteEndpoint.java (original)
+++ tomcat/trunk/java/javax/websocket/RemoteEndpoint.java Thu Jan 31 12:15:23 2013
@@ -80,8 +80,8 @@ public interface RemoteEndpoint {
 
     void sendObjectByCompletion(Object obj, SendHandler completion);
 
-    void sendPing(ByteBuffer applicationData) throws IOException;
+    void sendPing(ByteBuffer applicationData) throws IOException, IllegalArgumentException;
 
-    void sendPong(ByteBuffer applicationData) throws IOException;
+    void sendPong(ByteBuffer applicationData) throws IOException, IllegalArgumentException;
 }
 

Modified: tomcat/trunk/java/javax/websocket/Session.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/Session.java?rev=1440926&r1=1440925&r2=1440926&view=diff
==============================================================================
--- tomcat/trunk/java/javax/websocket/Session.java (original)
+++ tomcat/trunk/java/javax/websocket/Session.java Thu Jan 31 12:15:23 2013
@@ -16,6 +16,7 @@
  */
 package javax.websocket;
 
+import java.io.Closeable;
 import java.io.IOException;
 import java.net.URI;
 import java.security.Principal;
@@ -23,7 +24,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-public interface Session {
+public interface Session extends Closeable {
 
     /**
      * Returns the container that created this session.
@@ -41,7 +42,7 @@ public interface Session {
 
     String getNegotiatedSubprotocol();
 
-    List<String> getNegotiatedExtensions();
+    List<Extension> getNegotiatedExtensions();
 
     boolean isSecure();
 
@@ -66,6 +67,7 @@ public interface Session {
      *
      * @throws IOException
      */
+    @Override
     void close() throws IOException;
 
 

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1440926&r1=1440925&r2=1440926&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Thu Jan 31 12:15:23 2013
@@ -33,6 +33,7 @@ import java.util.concurrent.ConcurrentHa
 import javax.websocket.CloseReason;
 import javax.websocket.CloseReason.CloseCodes;
 import javax.websocket.Endpoint;
+import javax.websocket.Extension;
 import javax.websocket.MessageHandler;
 import javax.websocket.PongMessage;
 import javax.websocket.RemoteEndpoint;
@@ -174,7 +175,7 @@ public class WsSession implements Sessio
 
 
     @Override
-    public List<String> getNegotiatedExtensions() {
+    public List<Extension> getNegotiatedExtensions() {
         // TODO Auto-generated method stub
         return null;
     }

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=1440926&r1=1440925&r2=1440926&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java Thu Jan 31 12:15:23 2013
@@ -78,7 +78,8 @@ public class TestWsWebSocketContainer ex
 
         tomcat.start();
 
-        WebSocketContainer wsContainer = ContainerProvider.getClientContainer();
+        WebSocketContainer wsContainer =
+                ContainerProvider.createClientContainer();
         Session wsSession = wsContainer.connectToServer(TesterEndpoint.class,
                 new DefaultClientConfiguration(), new URI("http://localhost:" +
                         getPort() + EchoConfig.PATH_ASYNC));
@@ -107,7 +108,8 @@ public class TestWsWebSocketContainer ex
 
         tomcat.start();
 
-        WebSocketContainer wsContainer = ContainerProvider.getClientContainer();
+        WebSocketContainer wsContainer =
+                ContainerProvider.createClientContainer();
         wsContainer.connectToServer(TesterEndpoint.class,
                 new DefaultClientConfiguration(), new URI("ftp://localhost:" +
                         getPort() + EchoConfig.PATH_ASYNC));
@@ -124,7 +126,8 @@ public class TestWsWebSocketContainer ex
 
         tomcat.start();
 
-        WebSocketContainer wsContainer = ContainerProvider.getClientContainer();
+        WebSocketContainer wsContainer =
+                ContainerProvider.createClientContainer();
         wsContainer.connectToServer(TesterEndpoint.class,
                 new DefaultClientConfiguration(),
                 new URI("http://" + EchoConfig.PATH_ASYNC));
@@ -188,13 +191,8 @@ public class TestWsWebSocketContainer ex
             tomcat.addContext("", System.getProperty("java.io.tmpdir"));
         ctx.addApplicationListener(EchoConfig.class.getName());
 
-        WebSocketContainer wsContainer = ContainerProvider.getClientContainer();
-
-        // Reset client buffer size as client container is retained between
-        // tests
-
-        wsContainer.setMaxBinaryMessageBufferSize(8192);
-        wsContainer.setMaxTextMessageBufferSize(8192);
+        WebSocketContainer wsContainer =
+                ContainerProvider.createClientContainer();
 
         if (isServerBuffer) {
             if (isTextBuffer) {
@@ -277,13 +275,8 @@ public class TestWsWebSocketContainer ex
             tomcat.addContext("", System.getProperty("java.io.tmpdir"));
         ctx.addApplicationListener(BlockingConfig.class.getName());
 
-        WebSocketContainer wsContainer = ContainerProvider.getClientContainer();
-
-        // Reset client buffer size as client container is retained between
-        // tests
-        wsContainer.setMaxBinaryMessageBufferSize(8192);
-        wsContainer.setMaxTextMessageBufferSize(8192);
-
+        WebSocketContainer wsContainer =
+                ContainerProvider.createClientContainer();
 
         // Set the async timeout
         if (setTimeoutOnContainer) {
@@ -367,12 +360,8 @@ public class TestWsWebSocketContainer ex
         ctx.addApplicationListener(WsListener.class.getName());
         ctx.addApplicationListener(ConstantTxConfig.class.getName());
 
-        WebSocketContainer wsContainer = ContainerProvider.getClientContainer();
-
-        // Reset client buffer size as client container is retained between
-        // tests
-        wsContainer.setMaxBinaryMessageBufferSize(8192);
-        wsContainer.setMaxTextMessageBufferSize(8192);
+        WebSocketContainer wsContainer =
+                ContainerProvider.createClientContainer();
 
         tomcat.start();
 



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


Re: svn commit: r1440926 - in /tomcat/trunk: java/javax/websocket/ java/org/apache/tomcat/websocket/ test/javax/websocket/ test/org/apache/tomcat/websocket/

Posted by Konstantin Kolinko <kn...@gmail.com>.
2013/1/31  <ma...@apache.org>:
> Author: markt
> Date: Thu Jan 31 12:15:23 2013
> New Revision: 1440926
>
> URL: http://svn.apache.org/viewvc?rev=1440926&view=rev
> Log:
> Update WebSocket API to latest EG version (between v011 and v012)
>
> Removed:
>     tomcat/trunk/test/javax/websocket/
> Modified:
>     tomcat/trunk/java/javax/websocket/ClientEndpointConfiguration.java
>     tomcat/trunk/java/javax/websocket/ContainerProvider.java
>     tomcat/trunk/java/javax/websocket/DefaultClientConfiguration.java
>     tomcat/trunk/java/javax/websocket/Extension.java
>     tomcat/trunk/java/javax/websocket/RemoteEndpoint.java
>     tomcat/trunk/java/javax/websocket/Session.java
>     tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
>     tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
>

> Modified: tomcat/trunk/java/javax/websocket/RemoteEndpoint.java
> URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/RemoteEndpoint.java?rev=1440926&r1=1440925&r2=1440926&view=diff
> ==============================================================================
> --- tomcat/trunk/java/javax/websocket/RemoteEndpoint.java (original)
> +++ tomcat/trunk/java/javax/websocket/RemoteEndpoint.java Thu Jan 31 12:15:23 2013
> @@ -80,8 +80,8 @@ public interface RemoteEndpoint {
>
>      void sendObjectByCompletion(Object obj, SendHandler completion);
>
> -    void sendPing(ByteBuffer applicationData) throws IOException;
> +    void sendPing(ByteBuffer applicationData) throws IOException, IllegalArgumentException;
>
> -    void sendPong(ByteBuffer applicationData) throws IOException;
> +    void sendPong(ByteBuffer applicationData) throws IOException, IllegalArgumentException;

It is unusual to add a runtime exception to the official API. Usually
they are just documented.

Best regards,
Konstantin Kolinko

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