Как выбрать между Джерси, Apache Wink и JBoss RESTEasy?

Я только что слышал о Apache Wink, и мне было интересно, какие отличия у него были по сравнению с Jersey или JBoss RESTEasy. Что можно сделать в одном, что другие два не могут?

Мы использовали Джерси для некоторых наших внутренних проектов, в основном для простоты, но я не могу понять, что делает эти два других лучше, чем я мог бы переключить. Есть ли у кого-нибудь какие-либо прецеденты, для которых ниша каждая из них заполняется?

Ответ 1

Реализации JAX-RS

Джерси

  • Реализация ссылок
  • Обычно самый передний край
  • Поддерживает истинные асинхронные (т.е. сетевые сокеты и т.д.) соединения через Atmosphere или версию 2.0.
  • Поддерживает Spring и стандартные контейнеры для инъекций (например, @Inject).
  • Glassfish связывает его.
  • Он гораздо более модульный, чем другие проекты JAX-RS.
  • У него есть ударник URI Builder
  • Не обязательно требует контейнер сервлета.
  • Поддержка гризли
  • Поддержка Netty (очень рано).
  • Поддержка Swagger
  • Тип отсутствующего OAuth 2.0. Вам придется использовать другие библиотеки.
  • Поддержка нескольких MVC через Просмотр
  • Хостинг на java.net(минус, поскольку сайт ужасно медленный время от времени).
  • Лицензирование основано на CCDL 1.1 и GPL-v2. Пожалуйста, убедитесь, что вы проверяете лицензирование на Джерси, прежде чем использовать его для коммерческого использования.

https://jersey.github.io/license.html

Resteasy

Apache Wink (никогда не использовал его)

  • Я понятия не имею, почему этот проект существует.
  • Предположительно, его высокая производительность сфокусирована.
  • У клиента есть клиент, построенный поверх HttpUrlConnection (который является минусом... он должен быть подключаемым, например Spring RestTemplate).
  • В основном Wink был разработан в домашних условиях в некоторых корпоративных компаниях, а затем предоставлен Apache.
  • Требуется контейнер сервлета.

Restlet

  • Очень мощный, но очень сложный
  • Предоставляет некоторую низкоуровневую поддержку REST
  • Не требуется контейнер сервлета

Apache CXF

  • Некоторая интересная поддержка WADL.
  • Повторное использование и объединение JAX-RS с JAX-WS
  • Поддержка безопасности
  • Интеграция w/ Spring хотя и довольно неприятная
  • Предполагаемая автогенерация клиентских заглушек

Другие RPC-подобные системы

Очереди сообщений

Асинхронный RPC

Мое скромное мнение

Я знаю, что OP запрашивал REST, но если это для внутренней коммуникации, серьезно подумайте об использовании либо очереди сообщений, либо другого асинхронного RPC (Finagle) вместо традиционного REST, если ваши требования соответствуют этим системам.

Если это классический HTTP REST (внешний), я бы выбрал либо RestEasy, либо Джерси, так как основная часть разума попала в эти два проекта.

Также см.: Отладка клиентов для Java?

Ответ 2

При выборе варианта использования следует иметь в виду: если вы попытаетесь развернуть веб-службу Джерси в JBOSS 7.1, это не сработает. Эта ошибка произойдет:

Only one JAX-RS Application Class allowed

Это связано с тем, что REST Easy поставляется в комплекте с JBOSS в качестве реализации JAX-RS по умолчанию. Таким образом, JBOSS решит, что это реализация, которую вы хотите использовать, и не будет загружать другую реализацию JAX-RS (например, Джерси). Чтобы исправить это, вам нужно добавить следующие строки в файл web.xml:

  <context-param>
   <param-name>resteasy.scan</param-name>
   <param-value>false</param-value>
  </context-param>
  <context-param> 
   <param-name>resteasy.scan.providers</param-name>
   <param-value>false</param-value>
  </context-param>
  <context-param>
   <param-name>resteasy.scan.resources</param-name>
   <param-value>false</param-value>
  </context-param>

Ссылка: https://community.jboss.org/message/744530

Ответ 3

Один из моих любимых Jersey расширений - видимые. Записи позволяют легко привязывать ваши данные к странице JSP для реализации настоящей архитектуры Model-View-Controller (MVC):

Ответ 4

Если вы собираетесь использовать JBoss 7.x, вы должны использовать RestEasy, потому что он интегрирован в JBoss. Чтобы использовать Джерси с JBoss 7.x, вам нужно отключить RestEasy, и это сложно!