2012-04-11 16 views
1

私のWebアプリケーションでは、アプリケーションの多くの部分で使用されるグローバル静的HttpClientがあります。HttpClient個々のGetMethodで接続タイムアウトを設定する方法

MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager(); 
HttpConnectionManagerParams params = new HttpConnectionManagerParams(); 
params.setConnectionTimeout(15000); 
params.setSoTimeout(15000); 
connectionManager.setParams(params); 
httpclient = new HttpClient(connectionManager); 
HttpClientParams clientParams = new HttpClientParams(); 
clientParams.setParameter("http.protocol.allow-circular-redirects", true); 
clientParams.setParameter("http.protocol.max-redirects", 4); 
httpclient.setParams(clientParams); 

タイムアウトはケースに入れられ、ほとんどの使用のために細かいですが、特定の呼び出しで私は短いタイムアウトをしたいと思います。このように作成されます。だから私は持っている:

GetMethod get = new GetMethod(finalUrl); 

get.getParams().setParameter("http.socket.timeout", new Integer(1000)); 
get.getParams().setParameter("http.connection.timeout", new Integer(1000)); 
HttpClientUtil.getShortTimeoutInstance().executeMethod(get); 

それは動作しません。接続タイムアウトは15000です。新しいHttpClientインスタンスを作成せずにGetMethodで特定の接続タイムアウトを設定することはできますか(これは、新しいHttpClientインスタンスを作成することは良い考えではないと思われるからです)。

答えて

0

あなたは

で見たいと思うかもしれません./impl/conn/tsccm/ThreadSafeClientConnManager.java

方法

ClientConnectionRequest requestConnection(final HttpRoute route, 
              final Object state) 

接続プールがために初期化された後あなたがそれを拡張/上書きしない限り、socketOutOutのもともと設定された値は引き続き使用されます。

public ClientConnectionRequest requestConnection(
     final HttpRoute route, 
     final Object state) { 

    final PoolEntryRequest poolRequest = pool.requestPoolEntry(
      route, state); 

    return new ClientConnectionRequest() { 

     public void abortRequest() { 
      poolRequest.abortRequest(); 
     } 

     public ManagedClientConnection getConnection(
       long timeout, TimeUnit tunit) throws InterruptedException, 
       ConnectionPoolTimeoutException { 
      if (route == null) { 
       throw new IllegalArgumentException("Route may not be null."); 
      } 

      if (log.isDebugEnabled()) { 
       log.debug("Get connection: " + route + ", timeout = " + timeout); 
      } 

      BasicPoolEntry entry = poolRequest.getPoolEntry(timeout, tunit); 
      return new BasicPooledConnAdapter(ThreadSafeClientConnManager.this, entry); 
     } 

    }; 

}