Согласно документации,
"Клиенты - это тяжелые объекты, которые управляют клиентской стороной коммуникационной инфраструктуры. Инициализация, а также Экземпляр клиента может быть довольно дорогостоящей операцией. Поэтому рекомендуется создавать только небольшое количество экземпляров клиента в выражение."
Хорошо, я пытаюсь кэшировать сам клиент и экземпляры WebTarget в статической переменной, someMethod() вызывается в многопоточной среде:
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;
}
Но иногда (не всегда) я получаю исключение:
Недопустимое использование BasicClientConnManager: соединение все еще выделено. Обязательно отпустите соединение, прежде чем выделять другой.
Как можно корректно использовать/кэшировать Client/WebTarget? Возможно ли это с JAX RS Client API? Или я должен использовать некоторые функции, связанные с каркасом (resteasy/jersey). Не могли бы вы привести пример или документацию?