Клиентский API JX-RS 2.0 с реализацией клиента Apache CFX 3.1.8 Потокобезопасность - PullRequest
0 голосов
/ 15 мая 2018

Я пишу REST-клиент, используя клиентский API JX-RS 2.0 и использую клиент Apache CXF 3.1.8 в качестве реализации в classpath.

Моя зависимость от gradle

compile group: 'org.apache.cxf', name: 'cxf-rt-rs-client', version: '3.1.8'

Я планирую клиентуэкземпляр клиента с корневым URL-адресом только один раз и используется для многократного создания WebTarget во время выполнения в соответствии с требованиями приложения.Я хочу повторно использовать объект Client, потому что https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/Client.html говорит, что это дорогостоящая операция по созданию и уничтожению объекта client.

String baseUrl = "http://localhost:9081/rest-service/rest/";

Client client = ClientBuilder.newClient();
client.register(JacksonJsonProvider.class);
client.register(CustomObjectMapperProvider.class);

Использование объекта client для создания WebTarget

WebTarget webTarget = client.target(baseUrl + path);

Я понимаю, что под крышкой используется org.apache.cxf.jaxrs.client.WebClient (клиентская реализация CXF).http://cxf.apache.org/docs/jax-rs-client-api.html#JAX-RSClientAPI-ThreadSafety ссылка говорит, что и CXF WebClient, и ProxyClient по умолчанию не являются потокобезопасными.По этой ссылке есть логический флаг threadSafe, который мы можем установить в true при создании CXFs WebClient или ProxyClient.

В моем коде я хочу использовать стандартные клиентские API / интерфейсы JX-RS 2.0, а не специфичные для CXF классы, такие какWebClient или ProxyClient.

Вопросы -

  1. Если я создаю экземпляр стандартного объекта Client с помощью приведенного выше кода, это потокобезопасно?Можно ли создать его один раз и использовать его несколько раз для WebTarget различных ресурсов?
  2. Элемент списка Если это не потокобезопасно, как добиться безопасности потока, когда я хочу повторно использовать объект клиента?
...