Сквозные проблемы в JAX-RS - PullRequest
5 голосов
/ 18 марта 2011

Я ищу механизм в JAX-RS (JSR-311), который позволил бы мне разобраться в некоторых сквозных проблемах, характерных для моего приложения.Например, мое приложение имеет определенный контекст, который ищется или создается для каждого запроса.Мне бы хотелось, чтобы логика такого типа выполнялась в централизованном месте, а затем каким-то образом была привязана к контексту, который будет использоваться различными ресурсами для оставшейся части запроса.Было бы даже лучше, если бы я мог выполнять эти типы действий только для некоторых подмножеств URL.

Инъекция по умолчанию, которую JAX-RS обеспечивает для сегментов пути, cookie, заголовка и т. Д., Хороша, но как насчет пользовательскихинтерпретация этих частей?Я действительно не хочу делать это каждый раз, когда мне это нужно.Я предпочел бы указать способ его построения, а затем просто вставить компонент контекста как часть моего метода ресурсов.

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

Заранее благодарим за любые идеи.

Ответы [ 2 ]

0 голосов
/ 18 марта 2011

Вы можете использовать ContextResolver провайдера для предоставления любого контекста ресурсу или другому провайдеру.В основном вам нужно реализовать javax.ws.rs.ext.ContextResolver<T> для любого контекста, который вы хотите ввести.Не забудьте пометить его @Provider и зарегистрироваться.

0 голосов
/ 18 марта 2011

В некотором неординарном повороте стандарты работают вместе (JAX-RS и CDI) чудесным образом сочетаемым образом, и IBM написала учебник, который может охватить мой конкретный вопрос. Являясь частью более обширного руководства по объединению CDI и JAX-RS , эта статья специально посвящена использованию декораторов CDI (контекстов Java и внедрения зависимостей) и перехватчиков методов для реализации сквозных задач в ресурсах JAX-RS:

Обновление: Я только что смог заставить это работать в GlassFish 3.1 . Ключ (который не показал ни один из приведенных мною примеров) заключается в том, что вы должны убедиться, что CDI управляет сроком службы ваших экземпляров ресурсов (чтобы он мог обернуться перехватчиками). Самостоятельное создание и возвращение в методе Application.getSingletons () не работает .

Я собираюсь вернуться и посмотреть, смогу ли я получить его на пристани.

Обновление 2: Jetty (и, возможно, расширение любых других контейнеров сервлетов, не являющихся J2EE, таких как Tomcat) - это своего рода боль при настройке с помощью CDI. Я думаю, что GlassFish - намного более легкая интеграция. Вот один блог, в котором описаны некоторые шаги, необходимые для Jetty:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...