Zgodnie z dokumentacją,Ponowne JAX RS Client w środowisku wielowątkowym (z resteasy)
„Klienci są obiekty o dużej masie, które zarządzają infrastrukturą komunikacyjną po stronie klienta . Inicjowanie jak utylizacja instancja Klient może być dość kosztowna operacja. jest zatem powinni konstruować tylko niewielką liczbę instancji klienta w aplikacji . "
Ok, próbuję buforować samego klienta i Web instancje docelowe w zmiennej statycznej SomeMethod() jest wywoływana w środowisku wielowątkowym:
private static Client client = ClientBuilder.newClient();
private static WebTarget webTarget = client.target("someBaseUrl");
...
public static String someMethod(String arg1, String arg2)
{
WebTarget target = entrTarget.queryParam("arg1", arg1).queryParam("arg2", arg2);
Response response = target.request().get();
final String result = response.readEntity(String.class);
response.close();
return result;
}
Ale czasami (nie zawsze) mam dostać wyjątek:
Nieprawidłowe użycie BasicClientConnManager: połączenie nadal przydzielone. Pamiętaj, aby zwolnić połączenie przed przydzieleniem innego.
W jaki sposób Client/WebTarget może być ponownie użyty/buforowany poprawnie? Czy jest to możliwe dzięki JAX RS Client API? Albo muszę użyć pewnych funkcji związanych z ramami (resteasy/jersey). Czy możesz podać przykład lub dokumentację?
Prawdopodobny duplikat [jest bezpiecznikiem wątku klienta JAX-RS] (http://stackoverflow.com/questions/24700798/is-jax-rs-client-thread-safe) – tddmonkey