Hi Peter, Currently, Resteasy defaults to using org.apache.http.impl.conn.BasicClientConnectionManager from the HttpClient project, which allows only one connection at a time. You can instruct Resteasy to use org.apache.http.impl.conn.PoolingClientConnectionManager by calling org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder.connectionPoolSize() with a value greater than 0. When Bill says "The default behavior of the RESTEasy JAX-RS implementation actually only lets you have one open Response per Client instance", I'm pretty sure that he's referring to the default use of BasicClientConnectionManager.
With PoolingClientConnectionManager, you can do this: > ResteasyClient client = new > ResteasyClientBuilder().connectionPoolSize(2).build(); > Invocation.Builder request = > client.target(TestPortProvider.generateURL("/test")).request(); > Response response1 = request.get(); > Response response2 = request.get(); > response1.close(); > response2.close(); > client.close(); Note that BasicClientConnectionManager and PoolingClientConnectionManager are deprecated in HttpClient 4.3. When we finish https://issues.jboss.org/browse/RESTEASY-1200 "Resteasy uses httpclient 4.2.6 which is not in sync with httpclient 4.3.6 used in Wildfly" and upgrade to the new connection managers, this behavior might change. We've been talking about defaulting to the new PoolingHttpClientConnectionManager. -Ron On 07/14/2015 01:25 AM, Peter Luttrell wrote: > We have a service within our webapp that connects to another RESTful service > using the JAX-RS Client API. We deploy to Wildfly 8.2, which is of course > uses RESTEasy. This service is a singleton and will receive many concurrent > requests. > > I'd like to know if I can safely re-use the 'javax.ws.rs.client.Client' and > 'javax.ws.rs.client.WebTarget' instances and just close each > 'javax.ws.rs.core.Response' for each request that our service makes? > > In other words I'd like to initialize my Client and WebTarget instances once > when my service starts up and only close the Client only our service shuts > down. For each of the concurrent requests that our service receives, it will > execute a new request and close the Response. > > In researching this online and such, I come across different answers and I'd > like to find out what's the correct one. > > In the book "RESTful Java with JAX-RS 2.0 (2nd edition)" by Burke, I see the > following relevant statements: > > 1. "The javax.ws.rs.client.Client interface is the main entry point into the > JAX-RS Client API. Client instances manage client socket connections and are > pretty heavyweight. Instances of this interface should be reused wherever > possible, as it can be quite expensive to create and destroy these objects." > > 2. "WARNING: Always remember to close() your Client objects. Client objects > often pool connections for performance reasons. If you do not close them, you > are leaking valuable system resources. While most JAX-RS implementations > implement a finalize() method for Client, it is not a good idea to rely on > the garbage collector to clean up poorly written code." > > 3. "WARNING: Always remember to close() your Response objects. Response > objects reference open socket streams. If you do not close them, you are > leaking system resources. While most JAX-RS implementations implement a > finalize() method for Response, it is not a good idea to rely on the garbage > collector to clean up poorly written code. The default behavior of the > RESTEasy JAX-RS implementation actually only lets you have one open Response > per Client instance. This forces you to write responsible client code." > > What's confusing here is that in quote 1, it's recommended that we reuse the > Client instance, but quote 3 ends by stating that RESTEasy only lets you have > one open Response per Client. When we have multiple concurrent requests > hitting our service, we'll need to have multiple JAX-RS Client > Request-Response cycles happen at once. Isn't this one of the use cases where > we should reuse the Client instance? > > I also see two conflicting response to the following StackOverflow post: > http://stackoverflow.com/questions/24700798/is-jax-rs-client-thread-safe > > Also if I read the 2nd response to that StackOverflow post correctly, I > believe I should manually supply the ThreadSafeClientConnManager() for my use > case. Is that correct? > > Thanks, > Peter Luttrell > ------------------------------------------------------------------------------ > Don't Limit Your Business. Reach for the Cloud. > GigeNET's Cloud Solutions provide you with the tools and support that > you need to offload your IT needs and focus on growing your business. > Configured For All Businesses. Start Your Cloud Today. > https://www.gigenetcloud.com/ > _______________________________________________ > Resteasy-users mailing list > Resteasy-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/resteasy-users ------------------------------------------------------------------------------ Monitor Your Dynamic Infrastructure at Any Scale With Datadog! Get real-time metrics from all of your servers, apps and tools in one place. SourceForge users - Click here to start your Free Trial of Datadog now! http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140 _______________________________________________ Resteasy-users mailing list Resteasy-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/resteasy-users