copy for tag 4.0.1

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/tags/4.0.1@886964 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
index bbfccfc..661d8a1 100644
--- a/RELEASE_NOTES.txt
+++ b/RELEASE_NOTES.txt
@@ -5,9 +5,16 @@
 the previous stable release. None of the fixed bugs is considered critical. 
 Most notably this release eliminates eliminates dependency on JCIP annotations.
 
+This release is also expected to improve performance by 5 to 10% due to
+elimination of unnecessary Log object lookups by short-lived components.
+
 Changelog
 -------------------
 
+* [HTTPCLIENT-895] Eliminated Log object lookups by short-lived components 
+  impairing performance.
+  Contributed by Oleg Kalnichevski <olegk at apache.org>
+
 * [HTTPCLIENT-885] URLEncodedUtils now correctly parses form-url-encoded 
   entities that specify a charset.
   Contributed by Oleg Kalnichevski <olegk at apache.org>
diff --git a/httpclient/src/main/java/org/apache/http/impl/client/AbstractHttpClient.java b/httpclient/src/main/java/org/apache/http/impl/client/AbstractHttpClient.java
index 1ce9316..ab4667d 100644
--- a/httpclient/src/main/java/org/apache/http/impl/client/AbstractHttpClient.java
+++ b/httpclient/src/main/java/org/apache/http/impl/client/AbstractHttpClient.java
@@ -658,6 +658,7 @@
             final UserTokenHandler stateHandler,
             final HttpParams params) {
         return new DefaultRequestDirector(
+                log,
                 requestExec,
                 conman,
                 reustrat,
diff --git a/httpclient/src/main/java/org/apache/http/impl/client/ClientParamsStack.java b/httpclient/src/main/java/org/apache/http/impl/client/ClientParamsStack.java
index 2b98da0..87ff6b3 100644
--- a/httpclient/src/main/java/org/apache/http/impl/client/ClientParamsStack.java
+++ b/httpclient/src/main/java/org/apache/http/impl/client/ClientParamsStack.java
@@ -29,8 +29,6 @@
 
 import org.apache.http.annotation.NotThreadSafe;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.http.params.HttpParams;
 import org.apache.http.params.AbstractHttpParams;
 
@@ -73,8 +71,6 @@
 @NotThreadSafe
 public class ClientParamsStack extends AbstractHttpParams {
 
-    private final Log log = LogFactory.getLog(getClass());
-    
     /** The application parameter collection, or <code>null</code>. */
     protected final HttpParams applicationParams;
 
@@ -211,10 +207,6 @@
         if ((result == null) && (applicationParams != null)) {
             result = applicationParams.getParameter(name);
         }
-        if (this.log.isDebugEnabled() && result != null) {
-            this.log.debug("'" + name + "': " + result);
-        }
-
         return result;
     }
 
diff --git a/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java b/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java
index e12c7f7..248b630 100644
--- a/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java
+++ b/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java
@@ -133,7 +133,7 @@
 @NotThreadSafe // e.g. managedConn
 public class DefaultRequestDirector implements RequestDirector {
 
-    private final Log log = LogFactory.getLog(getClass());
+    private final Log log;
     
     /** The connection manager. */
     protected final ClientConnectionManager connManager;
@@ -184,7 +184,8 @@
     
     private HttpHost virtualHost;
     
-    public DefaultRequestDirector(
+    DefaultRequestDirector(
+            final Log log,
             final HttpRequestExecutor requestExec,
             final ClientConnectionManager conman,
             final ConnectionReuseStrategy reustrat,
@@ -198,6 +199,10 @@
             final UserTokenHandler userTokenHandler,
             final HttpParams params) {
 
+        if (log == null) {
+            throw new IllegalArgumentException
+                ("Log may not be null.");
+        }
         if (requestExec == null) {
             throw new IllegalArgumentException
                 ("Request executor may not be null.");
@@ -246,6 +251,7 @@
             throw new IllegalArgumentException
                 ("HTTP parameters may not be null");
         }
+        this.log               = log;
         this.requestExec       = requestExec;
         this.connManager       = conman;
         this.reuseStrategy     = reustrat;
@@ -267,6 +273,34 @@
         this.proxyAuthState = new AuthState();
     } // constructor
 
+    public DefaultRequestDirector(
+            final HttpRequestExecutor requestExec,
+            final ClientConnectionManager conman,
+            final ConnectionReuseStrategy reustrat,
+            final ConnectionKeepAliveStrategy kastrat,
+            final HttpRoutePlanner rouplan,
+            final HttpProcessor httpProcessor,
+            final HttpRequestRetryHandler retryHandler,
+            final RedirectHandler redirectHandler,
+            final AuthenticationHandler targetAuthHandler,
+            final AuthenticationHandler proxyAuthHandler,
+            final UserTokenHandler userTokenHandler,
+            final HttpParams params) {
+        this(LogFactory.getLog(DefaultRequestDirector.class),
+                requestExec,
+                conman,
+                reustrat,
+                kastrat,
+                rouplan,
+                httpProcessor,
+                retryHandler,
+                redirectHandler,
+                targetAuthHandler,
+                proxyAuthHandler,
+                userTokenHandler,
+                params);
+                
+    }    
 
     private RequestWrapper wrapRequest(
             final HttpRequest request) throws ProtocolException {