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 2011/08/12 12:35:33 UTC
svn commit: r1157038 [1/2] - in /httpcomponents/httpcore/trunk:
httpcore-nio/src/examples/org/apache/http/examples/nio/
httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/
httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/ httpcore-nio/...
Author: olegk
Date: Fri Aug 12 10:35:32 2011
New Revision: 1157038
URL: http://svn.apache.org/viewvc?rev=1157038&view=rev
Log:
Replaced HttpParams with IOReactorConfig java bean as a configuration mechanism for I/O reactors; deprecated NIOReactorPNames and related classes; deprecated throttling protocol handlers
Added:
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/IOReactorConfig.java (with props)
Modified:
httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/ElementalEchoServer.java
httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java
httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpReverseProxy.java
httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java
httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLServer.java
httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpServer.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOConnPool.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOPoolEntry.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultConnectingIOReactor.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultListeningIOReactor.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorPNames.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorParamBean.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorParams.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpClientHandler.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java
httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java
httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/reactor/TestDefaultListeningIOReactor.java
httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestThrottlingNHttpHandlers.java
httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/HttpClientNio.java
httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/HttpSSLClient.java
httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/HttpSSLServer.java
httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/HttpServerNio.java
httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/impl/pool/BasicConnPool.java
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/ElementalEchoServer.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/ElementalEchoServer.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/ElementalEchoServer.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/ElementalEchoServer.java Fri Aug 12 10:35:32 2011
@@ -31,20 +31,17 @@ import java.io.InterruptedIOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
-import org.apache.http.params.SyncBasicHttpParams;
import org.apache.http.impl.nio.reactor.DefaultListeningIOReactor;
import org.apache.http.nio.reactor.EventMask;
import org.apache.http.nio.reactor.IOEventDispatch;
import org.apache.http.nio.reactor.IOSession;
import org.apache.http.nio.reactor.ListeningIOReactor;
-import org.apache.http.params.HttpParams;
public class ElementalEchoServer {
public static void main(String[] args) throws Exception {
- HttpParams params = new SyncBasicHttpParams();
IOEventDispatch ioEventDispatch = new DefaultIoEventDispatch();
- ListeningIOReactor ioReactor = new DefaultListeningIOReactor(2, params);
+ ListeningIOReactor ioReactor = new DefaultListeningIOReactor();
ioReactor.listen(new InetSocketAddress(8080));
try {
ioReactor.execute(ioEventDispatch);
@@ -55,11 +52,11 @@ public class ElementalEchoServer {
}
System.out.println("Shutdown");
}
-
+
static class DefaultIoEventDispatch implements IOEventDispatch {
private final ByteBuffer buffer = ByteBuffer.allocate(1024);
-
+
public void connected(IOSession session) {
System.out.println("connected");
session.setEventMask(EventMask.READ);
@@ -101,10 +98,10 @@ public class ElementalEchoServer {
System.out.println("timeout");
session.close();
}
-
+
public void disconnected(final IOSession session) {
System.out.println("disconnected");
}
}
-
+
}
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java Fri Aug 12 10:35:32 2011
@@ -28,6 +28,7 @@ package org.apache.http.examples.nio;
import java.io.IOException;
import java.io.InterruptedIOException;
+import java.nio.channels.SelectionKey;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -42,11 +43,11 @@ import org.apache.http.impl.nio.pool.Bas
import org.apache.http.impl.nio.pool.BasicNIOPoolEntry;
import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
import org.apache.http.message.BasicHttpRequest;
-import org.apache.http.nio.NHttpConnection;
import org.apache.http.nio.protocol.BufferingHttpClientHandler;
import org.apache.http.nio.protocol.HttpRequestExecutionHandler;
import org.apache.http.nio.reactor.ConnectingIOReactor;
import org.apache.http.nio.reactor.IOEventDispatch;
+import org.apache.http.nio.reactor.IOSession;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.params.HttpParams;
@@ -69,6 +70,7 @@ import org.apache.http.protocol.RequestU
public class NHttpClient {
public static void main(String[] args) throws Exception {
+ final ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor();
HttpParams params = new SyncBasicHttpParams();
params
.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 5000)
@@ -78,9 +80,8 @@ public class NHttpClient {
.setBooleanParameter(CoreConnectionPNames.TCP_NODELAY, true)
.setParameter(CoreProtocolPNames.USER_AGENT, "Test/1.1");
- final ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(2, params);
- BasicNIOConnPool pool = new BasicNIOConnPool(ioReactor, params);
+ BasicNIOConnPool pool = new BasicNIOConnPool(ioReactor);
// Limit total number of connections to just two
pool.setDefaultMaxPerRoute(2);
pool.setMaxTotal(2);
@@ -166,9 +167,9 @@ public class NHttpClient {
public void completed(final BasicNIOPoolEntry entry) {
this.poolEntry = entry;
- NHttpConnection conn = entry.getConnection();
- conn.getContext().setAttribute("executor", this);
- conn.requestOutput();
+ IOSession session = entry.getConnection();
+ session.setAttribute("executor", this);
+ session.setEvent(SelectionKey.OP_WRITE);
System.out.println(this.poolEntry.getRoute() + ": obtained connection from the pool");
}
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpReverseProxy.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpReverseProxy.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpReverseProxy.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpReverseProxy.java Fri Aug 12 10:35:32 2011
@@ -50,6 +50,7 @@ import org.apache.http.impl.nio.DefaultC
import org.apache.http.impl.nio.DefaultServerIOEventDispatch;
import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
import org.apache.http.impl.nio.reactor.DefaultListeningIOReactor;
+import org.apache.http.impl.nio.reactor.IOReactorConfig;
import org.apache.http.nio.ContentDecoder;
import org.apache.http.nio.ContentEncoder;
import org.apache.http.nio.IOControl;
@@ -85,14 +86,14 @@ import org.apache.http.protocol.Response
* Rudimentary HTTP/1.1 reverse proxy based on the non-blocking I/O model.
* <p>
* Please note the purpose of this application is demonstrate the usage of HttpCore APIs.
- * It is NOT intended to demonstrate the most efficient way of building an HTTP reverse proxy.
- *
+ * It is NOT intended to demonstrate the most efficient way of building an HTTP reverse proxy.
+ *
*
*/
public class NHttpReverseProxy {
public static void main(String[] args) throws Exception {
-
+
if (args.length < 1) {
System.out.println("Usage: NHttpReverseProxy <hostname> [port]");
System.exit(1);
@@ -102,25 +103,24 @@ public class NHttpReverseProxy {
if (args.length > 1) {
port = Integer.parseInt(args[1]);
}
-
+
// Target host
- HttpHost targetHost = new HttpHost(hostname, port);
-
+ HttpHost targetHost = new HttpHost(hostname, port);
+
HttpParams params = new SyncBasicHttpParams();
params
.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 30000)
.setIntParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE, 8 * 1024)
.setBooleanParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK, false)
.setBooleanParameter(CoreConnectionPNames.TCP_NODELAY, true)
- .setParameter(CoreProtocolPNames.ORIGIN_SERVER, "HttpComponents/1.1")
- .setParameter(CoreProtocolPNames.USER_AGENT, "HttpComponents/1.1");
+ .setParameter(CoreProtocolPNames.ORIGIN_SERVER, "Test/1.1")
+ .setParameter(CoreProtocolPNames.USER_AGENT, "Test/1.1");
- final ConnectingIOReactor connectingIOReactor = new DefaultConnectingIOReactor(
- 1, params);
+ IOReactorConfig config = new IOReactorConfig();
+ config.setIoThreadCount(1);
+ final ConnectingIOReactor connectingIOReactor = new DefaultConnectingIOReactor(config);
+ final ListeningIOReactor listeningIOReactor = new DefaultListeningIOReactor(config);
- final ListeningIOReactor listeningIOReactor = new DefaultListeningIOReactor(
- 1, params);
-
// Set up HTTP protocol processor for incoming connections
HttpProcessor inhttpproc = new ImmutableHttpProcessor(
new HttpRequestInterceptor[] {
@@ -130,7 +130,7 @@ public class NHttpReverseProxy {
new RequestUserAgent(),
new RequestExpectContinue()
});
-
+
// Set up HTTP protocol processor for outgoing connections
HttpProcessor outhttpproc = new ImmutableHttpProcessor(
new HttpResponseInterceptor[] {
@@ -139,7 +139,7 @@ public class NHttpReverseProxy {
new ResponseContent(),
new ResponseConnControl()
});
-
+
NHttpClientHandler connectingHandler = new ConnectingHandler(
inhttpproc,
new DefaultConnectionReuseStrategy(),
@@ -148,19 +148,19 @@ public class NHttpReverseProxy {
NHttpServiceHandler listeningHandler = new ListeningHandler(
targetHost,
connectingIOReactor,
- outhttpproc,
+ outhttpproc,
new DefaultHttpResponseFactory(),
new DefaultConnectionReuseStrategy(),
params);
-
+
final IOEventDispatch connectingEventDispatch = new DefaultClientIOEventDispatch(
connectingHandler, params);
final IOEventDispatch listeningEventDispatch = new DefaultServerIOEventDispatch(
listeningHandler, params);
-
+
Thread t = new Thread(new Runnable() {
-
+
public void run() {
try {
connectingIOReactor.execute(connectingEventDispatch);
@@ -170,10 +170,10 @@ public class NHttpReverseProxy {
System.err.println("I/O error: " + e.getMessage());
}
}
-
+
});
t.start();
-
+
try {
listeningIOReactor.listen(new InetSocketAddress(8888));
listeningIOReactor.execute(listeningEventDispatch);
@@ -187,16 +187,16 @@ public class NHttpReverseProxy {
static class ListeningHandler implements NHttpServiceHandler {
private final HttpHost targetHost;
- private final ConnectingIOReactor connectingIOReactor;
+ private final ConnectingIOReactor connectingIOReactor;
private final HttpProcessor httpProcessor;
private final HttpResponseFactory responseFactory;
private final ConnectionReuseStrategy connStrategy;
private final HttpParams params;
-
+
public ListeningHandler(
final HttpHost targetHost,
final ConnectingIOReactor connectingIOReactor,
- final HttpProcessor httpProcessor,
+ final HttpProcessor httpProcessor,
final HttpResponseFactory responseFactory,
final ConnectionReuseStrategy connStrategy,
final HttpParams params) {
@@ -213,26 +213,26 @@ public class NHttpReverseProxy {
System.out.println(conn + " [client->proxy] conn open");
ProxyTask proxyTask = new ProxyTask();
-
+
synchronized (proxyTask) {
// Initialize connection state
proxyTask.setTarget(this.targetHost);
proxyTask.setClientIOControl(conn);
proxyTask.setClientState(ConnState.CONNECTED);
-
+
HttpContext context = conn.getContext();
context.setAttribute(ProxyTask.ATTRIB, proxyTask);
-
+
InetSocketAddress address = new InetSocketAddress(
- this.targetHost.getHostName(),
- this.targetHost.getPort());
-
+ this.targetHost.getHostName(),
+ this.targetHost.getPort());
+
this.connectingIOReactor.connect(
- address,
- null,
- proxyTask,
- null);
+ address,
+ null,
+ proxyTask,
+ null);
}
}
@@ -252,25 +252,25 @@ public class NHttpReverseProxy {
try {
HttpRequest request = conn.getHttpRequest();
-
+
System.out.println(conn + " [client->proxy] >> " + request.getRequestLine());
-
+
ProtocolVersion ver = request.getRequestLine().getProtocolVersion();
if (!ver.lessEquals(HttpVersion.HTTP_1_1)) {
- // Downgrade protocol version if greater than HTTP/1.1
+ // Downgrade protocol version if greater than HTTP/1.1
ver = HttpVersion.HTTP_1_1;
}
-
+
// Update connection state
proxyTask.setRequest(request);
proxyTask.setClientState(ConnState.REQUEST_RECEIVED);
-
+
// See if the client expects a 100-Continue
if (request instanceof HttpEntityEnclosingRequest) {
if (((HttpEntityEnclosingRequest) request).expectContinue()) {
HttpResponse ack = this.responseFactory.newHttpResponse(
- ver,
- HttpStatus.SC_CONTINUE,
+ ver,
+ HttpStatus.SC_CONTINUE,
context);
conn.submitResponse(ack);
}
@@ -278,13 +278,13 @@ public class NHttpReverseProxy {
// No request content expected. Suspend client input
conn.suspendInput();
}
-
+
// If there is already a connection to the origin server
// make sure origin output is active
if (proxyTask.getOriginIOControl() != null) {
proxyTask.getOriginIOControl().requestOutput();
}
-
+
} catch (IOException ex) {
shutdownConnection(conn);
} catch (HttpException ex) {
@@ -305,7 +305,7 @@ public class NHttpReverseProxy {
&& connState != ConnState.REQUEST_BODY_STREAM) {
throw new IllegalStateException("Illegal client connection state: " + connState);
}
-
+
try {
ByteBuffer dst = proxyTask.getInBuffer();
@@ -317,7 +317,7 @@ public class NHttpReverseProxy {
// until the origin handler frees up some space in the buffer
conn.suspendInput();
}
- // If there is some content in the input buffer make sure origin
+ // If there is some content in the input buffer make sure origin
// output is active
if (dst.position() > 0) {
if (proxyTask.getOriginIOControl() != null) {
@@ -334,7 +334,7 @@ public class NHttpReverseProxy {
} else {
proxyTask.setClientState(ConnState.REQUEST_BODY_STREAM);
}
-
+
} catch (IOException ex) {
shutdownConnection(conn);
}
@@ -350,7 +350,7 @@ public class NHttpReverseProxy {
synchronized (proxyTask) {
ConnState connState = proxyTask.getClientState();
if (connState == ConnState.IDLE) {
- // Response not available
+ // Response not available
return;
}
if (connState != ConnState.REQUEST_RECEIVED
@@ -375,27 +375,27 @@ public class NHttpReverseProxy {
response.removeHeaders("TE");
response.removeHeaders("Trailers");
response.removeHeaders("Upgrade");
-
+
response.setParams(
new DefaultedHttpParams(response.getParams(), this.params));
- // Close client connection if the connection to the target
+ // Close client connection if the connection to the target
// is no longer active / open
if (proxyTask.getOriginState().compareTo(ConnState.CLOSING) >= 0) {
- response.addHeader(HTTP.CONN_DIRECTIVE, "Close");
+ response.addHeader(HTTP.CONN_DIRECTIVE, "Close");
}
-
+
// Pre-process HTTP request
context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
context.setAttribute(ExecutionContext.HTTP_REQUEST, request);
this.httpProcessor.process(response, context);
-
+
conn.submitResponse(response);
proxyTask.setClientState(ConnState.RESPONSE_SENT);
System.out.println(conn + " [client<-proxy] << " + response.getStatusLine());
-
+
if (!canResponseHaveBody(request, response)) {
conn.resetInput();
if (!this.connStrategy.keepAlive(response, context)) {
@@ -409,7 +409,7 @@ public class NHttpReverseProxy {
// Ready to deal with a new request
}
}
-
+
} catch (IOException ex) {
shutdownConnection(conn);
} catch (HttpException ex) {
@@ -417,21 +417,21 @@ public class NHttpReverseProxy {
}
}
}
-
+
private boolean canResponseHaveBody(
final HttpRequest request, final HttpResponse response) {
if (request != null && "HEAD".equalsIgnoreCase(request.getRequestLine().getMethod())) {
return false;
}
-
- int status = response.getStatusLine().getStatusCode();
- return status >= HttpStatus.SC_OK
- && status != HttpStatus.SC_NO_CONTENT
+
+ int status = response.getStatusLine().getStatusCode();
+ return status >= HttpStatus.SC_OK
+ && status != HttpStatus.SC_NO_CONTENT
&& status != HttpStatus.SC_NOT_MODIFIED
- && status != HttpStatus.SC_RESET_CONTENT;
+ && status != HttpStatus.SC_RESET_CONTENT;
}
-
+
public void outputReady(final NHttpServerConnection conn, final ContentEncoder encoder) {
System.out.println(conn + " [client<-proxy] output ready");
@@ -449,7 +449,7 @@ public class NHttpReverseProxy {
if (response == null) {
throw new IllegalStateException("HTTP request is null");
}
-
+
try {
ByteBuffer src = proxyTask.getOutBuffer();
@@ -464,7 +464,7 @@ public class NHttpReverseProxy {
if (proxyTask.getOriginState() == ConnState.RESPONSE_BODY_DONE) {
encoder.complete();
} else {
- // Input output is empty. Wait until the origin handler
+ // Input output is empty. Wait until the origin handler
// fills up the buffer
conn.suspendOutput();
}
@@ -489,10 +489,10 @@ public class NHttpReverseProxy {
// Make sure origin input is active
proxyTask.getOriginIOControl().requestInput();
}
-
+
} catch (IOException ex) {
shutdownConnection(conn);
- }
+ }
}
}
@@ -515,7 +515,7 @@ public class NHttpReverseProxy {
shutdownConnection(conn);
return;
}
-
+
HttpContext context = conn.getContext();
try {
@@ -528,11 +528,11 @@ public class NHttpReverseProxy {
context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
context.setAttribute(ExecutionContext.HTTP_REQUEST, null);
this.httpProcessor.process(response, context);
-
+
conn.submitResponse(response);
conn.close();
-
+
} catch (IOException ex) {
shutdownConnection(conn);
} catch (HttpException ex) {
@@ -544,12 +544,12 @@ public class NHttpReverseProxy {
shutdownConnection(conn);
System.out.println(conn + " [client->proxy] I/O error: " + ex.getMessage());
}
-
+
public void timeout(final NHttpServerConnection conn) {
System.out.println(conn + " [client->proxy] timeout");
closeConnection(conn);
}
-
+
private void shutdownConnection(final NHttpConnection conn) {
try {
conn.shutdown();
@@ -565,15 +565,15 @@ public class NHttpReverseProxy {
}
}
-
+
static class ConnectingHandler implements NHttpClientHandler {
private final HttpProcessor httpProcessor;
private final ConnectionReuseStrategy connStrategy;
private final HttpParams params;
-
+
public ConnectingHandler(
- final HttpProcessor httpProcessor,
+ final HttpProcessor httpProcessor,
final ConnectionReuseStrategy connStrategy,
final HttpParams params) {
super();
@@ -581,10 +581,10 @@ public class NHttpReverseProxy {
this.connStrategy = connStrategy;
this.params = params;
}
-
+
public void connected(final NHttpClientConnection conn, final Object attachment) {
System.out.println(conn + " [proxy->origin] conn open");
-
+
// The shared state object is expected to be passed as an attachment
ProxyTask proxyTask = (ProxyTask) attachment;
@@ -601,7 +601,7 @@ public class NHttpReverseProxy {
context.setAttribute(ProxyTask.ATTRIB, proxyTask);
// Update connection state
proxyTask.setOriginState(ConnState.CONNECTED);
-
+
if (proxyTask.getRequest() != null) {
conn.requestOutput();
}
@@ -616,7 +616,7 @@ public class NHttpReverseProxy {
synchronized (proxyTask) {
ConnState connState = proxyTask.getOriginState();
- if (connState == ConnState.REQUEST_SENT
+ if (connState == ConnState.REQUEST_SENT
|| connState == ConnState.REQUEST_BODY_DONE) {
// Request sent but no response available yet
return;
@@ -631,7 +631,7 @@ public class NHttpReverseProxy {
if (request == null) {
throw new IllegalStateException("HTTP request is null");
}
-
+
// Remove hop-by-hop headers
request.removeHeaders(HTTP.CONTENT_LEN);
request.removeHeaders(HTTP.TRANSFER_ENCODING);
@@ -644,14 +644,14 @@ public class NHttpReverseProxy {
request.removeHeaders("Upgrade");
// Remove host header
request.removeHeaders(HTTP.TARGET_HOST);
-
+
HttpHost targetHost = proxyTask.getTarget();
-
+
try {
-
+
request.setParams(
new DefaultedHttpParams(request.getParams(), this.params));
-
+
// Pre-process HTTP request
context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, targetHost);
@@ -661,21 +661,21 @@ public class NHttpReverseProxy {
conn.submitRequest(request);
// Update connection state
proxyTask.setOriginState(ConnState.REQUEST_SENT);
-
+
System.out.println(conn + " [proxy->origin] >> " + request.getRequestLine().toString());
-
+
} catch (IOException ex) {
shutdownConnection(conn);
} catch (HttpException ex) {
shutdownConnection(conn);
}
-
+
}
}
public void outputReady(final NHttpClientConnection conn, final ContentEncoder encoder) {
System.out.println(conn + " [proxy->origin] output ready");
-
+
HttpContext context = conn.getContext();
ProxyTask proxyTask = (ProxyTask) context.getAttribute(ProxyTask.ATTRIB);
@@ -685,21 +685,21 @@ public class NHttpReverseProxy {
&& connState != ConnState.REQUEST_BODY_STREAM) {
throw new IllegalStateException("Illegal target connection state: " + connState);
}
-
+
try {
-
+
ByteBuffer src = proxyTask.getInBuffer();
src.flip();
int bytesWritten = encoder.write(src);
System.out.println(conn + " [proxy->origin] " + bytesWritten + " bytes written");
System.out.println(conn + " [proxy->origin] " + encoder);
src.compact();
-
+
if (src.position() == 0) {
if (proxyTask.getClientState() == ConnState.REQUEST_BODY_DONE) {
encoder.complete();
} else {
- // Input buffer is empty. Wait until the client fills up
+ // Input buffer is empty. Wait until the client fills up
// the buffer
conn.suspendOutput();
}
@@ -713,7 +713,7 @@ public class NHttpReverseProxy {
// Make sure client input is active
proxyTask.getClientIOControl().requestInput();
}
-
+
} catch (IOException ex) {
shutdownConnection(conn);
}
@@ -722,7 +722,7 @@ public class NHttpReverseProxy {
public void responseReceived(final NHttpClientConnection conn) {
System.out.println(conn + " [proxy<-origin] response received");
-
+
HttpContext context = conn.getContext();
ProxyTask proxyTask = (ProxyTask) context.getAttribute(ProxyTask.ATTRIB);
@@ -737,18 +737,18 @@ public class NHttpReverseProxy {
HttpRequest request = proxyTask.getRequest();
System.out.println(conn + " [proxy<-origin] << " + response.getStatusLine());
-
+
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode < HttpStatus.SC_OK) {
// Ignore 1xx response
return;
}
try {
-
+
// Update connection state
proxyTask.setResponse(response);
proxyTask.setOriginState(ConnState.RESPONSE_RECEIVED);
-
+
if (!canResponseHaveBody(request, response)) {
conn.resetInput();
if (!this.connStrategy.keepAlive(response, context)) {
@@ -773,14 +773,14 @@ public class NHttpReverseProxy {
if (request != null && "HEAD".equalsIgnoreCase(request.getRequestLine().getMethod())) {
return false;
}
-
- int status = response.getStatusLine().getStatusCode();
- return status >= HttpStatus.SC_OK
- && status != HttpStatus.SC_NO_CONTENT
+
+ int status = response.getStatusLine().getStatusCode();
+ return status >= HttpStatus.SC_OK
+ && status != HttpStatus.SC_NO_CONTENT
&& status != HttpStatus.SC_NOT_MODIFIED
- && status != HttpStatus.SC_RESET_CONTENT;
+ && status != HttpStatus.SC_RESET_CONTENT;
}
-
+
public void inputReady(final NHttpClientConnection conn, final ContentDecoder decoder) {
System.out.println(conn + " [proxy<-origin] input ready");
@@ -796,22 +796,22 @@ public class NHttpReverseProxy {
HttpResponse response = proxyTask.getResponse();
try {
-
+
ByteBuffer dst = proxyTask.getOutBuffer();
int bytesRead = decoder.read(dst);
System.out.println(conn + " [proxy<-origin] " + bytesRead + " bytes read");
System.out.println(conn + " [proxy<-origin] " + decoder);
if (!dst.hasRemaining()) {
- // Output buffer is full. Suspend origin input until
+ // Output buffer is full. Suspend origin input until
// the client handler frees up some space in the buffer
conn.suspendInput();
}
- // If there is some content in the buffer make sure client output
+ // If there is some content in the buffer make sure client output
// is active
if (dst.position() > 0) {
proxyTask.getClientIOControl().requestOutput();
}
-
+
if (decoder.isCompleted()) {
System.out.println(conn + " [proxy<-origin] response body received");
proxyTask.setOriginState(ConnState.RESPONSE_BODY_DONE);
@@ -824,7 +824,7 @@ public class NHttpReverseProxy {
} else {
proxyTask.setOriginState(ConnState.RESPONSE_BODY_STREAM);
}
-
+
} catch (IOException ex) {
shutdownConnection(conn);
}
@@ -852,19 +852,19 @@ public class NHttpReverseProxy {
shutdownConnection(conn);
System.out.println(conn + " [proxy->origin] I/O error: " + ex.getMessage());
}
-
+
public void timeout(final NHttpClientConnection conn) {
System.out.println(conn + " [proxy->origin] timeout");
closeConnection(conn);
}
-
+
private void shutdownConnection(final HttpConnection conn) {
try {
conn.shutdown();
} catch (IOException ignore) {
}
}
-
+
private void closeConnection(final HttpConnection conn) {
try {
conn.shutdown();
@@ -872,8 +872,8 @@ public class NHttpReverseProxy {
}
}
- }
-
+ }
+
enum ConnState {
IDLE,
CONNECTED,
@@ -888,25 +888,25 @@ public class NHttpReverseProxy {
CLOSING,
CLOSED
}
-
+
static class ProxyTask {
-
+
public static final String ATTRIB = "nhttp.proxy-task";
-
+
private final ByteBuffer inBuffer;
private final ByteBuffer outBuffer;
private HttpHost target;
-
+
private IOControl originIOControl;
private IOControl clientIOControl;
-
+
private ConnState originState;
private ConnState clientState;
-
+
private HttpRequest request;
private HttpResponse response;
-
+
public ProxyTask() {
super();
this.originState = ConnState.IDLE;
@@ -922,7 +922,7 @@ public class NHttpReverseProxy {
public ByteBuffer getOutBuffer() {
return this.outBuffer;
}
-
+
public HttpHost getTarget() {
return this.target;
}
@@ -962,7 +962,7 @@ public class NHttpReverseProxy {
public void setOriginIOControl(final IOControl originIOControl) {
this.originIOControl = originIOControl;
}
-
+
public ConnState getOriginState() {
return this.originState;
}
@@ -970,7 +970,7 @@ public class NHttpReverseProxy {
public void setOriginState(final ConnState state) {
this.originState = state;
}
-
+
public ConnState getClientState() {
return this.clientState;
}
@@ -987,7 +987,7 @@ public class NHttpReverseProxy {
this.request = null;
this.response = null;
}
-
+
public void shutdown() {
if (this.clientIOControl != null) {
try {
@@ -1004,5 +1004,5 @@ public class NHttpReverseProxy {
}
}
-
+
}
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java Fri Aug 12 10:35:32 2011
@@ -28,6 +28,7 @@ package org.apache.http.examples.nio;
import java.io.IOException;
import java.io.InterruptedIOException;
+import java.nio.channels.SelectionKey;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -44,11 +45,11 @@ import org.apache.http.impl.nio.pool.Bas
import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
import org.apache.http.impl.nio.ssl.SSLClientIOEventDispatch;
import org.apache.http.message.BasicHttpRequest;
-import org.apache.http.nio.NHttpConnection;
import org.apache.http.nio.protocol.BufferingHttpClientHandler;
import org.apache.http.nio.protocol.HttpRequestExecutionHandler;
import org.apache.http.nio.reactor.ConnectingIOReactor;
import org.apache.http.nio.reactor.IOEventDispatch;
+import org.apache.http.nio.reactor.IOSession;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.params.HttpParams;
@@ -80,9 +81,9 @@ public class NHttpSSLClient {
.setBooleanParameter(CoreConnectionPNames.TCP_NODELAY, true)
.setParameter(CoreProtocolPNames.USER_AGENT, "Test/1.1");
- final ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(2, params);
+ final ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor();
- BasicNIOConnPool pool = new BasicNIOConnPool(ioReactor, params);
+ BasicNIOConnPool pool = new BasicNIOConnPool(ioReactor);
// Limit total number of connections to just two
pool.setDefaultMaxPerRoute(2);
pool.setMaxTotal(2);
@@ -175,9 +176,9 @@ public class NHttpSSLClient {
public void completed(final BasicNIOPoolEntry entry) {
this.poolEntry = entry;
- NHttpConnection conn = entry.getConnection();
- conn.getContext().setAttribute("executor", this);
- conn.requestOutput();
+ IOSession session = entry.getConnection();
+ session.setAttribute("executor", this);
+ session.setEvent(SelectionKey.OP_WRITE);
System.out.println(this.poolEntry.getRoute() + ": obtained connection from the pool");
}
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLServer.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLServer.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLServer.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLServer.java Fri Aug 12 10:35:32 2011
@@ -138,7 +138,7 @@ public class NHttpSSLServer {
sslcontext,
params);
- ListeningIOReactor ioReactor = new DefaultListeningIOReactor(2, params);
+ ListeningIOReactor ioReactor = new DefaultListeningIOReactor();
try {
ioReactor.listen(new InetSocketAddress(8080));
ioReactor.execute(ioEventDispatch);
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpServer.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpServer.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpServer.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpServer.java Fri Aug 12 10:35:32 2011
@@ -115,7 +115,7 @@ public class NHttpServer {
handler.setEventListener(new EventLogger());
IOEventDispatch ioEventDispatch = new DefaultServerIOEventDispatch(handler, params);
- ListeningIOReactor ioReactor = new DefaultListeningIOReactor(2, params);
+ ListeningIOReactor ioReactor = new DefaultListeningIOReactor();
try {
ioReactor.listen(new InetSocketAddress(8080));
ioReactor.execute(ioEventDispatch);
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOConnPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOConnPool.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOConnPool.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOConnPool.java Fri Aug 12 10:35:32 2011
@@ -26,42 +26,23 @@
*/
package org.apache.http.impl.nio.pool;
-import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.concurrent.atomic.AtomicLong;
-import org.apache.http.HttpConnection;
import org.apache.http.HttpHost;
-import org.apache.http.HttpResponseFactory;
import org.apache.http.annotation.ThreadSafe;
-import org.apache.http.impl.DefaultHttpResponseFactory;
-import org.apache.http.impl.nio.DefaultNHttpClientConnection;
-import org.apache.http.nio.NHttpClientConnection;
import org.apache.http.nio.pool.AbstractNIOConnPool;
import org.apache.http.nio.reactor.ConnectingIOReactor;
import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.nio.util.ByteBufferAllocator;
-import org.apache.http.nio.util.HeapByteBufferAllocator;
-import org.apache.http.params.HttpParams;
@ThreadSafe
-public class BasicNIOConnPool extends AbstractNIOConnPool<HttpHost, NHttpClientConnection, BasicNIOPoolEntry> {
+public class BasicNIOConnPool extends AbstractNIOConnPool<HttpHost, IOSession, BasicNIOPoolEntry> {
private static AtomicLong COUNTER = new AtomicLong();
- private final HttpResponseFactory responseFactory;
- private final ByteBufferAllocator allocator;
- private final HttpParams params;
-
- public BasicNIOConnPool(final ConnectingIOReactor ioreactor, final HttpParams params) {
+ public BasicNIOConnPool(final ConnectingIOReactor ioreactor) {
super(ioreactor, 2, 20);
- if (params == null) {
- throw new IllegalArgumentException("HTTP params may not be null");
- }
- this.responseFactory = new DefaultHttpResponseFactory();
- this.allocator = new HeapByteBufferAllocator();
- this.params = params;
}
@Override
@@ -75,23 +56,19 @@ public class BasicNIOConnPool extends Ab
}
@Override
- protected NHttpClientConnection createConnection(final HttpHost route, final IOSession session) {
- return new DefaultNHttpClientConnection(session,
- this.responseFactory, this.allocator, this.params);
+ protected IOSession createConnection(final HttpHost route, final IOSession session) {
+ return session;
}
@Override
- protected BasicNIOPoolEntry createEntry(final HttpHost host, final NHttpClientConnection conn) {
+ protected BasicNIOPoolEntry createEntry(final HttpHost host, final IOSession conn) {
return new BasicNIOPoolEntry(Long.toString(COUNTER.getAndIncrement()), host, conn);
}
@Override
protected void closeEntry(final BasicNIOPoolEntry entry) {
- HttpConnection conn = entry.getConnection();
- try {
- conn.close();
- } catch (IOException ignore) {
- }
+ IOSession iosession = entry.getConnection();
+ iosession.shutdown();
}
}
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOPoolEntry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOPoolEntry.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOPoolEntry.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOPoolEntry.java Fri Aug 12 10:35:32 2011
@@ -28,13 +28,13 @@ package org.apache.http.impl.nio.pool;
import org.apache.http.HttpHost;
import org.apache.http.annotation.ThreadSafe;
-import org.apache.http.nio.NHttpClientConnection;
+import org.apache.http.nio.reactor.IOSession;
import org.apache.http.pool.PoolEntry;
@ThreadSafe
-public class BasicNIOPoolEntry extends PoolEntry<HttpHost, NHttpClientConnection> {
+public class BasicNIOPoolEntry extends PoolEntry<HttpHost, IOSession> {
- public BasicNIOPoolEntry(final String id, final HttpHost route, final NHttpClientConnection conn) {
+ public BasicNIOPoolEntry(final String id, final HttpHost route, final IOSession conn) {
super(id, route, conn);
}
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java Fri Aug 12 10:35:32 2011
@@ -50,6 +50,7 @@ import org.apache.http.nio.reactor.IORea
import org.apache.http.nio.reactor.IOReactorException;
import org.apache.http.nio.reactor.IOReactorExceptionHandler;
import org.apache.http.nio.reactor.IOReactorStatus;
+import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
@@ -104,12 +105,15 @@ import org.apache.http.params.HttpParams
*
* @since 4.0
*/
+@SuppressWarnings("deprecation")
@ThreadSafe // public methods only
public abstract class AbstractMultiworkerIOReactor implements IOReactor {
protected volatile IOReactorStatus status;
+ @Deprecated
protected final HttpParams params;
+ protected final IOReactorConfig config;
protected final Selector selector;
protected final long selectTimeout;
protected final boolean interestOpsQueueing;
@@ -127,46 +131,97 @@ public abstract class AbstractMultiworke
private int currentWorker = 0;
/**
- * Creates an instance of AbstractMultiworkerIOReactor.
+ * Creates an instance of AbstractMultiworkerIOReactor with the given configuration.
*
- * @param workerCount number of worker I/O reactors.
+ * @param config I/O reactor configuration.
* @param threadFactory the factory to create threads.
* Can be <code>null</code>.
- * @param params HTTP parameters.
* @throws IOReactorException in case if a non-recoverable I/O error.
+ *
+ * @since 4.2
*/
public AbstractMultiworkerIOReactor(
- int workerCount,
- final ThreadFactory threadFactory,
- final HttpParams params) throws IOReactorException {
+ final IOReactorConfig config,
+ final ThreadFactory threadFactory) throws IOReactorException {
super();
- if (workerCount <= 0) {
- throw new IllegalArgumentException("Worker count may not be negative or zero");
- }
- if (params == null) {
- throw new IllegalArgumentException("HTTP parameters may not be null");
+ if (config != null) {
+ try {
+ this.config = config.clone();
+ } catch (CloneNotSupportedException ex) {
+ throw new IOReactorException("Unable to clone configuration");
+ }
+ } else {
+ this.config = new IOReactorConfig();
}
+ this.params = new BasicHttpParams();
try {
this.selector = Selector.open();
} catch (IOException ex) {
throw new IOReactorException("Failure opening selector", ex);
}
- this.params = params;
- this.selectTimeout = NIOReactorParams.getSelectInterval(params);
- this.interestOpsQueueing = NIOReactorParams.getInterestOpsQueueing(params);
+ this.selectTimeout = this.config.getSelectInterval();
+ this.interestOpsQueueing = this.config.isInterestOpQueued();
this.statusLock = new Object();
- this.workerCount = workerCount;
if (threadFactory != null) {
this.threadFactory = threadFactory;
} else {
this.threadFactory = new DefaultThreadFactory();
}
+ this.workerCount = this.config.getIoThreadCount();
this.dispatchers = new BaseIOReactor[workerCount];
this.workers = new Worker[workerCount];
this.threads = new Thread[workerCount];
this.status = IOReactorStatus.INACTIVE;
}
+ /**
+ * Creates an instance of AbstractMultiworkerIOReactor with default configuration.
+ *
+ * @throws IOReactorException in case if a non-recoverable I/O error.
+ *
+ * @since 4.2
+ */
+ public AbstractMultiworkerIOReactor() throws IOReactorException {
+ this(null, null);
+ }
+
+ static IOReactorConfig convert(int workerCount, final HttpParams params) {
+ if (params == null) {
+ throw new IllegalArgumentException("HTTP parameters may not be null");
+ }
+ IOReactorConfig config = new IOReactorConfig();
+ config.setSelectInterval(NIOReactorParams.getSelectInterval(params));
+ config.setShutdownGracePeriod(NIOReactorParams.getGracePeriod(params));
+ config.setInterestOpQueued(NIOReactorParams.getInterestOpsQueueing(params));
+ config.setIoThreadCount(workerCount);
+ config.setTcpNoDelay(HttpConnectionParams.getTcpNoDelay(params));
+ config.setSoTimeout(HttpConnectionParams.getSoTimeout(params));
+ config.setSoLinger(HttpConnectionParams.getLinger(params));
+ config.setConnectTimeout(HttpConnectionParams.getConnectionTimeout(params));
+ config.setSoReuseAddress(HttpConnectionParams.getSoReuseaddr(params));
+
+ return config;
+ }
+
+ /**
+ * Creates an instance of AbstractMultiworkerIOReactor.
+ *
+ * @param workerCount number of worker I/O reactors.
+ * @param threadFactory the factory to create threads.
+ * Can be <code>null</code>.
+ * @param params HTTP parameters.
+ * @throws IOReactorException in case if a non-recoverable I/O error.
+ *
+ * @deprecated use {@link AbstractMultiworkerIOReactor#AbstractMultiworkerIOReactor(IOReactorConfig, ThreadFactory)}
+ */
+ @Deprecated
+ public AbstractMultiworkerIOReactor(
+ int workerCount,
+ final ThreadFactory threadFactory,
+ final HttpParams params) throws IOReactorException {
+ this(convert(workerCount, params), threadFactory);
+ }
+
public IOReactorStatus getStatus() {
return this.status;
}
@@ -400,7 +455,7 @@ public abstract class AbstractMultiworke
dispatcher.gracefulShutdown();
}
- long gracePeriod = NIOReactorParams.getGracePeriod(this.params);
+ long gracePeriod = this.config.getShutdownGracePeriod();
try {
// Force shut down I/O dispatchers if they fail to terminate
@@ -463,9 +518,9 @@ public abstract class AbstractMultiworke
* @throws IOException in case of an I/O error.
*/
protected void prepareSocket(final Socket socket) throws IOException {
- socket.setTcpNoDelay(HttpConnectionParams.getTcpNoDelay(this.params));
- socket.setSoTimeout(HttpConnectionParams.getSoTimeout(this.params));
- int linger = HttpConnectionParams.getLinger(this.params);
+ socket.setTcpNoDelay(this.config.isTcpNoDelay());
+ socket.setSoTimeout(this.config.getSoTimeout());
+ int linger = this.config.getSoLinger();
if (linger >= 0) {
socket.setSoLinger(linger > 0, linger);
}
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultConnectingIOReactor.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultConnectingIOReactor.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultConnectingIOReactor.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultConnectingIOReactor.java Fri Aug 12 10:35:32 2011
@@ -47,26 +47,12 @@ import org.apache.http.nio.reactor.IORea
import org.apache.http.nio.reactor.IOReactorStatus;
import org.apache.http.nio.reactor.SessionRequest;
import org.apache.http.nio.reactor.SessionRequestCallback;
-import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
/**
* Default implementation of {@link ConnectingIOReactor}. This class extends
* {@link AbstractMultiworkerIOReactor} with capability to connect to remote
* hosts.
- * <p>
- * The following parameters can be used to customize the behavior of this
- * class:
- * <ul>
- * <li>{@link org.apache.http.params.CoreConnectionPNames#TCP_NODELAY}</li>
- * <li>{@link org.apache.http.params.CoreConnectionPNames#SO_TIMEOUT}</li>
- * <li>{@link org.apache.http.params.CoreConnectionPNames#CONNECTION_TIMEOUT}</li>
- * <li>{@link org.apache.http.params.CoreConnectionPNames#SO_LINGER}</li>
- * <li>{@link org.apache.http.params.CoreConnectionPNames#SO_REUSEADDR}</li>
- * <li>{@link org.apache.http.nio.params.NIOReactorPNames#SELECT_INTERVAL}</li>
- * <li>{@link org.apache.http.nio.params.NIOReactorPNames#GRACE_PERIOD}</li>
- * <li>{@link org.apache.http.nio.params.NIOReactorPNames#INTEREST_OPS_QUEUEING}</li>
- * </ul>
*
* @since 4.0
*/
@@ -78,19 +64,65 @@ public class DefaultConnectingIOReactor
private long lastTimeoutCheck;
+ /**
+ * Creates an instance of DefaultConnectingIOReactor with the given configuration.
+ *
+ * @param config I/O reactor configuration.
+ * @param threadFactory the factory to create threads.
+ * Can be <code>null</code>.
+ * @throws IOReactorException in case if a non-recoverable I/O error.
+ *
+ * @since 4.2
+ */
+ public DefaultConnectingIOReactor(
+ final IOReactorConfig config,
+ final ThreadFactory threadFactory) throws IOReactorException {
+ super(config, threadFactory);
+ this.requestQueue = new ConcurrentLinkedQueue<SessionRequestImpl>();
+ this.lastTimeoutCheck = System.currentTimeMillis();
+ }
+
+ /**
+ * Creates an instance of DefaultConnectingIOReactor with the given configuration.
+ *
+ * @param config I/O reactor configuration.
+ * Can be <code>null</code>.
+ * @throws IOReactorException in case if a non-recoverable I/O error.
+ *
+ * @since 4.2
+ */
+ public DefaultConnectingIOReactor(final IOReactorConfig config) throws IOReactorException {
+ this(config, null);
+ }
+
+ /**
+ * Creates an instance of DefaultConnectingIOReactor with default configuration.
+ *
+ * @throws IOReactorException in case if a non-recoverable I/O error.
+ *
+ * @since 4.2
+ */
+ public DefaultConnectingIOReactor() throws IOReactorException {
+ this(null, null);
+ }
+
+ /**
+ * @deprecated use {@link DefaultConnectingIOReactor#DefaultConnectingIOReactor(IOReactorConfig, ThreadFactory)}
+ */
public DefaultConnectingIOReactor(
int workerCount,
final ThreadFactory threadFactory,
final HttpParams params) throws IOReactorException {
- super(workerCount, threadFactory, params);
- this.requestQueue = new ConcurrentLinkedQueue<SessionRequestImpl>();
- this.lastTimeoutCheck = System.currentTimeMillis();
+ this(convert(workerCount, params), threadFactory);
}
+ /**
+ * @deprecated use {@link DefaultConnectingIOReactor#DefaultConnectingIOReactor(IOReactorConfig)}
+ */
public DefaultConnectingIOReactor(
int workerCount,
final HttpParams params) throws IOReactorException {
- this(workerCount, null, params);
+ this(convert(workerCount, params), null);
}
@Override
@@ -196,7 +228,7 @@ public class DefaultConnectingIOReactor
}
SessionRequestImpl sessionRequest = new SessionRequestImpl(
remoteAddress, localAddress, attachment, callback);
- sessionRequest.setConnectTimeout(HttpConnectionParams.getConnectionTimeout(this.params));
+ sessionRequest.setConnectTimeout(this.config.getConnectTimeout());
this.requestQueue.add(sessionRequest);
this.selector.wakeup();
@@ -235,7 +267,7 @@ public class DefaultConnectingIOReactor
if (request.getLocalAddress() != null) {
Socket sock = socketChannel.socket();
- sock.setReuseAddress(HttpConnectionParams.getSoReuseaddr(this.params));
+ sock.setReuseAddress(this.config.isSoReuseAddress());
sock.bind(request.getLocalAddress());
}
boolean connected = socketChannel.connect(request.getRemoteAddress());
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultListeningIOReactor.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultListeningIOReactor.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultListeningIOReactor.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultListeningIOReactor.java Fri Aug 12 10:35:32 2011
@@ -52,17 +52,6 @@ import org.apache.http.params.HttpParams
* Default implementation of {@link ListeningIOReactor}. This class extends
* {@link AbstractMultiworkerIOReactor} with capability to listen for incoming
* connections.
- * <p>
- * The following parameters can be used to customize the behavior of this
- * class:
- * <ul>
- * <li>{@link org.apache.http.params.CoreConnectionPNames#TCP_NODELAY}</li>
- * <li>{@link org.apache.http.params.CoreConnectionPNames#SO_TIMEOUT}</li>
- * <li>{@link org.apache.http.params.CoreConnectionPNames#SO_LINGER}</li>
- * <li>{@link org.apache.http.nio.params.NIOReactorPNames#SELECT_INTERVAL}</li>
- * <li>{@link org.apache.http.nio.params.NIOReactorPNames#GRACE_PERIOD}</li>
- * <li>{@link org.apache.http.nio.params.NIOReactorPNames#INTEREST_OPS_QUEUEING}</li>
- * </ul>
*
* @since 4.0
*/
@@ -76,22 +65,67 @@ public class DefaultListeningIOReactor e
private volatile boolean paused;
+ /**
+ * Creates an instance of DefaultListeningIOReactor with the given configuration.
+ *
+ * @param config I/O reactor configuration.
+ * @param threadFactory the factory to create threads.
+ * Can be <code>null</code>.
+ * @throws IOReactorException in case if a non-recoverable I/O error.
+ *
+ * @since 4.2
+ */
public DefaultListeningIOReactor(
- int workerCount,
- final ThreadFactory threadFactory,
- final HttpParams params) throws IOReactorException {
- super(workerCount, threadFactory, params);
+ final IOReactorConfig config,
+ final ThreadFactory threadFactory) throws IOReactorException {
+ super(config, threadFactory);
this.requestQueue = new ConcurrentLinkedQueue<ListenerEndpointImpl>();
this.endpoints = Collections.synchronizedSet(new HashSet<ListenerEndpointImpl>());
this.pausedEndpoints = new HashSet<SocketAddress>();
}
+ /**
+ * Creates an instance of DefaultListeningIOReactor with the given configuration.
+ *
+ * @param config I/O reactor configuration.
+ * Can be <code>null</code>.
+ * @throws IOReactorException in case if a non-recoverable I/O error.
+ *
+ * @since 4.2
+ */
+ public DefaultListeningIOReactor(final IOReactorConfig config) throws IOReactorException {
+ this(config, null);
+ }
+
+ /**
+ * Creates an instance of DefaultListeningIOReactor with default configuration.
+ *
+ * @throws IOReactorException in case if a non-recoverable I/O error.
+ *
+ * @since 4.2
+ */
+ public DefaultListeningIOReactor() throws IOReactorException {
+ this(null, null);
+ }
+
+ /**
+ * @deprecated use {@link DefaultListeningIOReactor#DefaultListeningIOReactor(IOReactorConfig, ThreadFactory)}
+ */
public DefaultListeningIOReactor(
int workerCount,
+ final ThreadFactory threadFactory,
final HttpParams params) throws IOReactorException {
- this(workerCount, null, params);
+ this(convert(workerCount, params), threadFactory);
}
+ /**
+ * @deprecated use {@link DefaultListeningIOReactor#DefaultListeningIOReactor(IOReactorConfig)}
+ */
+ public DefaultListeningIOReactor(
+ int workerCount,
+ final HttpParams params) throws IOReactorException {
+ this(convert(workerCount, params), null);
+ }
@Override
protected void cancelRequests() throws IOReactorException {
Added: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/IOReactorConfig.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/IOReactorConfig.java?rev=1157038&view=auto
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/IOReactorConfig.java (added)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/IOReactorConfig.java Fri Aug 12 10:35:32 2011
@@ -0,0 +1,264 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.impl.nio.reactor;
+
+import java.net.SocketOptions;
+import java.nio.channels.SelectionKey;
+
+import org.apache.http.annotation.NotThreadSafe;
+
+/**
+ * I/O reactor configuration parameters.
+ *
+ * @since 4.2
+ */
+@NotThreadSafe
+public final class IOReactorConfig implements Cloneable {
+
+ private long selectInterval;
+ private long shutdownGracePeriod;
+ private boolean interestOpQueued;
+ private int ioThreadCount;
+ private int soTimeout;
+ private boolean soReuseAddress;
+ private int soLinger;
+ private boolean tcpNoDelay;
+ private int connectTimeout;
+
+ public IOReactorConfig() {
+ super();
+ this.selectInterval = 1000;
+ this.shutdownGracePeriod = 500;
+ this.interestOpQueued = false;
+ this.ioThreadCount = 2;
+ this.soTimeout = 0;
+ this.soReuseAddress = false;
+ this.soLinger = -1;
+ this.tcpNoDelay = false;
+ this.connectTimeout = 0;
+ }
+
+ /**
+ * Determines time interval in milliseconds at which the I/O reactor wakes up to check for
+ * timed out sessions and session requests.
+ * <p/>
+ * Default: <code>1000</code> milliseconds.
+ */
+ public long getSelectInterval() {
+ return this.selectInterval;
+ }
+
+ /**
+ * Defines time interval in milliseconds at which the I/O reactor wakes up to check for
+ * timed out sessions and session requests. May not be negative or zero.
+ */
+ public void setSelectInterval(long selectInterval) {
+ if (selectInterval <= 0) {
+ throw new IllegalArgumentException("Select internal may not be negative or zero");
+ }
+ this.selectInterval = selectInterval;
+ }
+
+ /**
+ * Determines grace period in milliseconds the I/O reactors are expected to block waiting
+ * for individual worker threads to terminate cleanly.
+ * <p/>
+ * Default: <code>500</code> milliseconds.
+ */
+ public long getShutdownGracePeriod() {
+ return this.shutdownGracePeriod;
+ }
+
+ /**
+ * Defines grace period in milliseconds the I/O reactors are expected to block waiting
+ * for individual worker threads to terminate cleanly. May not be negative or zero.
+ */
+ public void setShutdownGracePeriod(long gracePeriod) {
+ if (gracePeriod <= 0) {
+ throw new IllegalArgumentException("Shutdown grace period may not be negative or zero");
+ }
+ this.shutdownGracePeriod = gracePeriod;
+ }
+
+ /**
+ * Determines whether or not I/O interest operations are to be queued and executed
+ * asynchronously by the I/O reactor thread or to be applied to the underlying
+ * {@link SelectionKey} immediately.
+ * <p/>
+ * Default: <code>false</code>
+ *
+ * @see {@link SelectionKey}
+ * @see {@link SelectionKey#interestOps()}
+ * @see {@link SelectionKey#interestOps(int)}
+ */
+ public boolean isInterestOpQueued() {
+ return this.interestOpQueued;
+ }
+
+ /**
+ * Defines whether or not I/O interest operations are to be queued and executed
+ * asynchronously by the I/O reactor thread or to be applied to the underlying
+ * {@link SelectionKey} immediately.
+ *
+ * @see {@link SelectionKey}
+ * @see {@link SelectionKey#interestOps()}
+ * @see {@link SelectionKey#interestOps(int)}
+ */
+ public void setInterestOpQueued(boolean interestOpQueued) {
+ this.interestOpQueued = interestOpQueued;
+ }
+
+ /**
+ * Determines the number of I/O dispatch threads to be used by the I/O reactor.
+ * <p/>
+ * Default: <code>2</code>
+ */
+ public int getIoThreadCount() {
+ return this.ioThreadCount;
+ }
+
+ /**
+ * Defines the number of I/O dispatch threads to be used by the I/O reactor.
+ * May not be negative or zero.
+ */
+ public void setIoThreadCount(int ioThreadCount) {
+ if (ioThreadCount <= 0) {
+ throw new IllegalArgumentException("I/O thread count may not be negative or zero");
+ }
+ this.ioThreadCount = ioThreadCount;
+ }
+
+ /**
+ * Determines the default socket timeout value for non-blocking I/O operations.
+ * <p/>
+ * Default: <code>0</code> (no timeout)
+ */
+ public int getSoTimeout() {
+ return soTimeout;
+ }
+
+ /**
+ * Defines the default socket timeout value for non-blocking I/O operations.
+ * <p/>
+ * Default: <code>0</code> (no timeout)
+ */
+ public void setSoTimeout(int soTimeout) {
+ this.soTimeout = soTimeout;
+ }
+
+ /**
+ * Determines the default value of the {@link SocketOptions#SO_REUSEADDR} parameter
+ * for newly created sockets.
+ * <p/>
+ * Default: <code>false</code>
+ */
+ public boolean isSoReuseAddress() {
+ return soReuseAddress;
+ }
+
+ /**
+ * Defines the default value of the {@link SocketOptions#SO_REUSEADDR} parameter
+ * for newly created sockets.
+ */
+ public void setSoReuseAddress(boolean soReuseAddress) {
+ this.soReuseAddress = soReuseAddress;
+ }
+
+ /**
+ * Determines the default value of the {@link SocketOptions#SO_LINGER} parameter
+ * for newly created sockets.
+ * <p/>
+ * Default: <code>-1</code>
+ */
+ public int getSoLinger() {
+ return soLinger;
+ }
+
+ /**
+ * Defines the default value of the {@link SocketOptions#SO_LINGER} parameter
+ * for newly created sockets.
+ */
+ public void setSoLinger(int soLinger) {
+ this.soLinger = soLinger;
+ }
+
+ /**
+ * Determines the default value of the {@link SocketOptions#TCP_NODELAY} parameter
+ * for newly created sockets.
+ * <p/>
+ * Default: <code>false</code>
+ */
+ public boolean isTcpNoDelay() {
+ return tcpNoDelay;
+ }
+
+ /**
+ * Defines the default value of the {@link SocketOptions#TCP_NODELAY} parameter
+ * for newly created sockets.
+ */
+ public void setTcpNoDelay(boolean tcpNoDelay) {
+ this.tcpNoDelay = tcpNoDelay;
+ }
+
+ /**
+ * Determines the default connect timeout value for non-blocking connection requests.
+ * <p/>
+ * Default: <code>0</code> (no timeout)
+ */
+ public int getConnectTimeout() {
+ return connectTimeout;
+ }
+
+ /**
+ * Defines the default connect timeout value for non-blocking connection requests.
+ */
+ public void setConnectTimeout(int connectTimeout) {
+ this.connectTimeout = connectTimeout;
+ }
+
+ @Override
+ protected IOReactorConfig clone() throws CloneNotSupportedException {
+ return (IOReactorConfig) super.clone();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("[selectInterval=").append(this.selectInterval)
+ .append(", shutdownGracePeriod=").append(this.shutdownGracePeriod)
+ .append(", interestOpQueued=").append(this.interestOpQueued)
+ .append(", ioThreadCount=").append(this.ioThreadCount)
+ .append(", soTimeout=").append(this.soTimeout)
+ .append(", soReuseAddress=").append(this.soReuseAddress)
+ .append(", soLinger=").append(this.soLinger)
+ .append(", tcpNoDelay=").append(this.tcpNoDelay)
+ .append(", connectTimeout=").append(this.connectTimeout).append("]");
+ return builder.toString();
+ }
+
+}
Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/IOReactorConfig.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/IOReactorConfig.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/IOReactorConfig.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorPNames.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorPNames.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorPNames.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorPNames.java Fri Aug 12 10:35:32 2011
@@ -27,11 +27,16 @@
package org.apache.http.nio.params;
+import org.apache.http.impl.nio.reactor.IOReactorConfig;
+
/**
* Parameter names for I/O reactors.
*
* @since 4.0
+ *
+ * @deprecated use {@link IOReactorConfig}
*/
+@Deprecated
public interface NIOReactorPNames {
/**
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorParamBean.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorParamBean.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorParamBean.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorParamBean.java Fri Aug 12 10:35:32 2011
@@ -27,12 +27,16 @@
package org.apache.http.nio.params;
+import org.apache.http.impl.nio.reactor.IOReactorConfig;
import org.apache.http.params.HttpAbstractParamBean;
import org.apache.http.params.HttpParams;
/**
* @since 4.0
+ *
+ * @deprecated use {@link IOReactorConfig}
*/
+@Deprecated
public class NIOReactorParamBean extends HttpAbstractParamBean {
public NIOReactorParamBean (final HttpParams params) {
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorParams.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorParams.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorParams.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/params/NIOReactorParams.java Fri Aug 12 10:35:32 2011
@@ -27,6 +27,7 @@
package org.apache.http.nio.params;
+import org.apache.http.impl.nio.reactor.IOReactorConfig;
import org.apache.http.params.HttpParams;
/**
@@ -35,7 +36,10 @@ import org.apache.http.params.HttpParams
* @since 4.0
*
* @see NIOReactorPNames
+ *
+ * @deprecated use {@link IOReactorConfig}
*/
+@Deprecated
public final class NIOReactorParams implements NIOReactorPNames {
private NIOReactorParams() {
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpClientHandler.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpClientHandler.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpClientHandler.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpClientHandler.java Fri Aug 12 10:35:32 2011
@@ -88,12 +88,15 @@ import org.apache.http.protocol.HttpProc
* The following parameters can be used to customize the behavior of this
* class:
* <ul>
- * <li>{@link org.apache.http.params.CoreProtocolPNames#WAIT_FOR_CONTINUE}</li>
* <li>{@link org.apache.http.nio.params.NIOReactorPNames#CONTENT_BUFFER_SIZE}</li>
+ * <li>{@link org.apache.http.params.CoreProtocolPNames#WAIT_FOR_CONTINUE}</li>
* </ul>
*
* @since 4.0
+ *
+ * @deprecated Use {@link AsyncNHttpClientHandler}
*/
+@Deprecated
@ThreadSafe // provided injected dependencies are immutable or thread safe
public class ThrottlingHttpClientHandler extends NHttpHandlerBase
implements NHttpClientHandler {
@@ -101,6 +104,8 @@ public class ThrottlingHttpClientHandler
protected HttpRequestExecutionHandler execHandler;
protected final Executor executor;
+ private final int bufsize;
+
public ThrottlingHttpClientHandler(
final HttpProcessor httpProcessor,
final HttpRequestExecutionHandler execHandler,
@@ -117,6 +122,7 @@ public class ThrottlingHttpClientHandler
}
this.execHandler = execHandler;
this.executor = executor;
+ this.bufsize = this.params.getIntParameter(NIOReactorPNames.CONTENT_BUFFER_SIZE, 20480);
}
public ThrottlingHttpClientHandler(
@@ -134,9 +140,7 @@ public class ThrottlingHttpClientHandler
initialize(conn, attachment);
- int bufsize = this.params.getIntParameter(
- NIOReactorPNames.CONTENT_BUFFER_SIZE, 20480);
- ClientConnState connState = new ClientConnState(bufsize, conn, this.allocator);
+ ClientConnState connState = new ClientConnState(this.bufsize, conn, this.allocator);
context.setAttribute(CONN_STATE, connState);
if (this.eventListener != null) {
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java Fri Aug 12 10:35:32 2011
@@ -95,12 +95,18 @@ import org.apache.http.util.EntityUtils;
* will have to block only when processing large messages and the shared buffer
* fills up. It is generally advisable to allocate shared buffers of a size of
* an average content body for optimal performance.
- *
- * @see NIOReactorPNames#CONTENT_BUFFER_SIZE
- *
+ * <p>
+ * The following parameters can be used to customize the behavior of this
+ * class:
+ * <ul>
+ * <li>{@link org.apache.http.nio.params.NIOReactorPNames#CONTENT_BUFFER_SIZE}</li>
+ * <li>{@link org.apache.http.params.CoreProtocolPNames#WAIT_FOR_CONTINUE}</li>
+ * </ul>
*
* @since 4.0
+ * @deprecated Use {@link AsyncNHttpServiceHandler}
*/
+@Deprecated
@ThreadSafe // provided injected dependencies are immutable or thread safe
public class ThrottlingHttpServiceHandler extends NHttpHandlerBase
implements NHttpServiceHandler {
@@ -111,6 +117,8 @@ public class ThrottlingHttpServiceHandle
protected HttpRequestHandlerResolver handlerResolver;
protected HttpExpectationVerifier expectationVerifier;
+ private final int bufsize;
+
public ThrottlingHttpServiceHandler(
final HttpProcessor httpProcessor,
final HttpResponseFactory responseFactory,
@@ -127,6 +135,7 @@ public class ThrottlingHttpServiceHandle
}
this.responseFactory = responseFactory;
this.executor = executor;
+ this.bufsize = this.params.getIntParameter(NIOReactorPNames.CONTENT_BUFFER_SIZE, 20480);
}
public ThrottlingHttpServiceHandler(
@@ -150,9 +159,7 @@ public class ThrottlingHttpServiceHandle
public void connected(final NHttpServerConnection conn) {
HttpContext context = conn.getContext();
- int bufsize = this.params.getIntParameter(
- NIOReactorPNames.CONTENT_BUFFER_SIZE, 20480);
- ServerConnState connState = new ServerConnState(bufsize, conn, allocator);
+ ServerConnState connState = new ServerConnState(this.bufsize, conn, allocator);
context.setAttribute(CONN_STATE, connState);
if (this.eventListener != null) {
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java Fri Aug 12 10:35:32 2011
@@ -28,10 +28,8 @@ package org.apache.http.impl.nio.pool;
import org.apache.http.HttpHost;
-import org.apache.http.nio.NHttpClientConnection;
import org.apache.http.nio.reactor.ConnectingIOReactor;
import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.params.HttpParams;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -41,9 +39,8 @@ import org.mockito.MockitoAnnotations;
public class TestBasicNIOConnPool {
private BasicNIOConnPool pool;
- @Mock private ConnectingIOReactor reactor;
- @Mock private HttpParams params;
private HttpHost route;
+ @Mock private ConnectingIOReactor reactor;
@Mock private IOSession session;
@Before
@@ -52,7 +49,7 @@ public class TestBasicNIOConnPool {
route = new HttpHost("localhost", 80, "http");
- pool = new BasicNIOConnPool(reactor, params);
+ pool = new BasicNIOConnPool(reactor);
}
@After
@@ -61,7 +58,7 @@ public class TestBasicNIOConnPool {
@Test(expected=IllegalArgumentException.class)
public void testNullConstructor() throws Exception {
- pool = new BasicNIOConnPool(null, null);
+ pool = new BasicNIOConnPool(null);
}
@Test
@@ -71,7 +68,7 @@ public class TestBasicNIOConnPool {
@Test
public void testCreateEntry() throws Exception {
- NHttpClientConnection conn = pool.createConnection(route, session);
+ IOSession conn = pool.createConnection(route, session);
BasicNIOPoolEntry entry = pool.createEntry(route, conn);
pool.closeEntry(entry);
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/reactor/TestDefaultListeningIOReactor.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/reactor/TestDefaultListeningIOReactor.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/reactor/TestDefaultListeningIOReactor.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/reactor/TestDefaultListeningIOReactor.java Fri Aug 12 10:35:32 2011
@@ -82,7 +82,9 @@ public class TestDefaultListeningIOReact
serviceHandler,
params);
- final ListeningIOReactor ioreactor = new DefaultListeningIOReactor(1, params);
+ IOReactorConfig config = new IOReactorConfig();
+ config.setIoThreadCount(1);
+ final ListeningIOReactor ioreactor = new DefaultListeningIOReactor(config);
Thread t = new Thread(new Runnable() {
@@ -149,7 +151,9 @@ public class TestDefaultListeningIOReact
serviceHandler,
params);
- final ListeningIOReactor ioreactor = new DefaultListeningIOReactor(1, params);
+ IOReactorConfig config = new IOReactorConfig();
+ config.setIoThreadCount(1);
+ final ListeningIOReactor ioreactor = new DefaultListeningIOReactor(config);
final CountDownLatch latch = new CountDownLatch(1);
@@ -211,7 +215,9 @@ public class TestDefaultListeningIOReact
serviceHandler,
params);
- final DefaultListeningIOReactor ioreactor = new DefaultListeningIOReactor(1, params);
+ IOReactorConfig config = new IOReactorConfig();
+ config.setIoThreadCount(1);
+ final DefaultListeningIOReactor ioreactor = new DefaultListeningIOReactor(config);
ioreactor.setExceptionHandler(new IOReactorExceptionHandler() {
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestThrottlingNHttpHandlers.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestThrottlingNHttpHandlers.java?rev=1157038&r1=1157037&r2=1157038&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestThrottlingNHttpHandlers.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestThrottlingNHttpHandlers.java Fri Aug 12 10:35:32 2011
@@ -90,12 +90,14 @@ import org.apache.http.util.EncodingUtil
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
/**
* HttpCore NIO integration tests using throttling versions of the
* protocol handlers.
*/
+@Deprecated
public class TestThrottlingNHttpHandlers extends HttpCoreNIOTestBase {
private ExecutorService execService;
@@ -275,7 +277,7 @@ public class TestThrottlingNHttpHandlers
* (under the control of a ThrottlingHttpServiceHandler)
* terminates when a connection timeout occurs.
*/
- @Test
+ @Test @Ignore
public void testExecutorTermination() throws Exception {
final int SHORT_TIMEOUT = 100;
final int DEFAULT_SERVER_SO_TIMEOUT = 60000;