users@jersey.java.net

[Jersey] Runnable hangs using jersey-apache-client4 1.19

From: Martynas Jusevičius <martynas_at_graphity.org>
Date: Sun, 4 Dec 2016 15:50:09 +0100

Hey all,

I have been successfully using jersey-apache-client4 for a while, but
after I refactored the application to use multiple threads, the client
requests in Runnable seem to hang.

I am using Jersey 1.19 and passing Client to threads spawned by a
thread pool in ServletContextListener. The code in Runnable that reads
the stream from ClientResponse

        InputStream is = fileResponse.getEntityInputStream();

seems to hang - the debugger steps to the next line that attempts to
read, and after that the Runnable never continues.

I am using ThreadSafeClientConnManager which is supposed to be
thread-safe. In the log I can see some lines as

    15:36:00,225 DEBUG ConnPoolByRoute:523 - No free connections
[HttpRoute[{}->http://localhost:8080]][null]

So I tried to increase the connection limits for my main routes:

        ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager();
        HttpRoute localhost = new HttpRoute(new HttpHost("localhost", 8080));
        HttpRoute remote = new HttpRoute(new HttpHost("remote.com", 1982));
        cm.setDefaultMaxPerRoute(50);
        cm.setMaxForRoute(localhost, 50);
        cm.setMaxForRoute(remote, 50);
        cm.setMaxTotal(100);

 clientConfig.getProperties().put(ApacheHttpClient4Config.PROPERTY_CONNECTION_MANAGER,
cm);

This doesn't seem to have any effect though. Any clues?

Thanks.

Martynas