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: [email protected]
For additional commands, e-mail: [email protected]