2013-03-19 5 views
6

Sto creando un servizio RESTEasy utilizzando i proxy client e funziona fino ad ora. Tuttavia, ho notato che in alcune delle mie funzioni vedo la stessa riga di codice:Overhead Proxy client RESTEasy?

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

E 'meglio prendere che, delle funzioni e ne fanno una variabile membro della classe di ridurre possibili spese generali ? Questo servizio gestirà un carico di 10.000 req/min. Grazie

risposta

7

È possibile specificare il client MyClass come bean di primavera, ad esempio, e iniettarlo ovunque sia necessario. Prestare attenzione alla sicurezza dei thread poiché il client proxy RestEasy utilizza al di sotto del client Http di Apache Commons e come impostazione predefinita SimpleHttpConnectionManager che non è thread-safe.

per raggiungere questo obiettivo in un enironment multithreading (esecuzione in una Servlet Container) fare questo:

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

Grazie! questo renderà il codice thread-safe? – avillagomez

+1

@avillagomez - si – emd

+0

@avillagomez - Assicurati che il client MyClass sia singleton (viene istanziato una sola volta) – emd