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 2013/10/05 16:28:14 UTC
svn commit: r1529459 - in
/httpcomponents/httpasyncclient/trunk/httpasyncclient/src:
examples/org/apache/http/examples/nio/client/
main/java/org/apache/http/nio/client/
Author: olegk
Date: Sat Oct 5 14:28:14 2013
New Revision: 1529459
URL: http://svn.apache.org/r1529459
Log:
Added more examples; Javadoc updates
Added:
httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientAuthentication.java
- copied, changed from r1529441, httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java
httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientConfiguration.java (with props)
httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientCustomContext.java
- copied, changed from r1529441, httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java
httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientEvictExpiredConnections.java (with props)
Modified:
httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java
httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpAsyncClient.java
Copied: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientAuthentication.java (from r1529441, httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientAuthentication.java?p2=httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientAuthentication.java&p1=httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java&r1=1529441&r2=1529459&rev=1529459&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientAuthentication.java Sat Oct 5 14:28:14 2013
@@ -24,15 +24,12 @@
* <http://www.apache.org/>.
*
*/
-
package org.apache.http.examples.nio.client;
-import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
@@ -41,28 +38,24 @@ import org.apache.http.impl.nio.client.H
import java.util.concurrent.Future;
/**
- * This example demonstrates a basic asynchronous HTTP request / response exchange
- * over a secure connection tunneled through an authenticating proxy.
+ * A simple example that uses HttpClient to execute an HTTP request against
+ * a target site that requires user authentication.
*/
-public class AsyncClientProxyAuthentication {
+public class AsyncClientAuthentication {
- public static void main(String[] args)throws Exception {
+ public static void main(String[] args) throws Exception {
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
- new AuthScope("someproxy", 8080),
+ new AuthScope("localhost", 443),
new UsernamePasswordCredentials("username", "password"));
CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
.setDefaultCredentialsProvider(credsProvider)
.build();
try {
- httpclient.start();
- HttpHost proxy = new HttpHost("someproxy", 8080);
- RequestConfig config = RequestConfig.custom()
- .setProxy(proxy)
- .build();
- HttpGet request = new HttpGet("https://issues.apache.org/");
- request.setConfig(config);
- Future<HttpResponse> future = httpclient.execute(request, null);
+ HttpGet httpget = new HttpGet("http://localhost/");
+
+ System.out.println("Executing request " + httpget.getRequestLine());
+ Future<HttpResponse> future = httpclient.execute(httpget, null);
HttpResponse response = future.get();
System.out.println("Response: " + response.getStatusLine());
System.out.println("Shutting down");
@@ -70,5 +63,4 @@ public class AsyncClientProxyAuthenticat
httpclient.close();
}
}
-
}
Added: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientConfiguration.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientConfiguration.java?rev=1529459&view=auto
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientConfiguration.java (added)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientConfiguration.java Sat Oct 5 14:28:14 2013
@@ -0,0 +1,277 @@
+/*
+ * ====================================================================
+ * 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.examples.nio.client;
+
+import org.apache.http.Consts;
+import org.apache.http.Header;
+import org.apache.http.HttpHost;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.ParseException;
+import org.apache.http.client.CookieStore;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.client.config.AuthSchemes;
+import org.apache.http.client.config.CookieSpecs;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.protocol.HttpClientContext;
+import org.apache.http.config.ConnectionConfig;
+import org.apache.http.config.MessageConstraints;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.DnsResolver;
+import org.apache.http.conn.routing.HttpRoute;
+import org.apache.http.conn.ssl.BrowserCompatHostnameVerifier;
+import org.apache.http.conn.ssl.SSLContexts;
+import org.apache.http.conn.ssl.X509HostnameVerifier;
+import org.apache.http.impl.DefaultHttpResponseFactory;
+import org.apache.http.impl.client.BasicCookieStore;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.conn.SystemDefaultDnsResolver;
+import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
+import org.apache.http.impl.nio.client.HttpAsyncClients;
+import org.apache.http.impl.nio.codecs.DefaultHttpRequestWriterFactory;
+import org.apache.http.impl.nio.codecs.DefaultHttpResponseParser;
+import org.apache.http.impl.nio.codecs.DefaultHttpResponseParserFactory;
+import org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionFactory;
+import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;
+import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
+import org.apache.http.impl.nio.reactor.IOReactorConfig;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.message.BasicLineParser;
+import org.apache.http.message.LineParser;
+import org.apache.http.nio.NHttpMessageParser;
+import org.apache.http.nio.NHttpMessageParserFactory;
+import org.apache.http.nio.NHttpMessageWriterFactory;
+import org.apache.http.nio.conn.ManagedNHttpClientConnection;
+import org.apache.http.nio.conn.NHttpConnectionFactory;
+import org.apache.http.nio.conn.NoopIOSessionStrategy;
+import org.apache.http.nio.conn.SchemeIOSessionStrategy;
+import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;
+import org.apache.http.nio.reactor.ConnectingIOReactor;
+import org.apache.http.nio.reactor.SessionInputBuffer;
+import org.apache.http.nio.util.HeapByteBufferAllocator;
+import org.apache.http.util.CharArrayBuffer;
+
+import javax.net.ssl.SSLContext;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.nio.charset.CodingErrorAction;
+import java.util.Arrays;
+import java.util.concurrent.Future;
+
+/**
+ * This example demonstrates how to customize and configure the most common aspects
+ * of HTTP request execution and connection management.
+ */
+public class AsyncClientConfiguration {
+
+ public final static void main(String[] args) throws Exception {
+
+ // Use custom message parser / writer to customize the way HTTP
+ // messages are parsed from and written out to the data stream.
+ NHttpMessageParserFactory<HttpResponse> responseParserFactory = new DefaultHttpResponseParserFactory() {
+
+ @Override
+ public NHttpMessageParser<HttpResponse> create(
+ final SessionInputBuffer buffer,
+ final MessageConstraints constraints) {
+ LineParser lineParser = new BasicLineParser() {
+
+ @Override
+ public Header parseHeader(final CharArrayBuffer buffer) {
+ try {
+ return super.parseHeader(buffer);
+ } catch (ParseException ex) {
+ return new BasicHeader(buffer.toString(), null);
+ }
+ }
+
+ };
+ return new DefaultHttpResponseParser(
+ buffer, lineParser, DefaultHttpResponseFactory.INSTANCE, constraints);
+ }
+
+ };
+ NHttpMessageWriterFactory<HttpRequest> requestWriterFactory = new DefaultHttpRequestWriterFactory();
+
+ // Use a custom connection factory to customize the process of
+ // initialization of outgoing HTTP connections. Beside standard connection
+ // configuration parameters HTTP connection factory can define message
+ // parser / writer routines to be employed by individual connections.
+ NHttpConnectionFactory<ManagedNHttpClientConnection> connFactory = new ManagedNHttpClientConnectionFactory(
+ requestWriterFactory, responseParserFactory, HeapByteBufferAllocator.INSTANCE);
+
+ // Client HTTP connection objects when fully initialized can be bound to
+ // an arbitrary network socket. The process of network socket initialization,
+ // its connection to a remote address and binding to a local one is controlled
+ // by a connection socket factory.
+
+ // SSL context for secure connections can be created either based on
+ // system or application specific properties.
+ SSLContext sslcontext = SSLContexts.createSystemDefault();
+ // Use custom hostname verifier to customize SSL hostname verification.
+ X509HostnameVerifier hostnameVerifier = new BrowserCompatHostnameVerifier();
+
+ // Create a registry of custom connection session strategies for supported
+ // protocol schemes.
+ Registry<SchemeIOSessionStrategy> sessionStrategyRegistry = RegistryBuilder.<SchemeIOSessionStrategy>create()
+ .register("http", NoopIOSessionStrategy.INSTANCE)
+ .register("https", new SSLIOSessionStrategy(sslcontext, hostnameVerifier))
+ .build();
+
+ // Use custom DNS resolver to override the system DNS resolution.
+ DnsResolver dnsResolver = new SystemDefaultDnsResolver() {
+
+ @Override
+ public InetAddress[] resolve(final String host) throws UnknownHostException {
+ if (host.equalsIgnoreCase("myhost")) {
+ return new InetAddress[] { InetAddress.getByAddress(new byte[] {127, 0, 0, 1}) };
+ } else {
+ return super.resolve(host);
+ }
+ }
+
+ };
+
+ // Create I/O reactor configuration
+ IOReactorConfig ioReactorConfig = IOReactorConfig.custom()
+ .setIoThreadCount(Runtime.getRuntime().availableProcessors())
+ .setConnectTimeout(30000)
+ .setSoTimeout(30000)
+ .build();
+
+ // Create a custom I/O reactort
+ ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(ioReactorConfig);
+
+ // Create a connection manager with custom configuration.
+ PoolingNHttpClientConnectionManager connManager = new PoolingNHttpClientConnectionManager(
+ ioReactor, connFactory, sessionStrategyRegistry, dnsResolver);
+
+ // Create message constraints
+ MessageConstraints messageConstraints = MessageConstraints.custom()
+ .setMaxHeaderCount(200)
+ .setMaxLineLength(2000)
+ .build();
+ // Create connection configuration
+ ConnectionConfig connectionConfig = ConnectionConfig.custom()
+ .setMalformedInputAction(CodingErrorAction.IGNORE)
+ .setUnmappableInputAction(CodingErrorAction.IGNORE)
+ .setCharset(Consts.UTF_8)
+ .setMessageConstraints(messageConstraints)
+ .build();
+ // Configure the connection manager to use connection configuration either
+ // by default or for a specific host.
+ connManager.setDefaultConnectionConfig(connectionConfig);
+ connManager.setConnectionConfig(new HttpHost("somehost", 80), ConnectionConfig.DEFAULT);
+
+ // Configure total max or per route limits for persistent connections
+ // that can be kept in the pool or leased by the connection manager.
+ connManager.setMaxTotal(100);
+ connManager.setDefaultMaxPerRoute(10);
+ connManager.setMaxPerRoute(new HttpRoute(new HttpHost("somehost", 80)), 20);
+
+ // Use custom cookie store if necessary.
+ CookieStore cookieStore = new BasicCookieStore();
+ // Use custom credentials provider if necessary.
+ CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
+ // Create global request configuration
+ RequestConfig defaultRequestConfig = RequestConfig.custom()
+ .setCookieSpec(CookieSpecs.BEST_MATCH)
+ .setExpectContinueEnabled(true)
+ .setStaleConnectionCheckEnabled(true)
+ .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
+ .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC))
+ .build();
+
+ // Create an HttpClient with the given custom dependencies and configuration.
+ CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
+ .setConnectionManager(connManager)
+ .setDefaultCookieStore(cookieStore)
+ .setDefaultCredentialsProvider(credentialsProvider)
+ .setProxy(new HttpHost("myproxy", 8080))
+ .setDefaultRequestConfig(defaultRequestConfig)
+ .build();
+
+ try {
+ HttpGet httpget = new HttpGet("http://localhost/");
+ // Request configuration can be overridden at the request level.
+ // They will take precedence over the one set at the client level.
+ RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig)
+ .setSocketTimeout(5000)
+ .setConnectTimeout(5000)
+ .setConnectionRequestTimeout(5000)
+ .setProxy(new HttpHost("myotherproxy", 8080))
+ .build();
+ httpget.setConfig(requestConfig);
+
+ // Execution context can be customized locally.
+ HttpClientContext localContext = HttpClientContext.create();
+ // Contextual attributes set the local context level will take
+ // precedence over those set at the client level.
+ localContext.setCookieStore(cookieStore);
+ localContext.setCredentialsProvider(credentialsProvider);
+
+ System.out.println("Executing request " + httpget.getRequestLine());
+
+ httpclient.start();
+
+ // Pass local context as a parameter
+ Future<HttpResponse> future = httpclient.execute(httpget, localContext, null);
+
+ // Please note that it may be unsafe to access HttpContext instance
+ // while the request is still being executed
+
+ HttpResponse response = future.get();
+ System.out.println("Response: " + response.getStatusLine());
+
+ // Once the request has been executed the local context can
+ // be used to examine updated state and various objects affected
+ // by the request execution.
+
+ // Last executed request
+ localContext.getRequest();
+ // Execution route
+ localContext.getHttpRoute();
+ // Target auth state
+ localContext.getTargetAuthState();
+ // Proxy auth state
+ localContext.getTargetAuthState();
+ // Cookie origin
+ localContext.getCookieOrigin();
+ // Cookie spec used
+ localContext.getCookieSpec();
+ // User security token
+ localContext.getUserToken();
+ } finally {
+ httpclient.close();
+ }
+ }
+
+}
+
Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientConfiguration.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientConfiguration.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientCustomContext.java (from r1529441, httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientCustomContext.java?p2=httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientCustomContext.java&p1=httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java&r1=1529441&r2=1529459&rev=1529459&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientCustomContext.java Sat Oct 5 14:28:14 2013
@@ -27,44 +27,52 @@
package org.apache.http.examples.nio.client;
-import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.CookieStore;
import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.client.protocol.HttpClientContext;
+import org.apache.http.cookie.Cookie;
+import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
import org.apache.http.impl.nio.client.HttpAsyncClients;
+import java.util.List;
import java.util.concurrent.Future;
/**
- * This example demonstrates a basic asynchronous HTTP request / response exchange
- * over a secure connection tunneled through an authenticating proxy.
+ * This example demonstrates the use of a local HTTP context populated with
+ * custom attributes.
*/
-public class AsyncClientProxyAuthentication {
+public class AsyncClientCustomContext {
- public static void main(String[] args)throws Exception {
- CredentialsProvider credsProvider = new BasicCredentialsProvider();
- credsProvider.setCredentials(
- new AuthScope("someproxy", 8080),
- new UsernamePasswordCredentials("username", "password"));
- CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
- .setDefaultCredentialsProvider(credsProvider)
- .build();
+ public final static void main(String[] args) throws Exception {
+ CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
try {
+ // Create a local instance of cookie store
+ CookieStore cookieStore = new BasicCookieStore();
+
+ // Create local HTTP context
+ HttpClientContext localContext = HttpClientContext.create();
+ // Bind custom cookie store to the local context
+ localContext.setCookieStore(cookieStore);
+
+ HttpGet httpget = new HttpGet("http://localhost/");
+ System.out.println("Executing request " + httpget.getRequestLine());
+
httpclient.start();
- HttpHost proxy = new HttpHost("someproxy", 8080);
- RequestConfig config = RequestConfig.custom()
- .setProxy(proxy)
- .build();
- HttpGet request = new HttpGet("https://issues.apache.org/");
- request.setConfig(config);
- Future<HttpResponse> future = httpclient.execute(request, null);
+
+ // Pass local context as a parameter
+ Future<HttpResponse> future = httpclient.execute(httpget, localContext, null);
+
+ // Please note that it may be unsafe to access HttpContext instance
+ // while the request is still being executed
+
HttpResponse response = future.get();
System.out.println("Response: " + response.getStatusLine());
+ List<Cookie> cookies = cookieStore.getCookies();
+ for (int i = 0; i < cookies.size(); i++) {
+ System.out.println("Local cookie: " + cookies.get(i));
+ }
System.out.println("Shutting down");
} finally {
httpclient.close();
@@ -72,3 +80,4 @@ public class AsyncClientProxyAuthenticat
}
}
+
Added: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientEvictExpiredConnections.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientEvictExpiredConnections.java?rev=1529459&view=auto
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientEvictExpiredConnections.java (added)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientEvictExpiredConnections.java Sat Oct 5 14:28:14 2013
@@ -0,0 +1,142 @@
+/*
+ * ====================================================================
+ * 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.examples.nio.client;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.concurrent.FutureCallback;
+import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
+import org.apache.http.impl.nio.client.HttpAsyncClients;
+import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;
+import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
+import org.apache.http.nio.conn.NHttpClientConnectionManager;
+import org.apache.http.nio.reactor.ConnectingIOReactor;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Example demonstrating how to evict expired and idle connections
+ * from the connection pool.
+ */
+public class AsyncClientEvictExpiredConnections {
+
+ public static void main(String[] args) throws Exception {
+ ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor();
+ PoolingNHttpClientConnectionManager cm = new PoolingNHttpClientConnectionManager(ioReactor);
+ cm.setMaxTotal(100);
+ CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
+ .setConnectionManager(cm)
+ .build();
+ try {
+ httpclient.start();
+
+ // create an array of URIs to perform GETs on
+ String[] urisToGet = {
+ "http://hc.apache.org/",
+ "http://hc.apache.org/httpcomponents-core-ga/",
+ "http://hc.apache.org/httpcomponents-client-ga/",
+ };
+
+ IdleConnectionEvictor connEvictor = new IdleConnectionEvictor(cm);
+ connEvictor.start();
+
+ final CountDownLatch latch = new CountDownLatch(urisToGet.length);
+ for (final String uri: urisToGet) {
+ final HttpGet httpget = new HttpGet(uri);
+ httpclient.execute(httpget, new FutureCallback<HttpResponse>() {
+
+ public void completed(final HttpResponse response) {
+ latch.countDown();
+ System.out.println(httpget.getRequestLine() + "->" + response.getStatusLine());
+ }
+
+ public void failed(final Exception ex) {
+ latch.countDown();
+ System.out.println(httpget.getRequestLine() + "->" + ex);
+ }
+
+ public void cancelled() {
+ latch.countDown();
+ System.out.println(httpget.getRequestLine() + " cancelled");
+ }
+
+ });
+ }
+ latch.await();
+
+ // Sleep 10 sec and let the connection evictor do its job
+ Thread.sleep(20000);
+
+ // Shut down the evictor thread
+ connEvictor.shutdown();
+ connEvictor.join();
+
+ } finally {
+ httpclient.close();
+ }
+ }
+
+ public static class IdleConnectionEvictor extends Thread {
+
+ private final NHttpClientConnectionManager connMgr;
+
+ private volatile boolean shutdown;
+
+ public IdleConnectionEvictor(NHttpClientConnectionManager connMgr) {
+ super();
+ this.connMgr = connMgr;
+ }
+
+ @Override
+ public void run() {
+ try {
+ while (!shutdown) {
+ synchronized (this) {
+ wait(5000);
+ // Close expired connections
+ connMgr.closeExpiredConnections();
+ // Optionally, close connections
+ // that have been idle longer than 5 sec
+ connMgr.closeIdleConnections(5, TimeUnit.SECONDS);
+ }
+ }
+ } catch (InterruptedException ex) {
+ // terminate
+ }
+ }
+
+ public void shutdown() {
+ shutdown = true;
+ synchronized (this) {
+ notifyAll();
+ }
+ }
+
+ }
+
+}
Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientEvictExpiredConnections.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientEvictExpiredConnections.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientEvictExpiredConnections.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java?rev=1529459&r1=1529458&r2=1529459&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java Sat Oct 5 14:28:14 2013
@@ -60,9 +60,9 @@ public class AsyncClientProxyAuthenticat
RequestConfig config = RequestConfig.custom()
.setProxy(proxy)
.build();
- HttpGet request = new HttpGet("https://issues.apache.org/");
- request.setConfig(config);
- Future<HttpResponse> future = httpclient.execute(request, null);
+ HttpGet httpget = new HttpGet("https://issues.apache.org/");
+ httpget.setConfig(config);
+ Future<HttpResponse> future = httpclient.execute(httpget, null);
HttpResponse response = future.get();
System.out.println("Response: " + response.getStatusLine());
System.out.println("Shutting down");
Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpAsyncClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpAsyncClient.java?rev=1529459&r1=1529458&r2=1529459&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpAsyncClient.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpAsyncClient.java Sat Oct 5 14:28:14 2013
@@ -54,6 +54,9 @@ public interface HttpAsyncClient {
* a request message and stream out its content without buffering it
* in memory. The response consumer passed to this method will be used
* to process a response message without buffering its content in memory.
+ * <p/>
+ * Please note it may be unsafe to interact with the context instance
+ * while the request is still being executed.
*
* @param <T> the result type of request execution.
* @param requestProducer request producer callback.
@@ -91,6 +94,9 @@ public interface HttpAsyncClient {
/**
* Initiates asynchronous HTTP request execution against the given target
* using the given context.
+ * <p/>
+ * Please note it may be unsafe to interact with the context instance
+ * while the request is still being executed.
*
* @param target the target host for the request.
* Implementations may accept <code>null</code>
@@ -125,6 +131,9 @@ public interface HttpAsyncClient {
/**
* Initiates asynchronous HTTP request execution using the given
* context.
+ * <p/>
+ * Please note it may be unsafe to interact with the context instance
+ * while the request is still being executed.
*
* @param request the request to execute
* @param context HTTP context