You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2013/08/08 12:40:37 UTC

svn commit: r1511682 - /jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java

Author: andy
Date: Thu Aug  8 10:40:37 2013
New Revision: 1511682

URL: http://svn.apache.org/r1511682
Log:
Immediate fix for JENA-498
Use a common HttpClient internally; set it to do connection pooling.

Modified:
    jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java

Modified: jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java?rev=1511682&r1=1511681&r2=1511682&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java (original)
+++ jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java Thu Aug  8 10:40:37 2013
@@ -18,45 +18,45 @@
 
 package org.apache.jena.riot.web;
 
-import static java.lang.String.format;
+import static java.lang.String.format ;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.NameValuePair;
-import org.apache.http.StatusLine;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.entity.UrlEncodedFormEntity;
-import org.apache.http.client.methods.*;
-import org.apache.http.entity.InputStreamEntity;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.AbstractHttpClient;
-import org.apache.http.impl.client.SystemDefaultHttpClient;
-import org.apache.http.message.BasicNameValuePair;
-import org.apache.http.protocol.BasicHttpContext;
-import org.apache.http.protocol.HttpContext;
-import org.apache.jena.atlas.io.IO;
+import java.io.IOException ;
+import java.io.InputStream ;
+import java.io.UnsupportedEncodingException ;
+import java.net.URI ;
+import java.net.URISyntaxException ;
+import java.util.ArrayList ;
+import java.util.List ;
+import java.util.concurrent.atomic.AtomicLong ;
+
+import org.apache.http.HttpEntity ;
+import org.apache.http.HttpResponse ;
+import org.apache.http.NameValuePair ;
+import org.apache.http.StatusLine ;
+import org.apache.http.client.HttpClient ;
+import org.apache.http.client.entity.UrlEncodedFormEntity ;
+import org.apache.http.client.methods.* ;
+import org.apache.http.entity.InputStreamEntity ;
+import org.apache.http.entity.StringEntity ;
+import org.apache.http.impl.client.AbstractHttpClient ;
+import org.apache.http.impl.client.SystemDefaultHttpClient ;
+import org.apache.http.message.BasicNameValuePair ;
+import org.apache.http.protocol.BasicHttpContext ;
+import org.apache.http.protocol.HttpContext ;
+import org.apache.jena.atlas.io.IO ;
 import org.apache.jena.atlas.lib.InternalErrorException ;
-import org.apache.jena.atlas.web.HttpException;
-import org.apache.jena.atlas.web.TypedInputStream;
-import org.apache.jena.atlas.web.auth.HttpAuthenticator;
-import org.apache.jena.atlas.web.auth.ServiceAuthenticator;
+import org.apache.jena.atlas.web.HttpException ;
+import org.apache.jena.atlas.web.TypedInputStream ;
+import org.apache.jena.atlas.web.auth.HttpAuthenticator ;
+import org.apache.jena.atlas.web.auth.ServiceAuthenticator ;
 import org.apache.jena.riot.RiotException ;
-import org.apache.jena.riot.WebContent;
-import org.apache.jena.web.HttpSC;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.jena.riot.WebContent ;
+import org.apache.jena.web.HttpSC ;
+import org.slf4j.Logger ;
+import org.slf4j.LoggerFactory ;
 
-import com.hp.hpl.jena.sparql.engine.http.Params;
-import com.hp.hpl.jena.sparql.engine.http.Params.Pair;
+import com.hp.hpl.jena.sparql.engine.http.Params ;
+import com.hp.hpl.jena.sparql.engine.http.Params.Pair ;
 
 /**
  * Simplified HTTP operations; simplification means only supporting certain uses
@@ -934,8 +934,29 @@ public class HttpOp {
         }
     }
 
+    private static HttpClient jenaGlobalHttpClient = null ; 
+    static {
+        // SystemDefaultHttpClient respects  
+        //      *  <li>http.keepAlive</li>
+        //      *  <li>http.maxConnections</li>
+        // JENA-498 temporary workaround
+        //   Set the system property for http.keepAlive if not set. 
+        // Better would be our own settings: maybe: 
+        //      BasicHttpParams params = new BasicHttpParams...
+        //      params.set ....
+        //      jenaGlobalHttpClient = new DefaultHttpClient(params) ;
+        
+        synchronized(counter) { // Any object to lock on
+            final String keepAlive = "http.keepAlive" ;
+            String x = System.getProperty(keepAlive) ;
+            if ( x == null )
+                System.setProperty(keepAlive, "true") ;
+            jenaGlobalHttpClient = new SystemDefaultHttpClient() ;
+        }
+    }
+
     /**
-     * Ensures that a HTTP Client is non-null, uses a new
+     * Ensures that a HTTP Client is non-null, uses a Jena-wide
      * {@link SystemDefaultHttpClient} if a null client is provided
      * 
      * @param client
@@ -943,7 +964,7 @@ public class HttpOp {
      * @return HTTP Client
      */
     private static HttpClient ensureClient(HttpClient client) {
-        return client != null ? client : new SystemDefaultHttpClient();
+        return client != null ? client : jenaGlobalHttpClient ;
     }
 
     private static AbstractHttpClient asAbstractClient(HttpClient client) {