Gemäß der Dokumentation,Reusing JAX RS-Client in Multi-Threaded-Umgebung (mit Resteasy)
„Die Kunden sind schwere Objekte, die die clientseitige Kommunikationsinfrastruktur. Initialisierung sowie Entsorgung verwalten von eine Client-Instanz eine ziemlich teuere Operation sein kann. Es ist daher nur eine geringe Anzahl von Client-Instanzen in der Anwendung zu konstruieren beraten. "
Ok, ich versuche Client selbst und Web zwischenzuzuspeichern Zielinstanzen in einer statischen Variablen, die irgendeinemethode() in Multi-Threaded-Umgebung aufgerufen:
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;
}
Aber manchmal (nicht immer) Ich erhalte eine Ausnahme:
Ungültige Verwendung von BasicClientConnManager: Verbindung noch zugewiesen. Stellen Sie sicher, dass Sie die Verbindung freigeben, bevor Sie eine andere zuweisen.
Wie kann Client/WebTarget korrekt wiederverwendet/zwischengespeichert werden? Ist es mit JAX RS Client API möglich? Oder ich muss einige Framework-spezifische Features verwenden (Resteasy/Jersey) Könnten Sie ein Beispiel oder eine Dokumentation bereitstellen?
Mögliches Duplikat von [Ist JAX-RS Client Thread Safe] (http://stackoverflow.com/questions/24700798/is-jax-rs-client-thread-safe) – tddmonkey