Author: markt
Date: Mon Apr 29 20:01:59 2013
New Revision: 1477306

URL: http://svn.apache.org/r1477306
Log:
Simplify ActionCode.SET_READ_LISTENER
Add missing tests when setting a non-blocking ReadListener and use i18n for all 
exception messages if a test fails

Modified:
    tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java
    tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties
    tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java

Modified: 
tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java?rev=1477306&r1=1477305&r2=1477306&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java Mon 
Apr 29 20:01:59 2013
@@ -119,7 +119,5 @@ public class CoyoteOutputStream
     public void setWriteListener(WriteListener listener) {
         ob.setWriteListener(listener);
     }
-
-
 }
 

Modified: 
tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties?rev=1477306&r1=1477305&r2=1477306&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties 
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties Mon 
Apr 29 20:01:59 2013
@@ -62,6 +62,10 @@ inputBuffer.notAsync=It is only valid to
 inputBuffer.nullListener=The listener passed to setReadListener() may not be 
null
 inputBuffer.streamClosed=Stream closed
 
+outputBuffer.listenerSet=The non-blocking write listener has already been set
+outputBuffer.notAsync=It is only valid to switch to non-blocking IO within 
async processing or HTTP upgrade processing
+outputBuffer.nullListener=The listener passed to setWriteListener() may not be 
null
+
 requestFacade.nullRequest=The request object has been recycled and is no 
longer associated with this facade
 
 responseFacade.nullResponse=The response object has been recycled and is no 
longer associated with this facade

Modified: tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java?rev=1477306&r1=1477305&r2=1477306&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java Mon Apr 
29 20:01:59 2013
@@ -33,6 +33,7 @@ import org.apache.coyote.Response;
 import org.apache.tomcat.util.buf.ByteChunk;
 import org.apache.tomcat.util.buf.C2BConverter;
 import org.apache.tomcat.util.buf.CharChunk;
+import org.apache.tomcat.util.res.StringManager;
 
 
 /**
@@ -46,9 +47,11 @@ import org.apache.tomcat.util.buf.CharCh
 public class OutputBuffer extends Writer
     implements ByteChunk.ByteOutputChannel, CharChunk.CharOutputChannel {
 
+    private static final StringManager sm =
+            StringManager.getManager(Constants.Package);
 
-    // -------------------------------------------------------------- Constants
 
+    // -------------------------------------------------------------- Constants
 
     public static final String DEFAULT_ENCODING =
         org.apache.coyote.Constants.DEFAULT_CHARACTER_ENCODING;
@@ -57,7 +60,6 @@ public class OutputBuffer extends Writer
 
     // ----------------------------------------------------- Instance Variables
 
-
     /**
      * The byte buffer.
      */
@@ -664,9 +666,26 @@ public class OutputBuffer extends Writer
 
     private volatile WriteListener listener;
     public void setWriteListener(WriteListener listener) {
-        if (getWriteListener()!=null) throw new IllegalStateException("Write 
listener already set.");
+        if (listener == null) {
+            throw new NullPointerException(
+                    sm.getString("outputBuffer.nullListener"));
+        }
+        if (getWriteListener() != null) {
+            throw new IllegalStateException(
+                    sm.getString("outputBuffer.listenerSet"));
+        }
+        // Note: This class is not used for HTTP upgrade so only need to test
+        //       for async
+        AtomicBoolean result = new AtomicBoolean(false);
+        coyoteResponse.action(ActionCode.ASYNC_IS_ASYNC, result);
+        if (!result.get()) {
+            throw new IllegalStateException(
+                    sm.getString("outputBuffer.notAsync"));
+        }
+
         this.listener = listener;
-        coyoteResponse.action(ActionCode.SET_WRITE_LISTENER, listener);
+        coyoteResponse.setWriteListener(listener);
+        coyoteResponse.action(ActionCode.SET_WRITE_LISTENER, null);
     }
 
     public WriteListener getWriteListener() {

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=1477306&r1=1477305&r2=1477306&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Mon Apr 
29 20:01:59 2013
@@ -24,7 +24,6 @@ import java.util.concurrent.atomic.Atomi
 
 import javax.net.ssl.SSLEngine;
 import javax.servlet.RequestDispatcher;
-import javax.servlet.WriteListener;
 
 import org.apache.coyote.ActionCode;
 import org.apache.coyote.RequestInfo;
@@ -600,9 +599,7 @@ public class Http11NioProcessor extends 
                 
((NioEndpoint)endpoint).dispatchForEvent(this.socket.getSocket(),SocketStatus.OPEN_READ,
 true);
             }
         } else if (actionCode == ActionCode.SET_WRITE_LISTENER) {
-            WriteListener listener = (WriteListener)param;
-            response.setWriteListener(listener);
-            outputBuffer.setBlocking(listener==null);
+            outputBuffer.setBlocking(false);
         } else if (actionCode == ActionCode.NB_READ_INTEREST) {
             if (socket==null || socket.getSocket().getAttachment(false)==null) 
{
                 return;



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

Reply via email to