title: "Time out" when multithreading requests to a webservice with java and axis2
body: <p>I'm working with a slow webservice (about 4 minutes each request) and I need to do about 100 requests in two hours, so I've decided to use multiple threads. The problem is that I can only have 2 threads, as the stub rejects all the other ones. <a href="http://issues.apache.org/jira/browse/AXIS2-4330" rel="nofollow noreferrer">Here</a> I've found an explanation and possible solution:</p>
  
  <blockquote>
    <p>I had the same problem. It seems that
    the source of it is
    defaultMaxConnectionsPerHost value in
    MultiThreadedHttpConnectionManager
    equals 2. Workaround for me was to
    create own instance of
    MultiThreadedHttpConnectionManager and
    use it in service stub, something like
    in example below</p>
  </blockquote>
  
  <p>I've done as the author said, and passed a HttpClient to the stub with higher <em>setMaxTotalConnections</em> and <em>setDefaultMaxConnectionsPerHost</em> values, but the problem is that now the application freezes (well, it does not really freezes, but It does nothing).</p>
  
  <p>Thats my code:</p>
  
  <pre><code> public ReportsStub createReportsStub(String url, HttpTransportProperties.Authenticator auth){
    ReportsStub stub = null;
    HttpClient httpClient = null;
    try {
     stub = new ReportsStub(url);
     httpClient = createHttpClient(10,5);
     stub._getServiceClient().getOptions().setTimeOutInMilliSeconds(10000000);
     stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENTICATE, auth);
     stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, false);
     stub._getServiceClient().getServiceContext().getConfigurationContext().setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient);
     return stub;
    } catch (AxisFault e) {
     e.printStackTrace();
    }
    return stub;
   }
  
   protected HttpClient createHttpClient(int maxTotal, int maxPerHost) {
    MultiThreadedHttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();
    HttpConnectionManagerParams params = httpConnectionManager.getParams();
    if (params == null) {
          params = new HttpConnectionManagerParams();
          httpConnectionManager.setParams(params);
    }
    params.setMaxTotalConnections(maxTotal);
    params.setDefaultMaxConnectionsPerHost(maxPerHost);
    HttpClient httpClient = new HttpClient(httpConnectionManager);
    return httpClient;
  }
  </code></pre>
  
  <p>Then I pass that stub and the request to each one of threads and run them. If I don't set the HttpClient and use the default, only two threads execute, and if I set it, the application does not work. Any idea?</p>