You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2007/02/13 21:51:07 UTC
svn commit: r507209 - in
/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol:
BufferingHttpClientHandler.java BufferingHttpServiceHandler.java
ThrottlingHttpServiceHandler.java
Author: olegk
Date: Tue Feb 13 12:51:03 2007
New Revision: 507209
URL: http://svn.apache.org/viewvc?view=rev&rev=507209
Log:
Refactored client and server side service handlers to keep all the connection state details in one internal state object
Modified:
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpServiceHandler.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java?view=diff&rev=507209&r1=507208&r2=507209
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java Tue Feb 13 12:51:03 2007
@@ -68,8 +68,7 @@
*/
public class BufferingHttpClientHandler implements NHttpClientHandler {
- private static final String IN_BUF = "http.nio.in-buffer";
- private static final String OUT_BUF = "http.nio.out-buffer";
+ private static final String CONN_STATE = "http.nio.conn-state";
private HttpParams params;
private HttpProcessor httpProcessor;
@@ -128,11 +127,9 @@
initialize(conn, attachment);
- InputBuffer inbuffer = new InputBuffer(2048);
- OutputBuffer outbuffer = new OutputBuffer(2048);
-
- context.setAttribute(IN_BUF, inbuffer);
- context.setAttribute(OUT_BUF, outbuffer);
+ ConnState connState = new ConnState();
+
+ context.setAttribute(CONN_STATE, connState);
if (this.eventListener != null) {
InetAddress address = null;
@@ -172,11 +169,12 @@
public void requestReady(final NHttpClientConnection conn) {
HttpContext context = conn.getContext();
- OutputBuffer outbuffer = (OutputBuffer) context.getAttribute(OUT_BUF);
-
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
+ OutputBuffer buffer = connState.getOutbuffer();
+
try {
- submitRequest(conn, outbuffer);
+ submitRequest(conn, buffer);
} catch (IOException ex) {
shutdownConnection(conn);
@@ -194,18 +192,17 @@
public void inputReady(final NHttpClientConnection conn, final ContentDecoder decoder) {
HttpContext context = conn.getContext();
- InputBuffer inbuffer = (InputBuffer) context.getAttribute(IN_BUF);
- OutputBuffer outbuffer = (OutputBuffer) context.getAttribute(OUT_BUF);
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
+ InputBuffer buffer = connState.getInbuffer();
try {
-
- inbuffer.consumeContent(decoder);
+
+ buffer.consumeContent(decoder);
if (decoder.isCompleted()) {
- processResponse(conn, inbuffer);
- // Clean up buffers just in case
- inbuffer.clear();
- outbuffer.clear();
+ processResponse(conn, buffer);
+
+ connState.clear();
// Ready for another request
conn.requestOutput();
}
@@ -225,11 +222,13 @@
public void outputReady(final NHttpClientConnection conn, final ContentEncoder encoder) {
HttpContext context = conn.getContext();
- OutputBuffer outbuffer = (OutputBuffer) context.getAttribute(OUT_BUF);
+
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
+ OutputBuffer buffer = connState.getOutbuffer();
try {
- outbuffer.produceContent(encoder);
+ buffer.produceContent(encoder);
} catch (IOException ex) {
shutdownConnection(conn);
@@ -245,8 +244,8 @@
HttpRequest request = (HttpRequest) context.getAttribute(
HttpExecutionContext.HTTP_REQUEST);
- InputBuffer inbuffer = (InputBuffer) context.getAttribute(IN_BUF);
- OutputBuffer outbuffer = (OutputBuffer) context.getAttribute(OUT_BUF);
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
+ InputBuffer buffer = connState.getInbuffer();
if (response.getStatusLine().getStatusCode() < HttpStatus.SC_OK) {
// Just ignore 1xx responses;
@@ -256,10 +255,9 @@
if (!canResponseHaveBody(request, response)) {
try {
- processResponse(conn, inbuffer);
+ processResponse(conn, buffer);
// Clean up buffers just in case
- inbuffer.clear();
- outbuffer.clear();
+ connState.clear();
// Ready for another request
conn.requestOutput();
@@ -361,4 +359,31 @@
}
}
+
+ private static class ConnState {
+
+ private final InputBuffer inbuffer;
+ private final OutputBuffer outbuffer;
+
+ public ConnState() {
+ super();
+ this.inbuffer = new InputBuffer(2048);
+ this.outbuffer = new OutputBuffer(2048);
+ }
+
+ public InputBuffer getInbuffer() {
+ return this.inbuffer;
+ }
+
+ public OutputBuffer getOutbuffer() {
+ return this.outbuffer;
+ }
+
+ public void clear() {
+ this.inbuffer.clear();
+ this.outbuffer.clear();
+ }
+
+ }
+
}
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpServiceHandler.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpServiceHandler.java?view=diff&rev=507209&r1=507208&r2=507209
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpServiceHandler.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpServiceHandler.java Tue Feb 13 12:51:03 2007
@@ -77,8 +77,7 @@
*/
public class BufferingHttpServiceHandler implements NHttpServiceHandler {
- private static final String IN_BUF = "http.nio.in-buffer";
- private static final String OUT_BUF = "http.nio.out-buffer";
+ private static final String CONN_STATE = "http.nio.conn-state";
private HttpParams params;
private HttpProcessor httpProcessor;
@@ -131,11 +130,9 @@
public void connected(final NHttpServerConnection conn) {
HttpContext context = conn.getContext();
- InputBuffer inbuffer = new InputBuffer(2048);
- OutputBuffer outbuffer = new OutputBuffer(2048);
-
- context.setAttribute(IN_BUF, inbuffer);
- context.setAttribute(OUT_BUF, outbuffer);
+ ConnState connState = new ConnState();
+
+ context.setAttribute(CONN_STATE, connState);
if (this.eventListener != null) {
InetAddress address = null;
@@ -156,12 +153,9 @@
ver = HttpVersion.HTTP_1_1;
}
- InputBuffer inbuffer = (InputBuffer) context.getAttribute(IN_BUF);
- OutputBuffer outbuffer = (OutputBuffer) context.getAttribute(OUT_BUF);
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
- // Clean the buffers just in case
- inbuffer.clear();
- outbuffer.clear();
+ connState.clear();
try {
@@ -236,15 +230,16 @@
HttpContext context = conn.getContext();
HttpRequest request = conn.getHttpRequest();
- InputBuffer inbuffer = (InputBuffer) context.getAttribute(IN_BUF);
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
+ InputBuffer buffer = connState.getInbuffer();
try {
- inbuffer.consumeContent(decoder);
+ buffer.consumeContent(decoder);
if (decoder.isCompleted()) {
// Request entity has been fully received
// Create a wrapper entity instead of the original one
- BufferedContent.wrapEntity((HttpEntityEnclosingRequest) request, inbuffer);
+ BufferedContent.wrapEntity((HttpEntityEnclosingRequest) request, buffer);
processRequest(conn, request);
}
@@ -265,11 +260,13 @@
HttpContext context = conn.getContext();
HttpResponse response = conn.getHttpResponse();
- OutputBuffer outbuffer = (OutputBuffer) context.getAttribute(OUT_BUF);
+
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
+ OutputBuffer buffer = connState.getOutbuffer();
try {
- outbuffer.produceContent(encoder);
+ buffer.produceContent(encoder);
if (encoder.isCompleted()) {
if (!this.connStrategy.keepAlive(response, context)) {
conn.close();
@@ -379,7 +376,9 @@
final HttpResponse response) throws IOException, HttpException {
HttpContext context = conn.getContext();
- OutputBuffer outbuffer = (OutputBuffer) context.getAttribute(OUT_BUF);
+
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
+ OutputBuffer buffer = connState.getOutbuffer();
this.httpProcessor.process(response, context);
conn.submitResponse(response);
@@ -387,7 +386,7 @@
if (response.getEntity() != null) {
HttpEntity entity = response.getEntity();
if (entity != null) {
- OutputStream outstream = new ContentOutputStream(outbuffer);
+ OutputStream outstream = new ContentOutputStream(buffer);
entity.writeTo(outstream);
outstream.flush();
outstream.close();
@@ -395,4 +394,30 @@
}
}
+ private static class ConnState {
+
+ private final InputBuffer inbuffer;
+ private final OutputBuffer outbuffer;
+
+ public ConnState() {
+ super();
+ this.inbuffer = new InputBuffer(2048);
+ this.outbuffer = new OutputBuffer(2048);
+ }
+
+ public InputBuffer getInbuffer() {
+ return this.inbuffer;
+ }
+
+ public OutputBuffer getOutbuffer() {
+ return this.outbuffer;
+ }
+
+ public void clear() {
+ this.inbuffer.clear();
+ this.outbuffer.clear();
+ }
+
+ }
+
}
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java?view=diff&rev=507209&r1=507208&r2=507209
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java Tue Feb 13 12:51:03 2007
@@ -51,6 +51,7 @@
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.nio.ContentDecoder;
import org.apache.http.nio.ContentEncoder;
+import org.apache.http.nio.ContentIOControl;
import org.apache.http.nio.NHttpConnection;
import org.apache.http.nio.NHttpServerConnection;
import org.apache.http.nio.NHttpServiceHandler;
@@ -86,8 +87,7 @@
*/
public class ThrottlingHttpServiceHandler implements NHttpServiceHandler {
- private static final String IN_BUF = "http.nio.in-buffer";
- private static final String OUT_BUF = "http.nio.out-buffer";
+ private static final String CONN_STATE = "http.nio.conn-state";
private HttpParams params;
private HttpProcessor httpProcessor;
@@ -151,12 +151,10 @@
bufsize = 20480;
}
- SharedInputBuffer inbuffer = new SharedInputBuffer(bufsize, conn);
- SharedOutputBuffer outbuffer = new SharedOutputBuffer(bufsize, conn);
-
- context.setAttribute(IN_BUF, inbuffer);
- context.setAttribute(OUT_BUF, outbuffer);
-
+ ConnState connState = new ConnState(bufsize, conn);
+
+ context.setAttribute(CONN_STATE, connState);
+
if (this.eventListener != null) {
InetAddress address = null;
if (conn instanceof HttpInetConnection) {
@@ -169,11 +167,9 @@
public void closed(final NHttpServerConnection conn) {
HttpContext context = conn.getContext();
- SharedInputBuffer inbuffer = (SharedInputBuffer) context.getAttribute(IN_BUF);
- SharedOutputBuffer outbuffer = (SharedOutputBuffer) context.getAttribute(OUT_BUF);
-
- inbuffer.shutdown();
- outbuffer.shutdown();
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
+
+ connState.shutdown();
if (this.eventListener != null) {
InetAddress address = null;
@@ -240,12 +236,10 @@
ver = HttpVersion.HTTP_1_1;
}
- SharedInputBuffer inbuffer = (SharedInputBuffer) context.getAttribute(IN_BUF);
- SharedOutputBuffer outbuffer = (SharedOutputBuffer) context.getAttribute(OUT_BUF);
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
+ SharedInputBuffer buffer = connState.getInbuffer();
- // Clean the buffers just in case
- inbuffer.reset();
- outbuffer.reset();
+ connState.clear();
if (request instanceof HttpEntityEnclosingRequest) {
if (((HttpEntityEnclosingRequest) request).expectContinue()) {
@@ -266,7 +260,7 @@
}
}
// Create a wrapper entity instead of the original one
- BufferedContent.wrapEntity((HttpEntityEnclosingRequest) request, inbuffer);
+ BufferedContent.wrapEntity((HttpEntityEnclosingRequest) request, buffer);
}
this.executor.execute(new Runnable() {
@@ -296,11 +290,12 @@
public void inputReady(final NHttpServerConnection conn, final ContentDecoder decoder) {
HttpContext context = conn.getContext();
- SharedInputBuffer inbuffer = (SharedInputBuffer) context.getAttribute(IN_BUF);
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
+ SharedInputBuffer buffer = connState.getInbuffer();
try {
- inbuffer.consumeContent(decoder);
+ buffer.consumeContent(decoder);
} catch (IOException ex) {
shutdownConnection(conn);
@@ -314,11 +309,12 @@
HttpContext context = conn.getContext();
HttpResponse response = conn.getHttpResponse();
- SharedOutputBuffer outbuffer = (SharedOutputBuffer) context.getAttribute(OUT_BUF);
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
+ SharedOutputBuffer buffer = connState.getOutbuffer();
try {
- outbuffer.produceContent(encoder);
+ buffer.produceContent(encoder);
if (encoder.isCompleted()) {
if (!this.connStrategy.keepAlive(response, context)) {
conn.close();
@@ -336,19 +332,14 @@
private void shutdownConnection(final NHttpConnection conn) {
HttpContext context = conn.getContext();
- SharedInputBuffer inbuffer = (SharedInputBuffer) context.getAttribute(IN_BUF);
- SharedOutputBuffer outbuffer = (SharedOutputBuffer) context.getAttribute(OUT_BUF);
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
try {
conn.shutdown();
} catch (IOException ignore) {
}
-
- if (inbuffer != null) {
- inbuffer.shutdown();
- }
- if (outbuffer != null) {
- outbuffer.shutdown();
+ if (connState != null) {
+ connState.shutdown();
}
}
@@ -429,18 +420,51 @@
final HttpResponse response) throws IOException, HttpException {
HttpContext context = conn.getContext();
- SharedOutputBuffer outbuffer = (SharedOutputBuffer) context.getAttribute(OUT_BUF);
+
+ ConnState connState = (ConnState) context.getAttribute(CONN_STATE);
+ SharedOutputBuffer buffer = connState.getOutbuffer();
this.httpProcessor.process(response, context);
conn.submitResponse(response);
if (response.getEntity() != null) {
HttpEntity entity = response.getEntity();
- OutputStream outstream = new ContentOutputStream(outbuffer);
+ OutputStream outstream = new ContentOutputStream(buffer);
entity.writeTo(outstream);
outstream.flush();
outstream.close();
}
+ }
+
+ private static class ConnState {
+
+ private final SharedInputBuffer inbuffer;
+ private final SharedOutputBuffer outbuffer;
+
+ public ConnState(int bufferSize, final ContentIOControl ioControl) {
+ super();
+ this.inbuffer = new SharedInputBuffer(bufferSize, ioControl);
+ this.outbuffer = new SharedOutputBuffer(bufferSize, ioControl);
+ }
+
+ public SharedInputBuffer getInbuffer() {
+ return this.inbuffer;
+ }
+
+ public SharedOutputBuffer getOutbuffer() {
+ return this.outbuffer;
+ }
+
+ public void shutdown() {
+ this.inbuffer.shutdown();
+ this.outbuffer.shutdown();
+ }
+
+ public void clear() {
+ this.inbuffer.reset();
+ this.outbuffer.reset();
+ }
+
}
}