2013-03-19 6 views
6

Ich erstelle einen RestEasy-Dienst mit Client-Proxies und es funktioniert soweit. Allerdings habe ich das in ein paar meiner Funktionen bemerke ich die gleiche Codezeile sehen:RESTEasy Client Proxy Overhead?

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

Ist es besser, dass der Funktionen herausnehmen und es eine Membervariable der Klasse ermöglichen Aufwand zu reduzieren ? Dieser Dienst wird eine Last von 10000 Anforderungen pro Minute verarbeiten. Danke

Antwort

7

Sie können den MyClass-Client beispielsweise als Spring Bean angeben und ihn dort injizieren, wo er benötigt wird. Beachten Sie die Thread-Sicherheit, da der RestEasy-Proxy-Client unterhalb des Apache Commons-Http-Clients und standardmäßig den SimpleHttpConnectionManager verwendet, der nicht Thread-sicher ist.

Um dies in einem multithreaded enironment zu erreichen (in einem Servlet-Container ausgeführt wird) dies tun:

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); 
+0

Dank! Das macht den Code threadsicher? – avillagomez

+1

@avillagomez - ja – emd

+0

@avillagomez - Stellen Sie sicher, dass der MyClass-Client Singleton ist (es wird nur einmal instanziiert) – emd