2013-03-19 15 views
6

Tworzę usługę RESTEasy przy użyciu serwerów proxy klienta i działa do tej pory. Ja jednak nie zauważyć, że w kilku moich funkcji widzę tę samą linię kodu:RESTEasy Client Proxy Overhead?

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

Czy lepiej wziąć to z funkcjami i stała się ona zmienną składową klasy, aby zmniejszyć ewentualne napowietrznych ? Ta usługa będzie obsługiwać ładunek o wartości 10000 reqs/min. Dzięki

Odpowiedz

7

Możesz na przykład podać klienta MyClass jako komponent sprężynowy i wstrzyknąć go tam, gdzie jest potrzebny. Należy pamiętać o bezpieczeństwie wątków, ponieważ klient proxy RestEasy używa pod klientem Apache Commons Http i jako domyślny SimpleHttpConnectionManager, który nie jest bezpieczny dla wątków.

Aby to osiągnąć w wielowątkowym enironment (uruchomiony w Servlet Container) to zrobić:

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

Dzięki! to sprawi, że kod będzie bezpieczny dla wątków? – avillagomez

+1

@avillagomez - tak – emd

+0

@avillagomez - Tylko upewnij się, że klient MyClass jest singleton (jest tworzony tylko raz) – emd