Я пишу 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.
Вопросы -
- Если я создаю экземпляр стандартного объекта Client с помощью приведенного выше кода, это потокобезопасно?Можно ли создать его один раз и использовать его несколько раз для WebTarget различных ресурсов?
- Элемент списка Если это не потокобезопасно, как добиться безопасности потока, когда я хочу повторно использовать объект клиента?