Secondo la documentazione,Riutilizzo JAX RS client in ambiente multi-threaded (con RESTEasy)
"I clienti sono oggetti pesanti che gestiscono l'infrastruttura di comunicazione client-side . Inizializzazione, così come lo smaltimento dei un'istanza client può essere un'operazione piuttosto costoso. e 'quindi consigliato di costruire solo un piccolo numero di istanze client nell'applicazione . "
Ok, sto cercando di cache del client stesso e Web le istanze di destinazione in una variabile statica, il someMethod() viene richiamato in ambiente multi-threaded:
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;
}
Ma a volte (non sempre) Sto ottengo un'eccezione:
uso non valido di BasicClientConnManager: connessione ancora assegnata. Assicurarsi di rilasciare la connessione prima di allocarne un'altra.
In che modo Client/WebTarget può essere riutilizzato/memorizzato correttamente nella cache? È possibile con l'API client JAX RS? O devo usare alcune funzionalità specifiche del framework (resteasy/jersey) Potresti fornire qualche esempio o documentazione?
Possibile duplicato di [È sicuro il thread del client JAX-RS] (http://stackoverflow.com/questions/24700798/is-jax-rs-client-thread-safe) – tddmonkey