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/09/02 17:44:31 UTC
svn commit: r1519465 -
/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
Author: markt
Date: Mon Sep 2 15:44:31 2013
New Revision: 1519465
URL: http://svn.apache.org/r1519465
Log:
Enable AJP to work with Servlet 3.1 non-blocking reads. This is not a true non-blocking implementation. That requires further investigation marked by the TODOs in the code.
Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519465&r1=1519464&r2=1519465&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep 2 15:44:31 2013
@@ -44,6 +44,7 @@ import org.apache.tomcat.util.http.HttpM
import org.apache.tomcat.util.http.MimeHeaders;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
+import org.apache.tomcat.util.net.DispatchType;
import org.apache.tomcat.util.net.SSLSupport;
import org.apache.tomcat.util.net.SocketStatus;
import org.apache.tomcat.util.net.SocketWrapper;
@@ -515,17 +516,34 @@ public abstract class AbstractAjpProcess
sm.getString("ajpprocessor.comet.notsupported"));
} else if (actionCode == ActionCode.AVAILABLE) {
- // TODO
+ // Web Server only sends data when asked so unless end of stream has
+ // been reached, there should be data available.
+ // TODO Figure out if a 'true' non-blocking approach is possible
+ // for AJP and what changes would be required to support it.
+ if (!endOfStream) {
+ request.setAvailable(1);
+ }
+
} else if (actionCode == ActionCode.NB_WRITE_INTEREST) {
- // TODO
+ // Assume it is always possible write data.
+ // TODO Investigate 'true' non-blocking IO for AJP.
+ AtomicBoolean isReady = (AtomicBoolean)param;
+ isReady.set(true);
+
} else if (actionCode == ActionCode.NB_READ_INTEREST) {
// TODO
+ System.out.println("AJP Non-blocking IO TODO: NB_READ_INTEREST");
+
} else if (actionCode == ActionCode.REQUEST_BODY_FULLY_READ) {
- // TODO
+ AtomicBoolean result = (AtomicBoolean) param;
+ result.set(endOfStream);
+
} else if (actionCode == ActionCode.DISPATCH_READ) {
- // TODO
+ socketWrapper.addDispatch(DispatchType.NON_BLOCKING_READ);
+
} else if (actionCode == ActionCode.DISPATCH_WRITE) {
- // TODO
+ socketWrapper.addDispatch(DispatchType.NON_BLOCKING_WRITE);
+
} else {
actionInternal(actionCode, param);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org