Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RESTEasy Client Proxy Overhead?

I'm creating a RESTEasy service using Client proxies and it works fine so far. However, I did notice that in a few of my functions I see the same line of code:

MyClass client = ProxyFactory.create(MyClass.class, "http://localhost:8080");

Is it better to take that out of the functions and make it a member variable of the class to reduce possible overhead? This service will handle load of 10000 reqs/min. Thanks

like image 775
avillagomez Avatar asked Mar 19 '13 19:03

avillagomez


1 Answers

You can specify MyClass client as a spring bean, for instance, and inject it wherever it's needed. Be aware of thread safety because the RestEasy proxy client uses underneath the Apache Commons Http Client and as default the SimpleHttpConnectionManager which is not thread safe.

To achieve this in a multithreaded enironment(running in a Servlet Container) do this:

MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
HttpClient httpClient = new HttpClient(connectionManager);

// Only needed if you have a authentication
Credentials credentials = new UsernamePasswordCredentials(username, password);
httpClient.getState().setCredentials(AuthScope.ANY, credentials);
httpClient.getParams().setAuthenticationPreemptive(true);

clientExecutor = new ApacheHttpClientExecutor(httpClient);

MyClass client = ProxyFactory.create(MyClass.class, "http://localhost:8080", clientExecutor);
like image 159
emd Avatar answered Oct 21 '22 06:10

emd