Является ли клиент Java Jersey 2.1 потокобезопасным?

Документация по джерси 2.0 говорит:

Экземпляры клиентов — это дорогостоящие ресурсы. Рекомендуется повторно использовать сконфигурированный экземпляр для создания веб-ресурсов. Создание веб-ресурсов, построение запросов и получение ответов гарантированно будут потокобезопасными. Таким образом, экземпляр Client и экземпляры WebResource могут совместно использоваться несколькими потоками.

Является ли клиент по-прежнему потокобезопасным в версии 2.1? Я не могу найти информацию о безопасности потоков в документы для версии 2.1.


person jakub.piasecki    schedule 06.08.2013    source источник
comment
Я открыл для вас билет (смеется): java.net/jira/browse/JERSEY-3094   -  person Martin Andersson    schedule 14.04.2016


Ответы (2)


Да, клиент Джерси 2.1 является потокобезопасным, и он должен быть потокобезопасным даже в будущей версии Джерси. Вы можете создать множество WebTarget из одного экземпляра Client и одновременно вызывать много запросов к этим WebTarget и еще больше запросов к одному экземпляру WebTarget.

Потокобезопасность может быть нарушена, если вы зарегистрируете свой пользовательский поставщик, не являющийся потокобезопасным, в клиенте или WebTaget. Например, ClientRequestFilter, который не является потокобезопасным и не может обрабатывать больше запросов одновременно. Встроенные поставщики Джерси являются потокобезопасными. Некоторые поставщики расширений Джерси не должны быть потокобезопасными, и в этом случае это указано в javadoc поставщика.

person Miroslav Fuksa    schedule 06.09.2013
comment
Полезный ответ. У вас случайно нет источников для этого? - person Nils Schmidt; 12.03.2014
comment
Это ограничение исходит от JAX-RS или только от Джерси? Поскольку javax.ws.rs.client.Client говорит только: Клиенты - это тяжеловесные объекты... Инициализация, а также удаление экземпляра Клиента могут быть довольно дорогостоящими операциями. Поэтому рекомендуется создавать только небольшое количество экземпляров клиента... Экземпляры клиента должны быть должным образом закрыты перед удалением, чтобы избежать утечки ресурсов. Так что ничего о безопасности потоков, только < b>близко к повторному использованию и ничего о в то же время. - person lucasvc; 18.10.2014
comment
@datakey ТОЧНО, кто-нибудь может подтвердить ответ? Я понятия не имею, что думать о Client и WebTarget ..! - person Yanko; 07.11.2014
comment
@lucasvc — на самом деле javax.ws.rs.client.Client не говорит близко к повторному использованию. В нем говорится: Экземпляры клиента должны быть правильно закрыты перед удалением, чтобы избежать утечки ресурсов. А в документации по методу close() говорится: После закрытия клиента вызывается любой другой метод в экземпляре клиента приведет к возникновению исключения IllegalStateException. Таким образом, повторное использование после закрытия невозможно. - person Ajoy Bhatia; 06.02.2016
comment
Тем не менее .. проблема сохраняется. По какой-то неизвестной причине документация по потокобезопасности была удалена. лол, я ожидал, что такие вещи будут добавлены, а не удалены? Билет: java.net/jira/browse/JERSEY-3094 - person Martin Andersson; 14.04.2016

Я думаю, основываясь на примечаниях к выпуску 2.1, в этом отношении ничего не изменилось, но я не могу найти мотивацию для этого изменения в документации.

person Erik Pragt    schedule 06.08.2013