2016-11-10 7 views
0

Ресурсы JAX-RS (класс, аннотированный с помощью @Path) имеют жизненный цикл по умолчанию для каждого запроса.Ресурсы JAX_RS и несоответствие жизненного цикла EJB

Теперь EJB тоже имеют свой жизненный цикл, я имею в виду, когда есть ссылка на EJB, эта ссылка на самом деле является ссылкой прокси-объекта, который управляет пулом EJB.

Как эти модели жизненного цикла сосуществуют, когда EJB также является ресурсом JAX-RS?

https://jersey.java.net/documentation/latest/jaxrs-resources.html

JAX-RS ресурсы управляются в каждом запросе рамки по умолчанию, который означает, что новый ресурс создается для каждого запроса.

Источник: https://jersey.java.net/documentation/latest/jaxrs-resources.html

ответ

1

JAX-RS работает с Enterprise JavaBeans технологии (корпоративные компоненты) и контексты и Dependency Injection для Java EE (CDI).

В общем, для JAX-RS для работы с корпоративными компонентами вам необходимо аннотировать класс компонента с @Path, чтобы преобразовать его в корневой класс . Вы можете использовать аннотацию @Path с сессионными компонентами без состояния и одноточечными POJO-компонентами.

JAX-RS и CDI имеют несколько разные модели компонентов. По умолчанию . Коренные классы ресурсов JAX-RS управляются в области запроса, и для указания области требуется аннотации . Управляемые биты CDI , аннотированные с помощью @RequestScoped или @ApplicationScoped, могут быть преобразованы в классы ресурсов JAX-RS.

Для веб-приложения, использующего компонент, который вводит другой класс bean, bean должен иметь возможность удерживать состояние в течение всего времени взаимодействия пользователя с приложением. Способ определить это состояние, чтобы дать боба область применения

  • @RequestScoped: взаимодействия пользователя с веб-приложением в одном запросе HTTP.

  • @SessionScoped: взаимодействия пользователя с веб-приложения на нескольких HTTP запросов.

  • @ApplicationScoped: Общее состояние взаимодействия всех пользователей с веб-приложением.

  • @Dependent: Область по умолчанию, если ни один не указан; это означает, что объект существует, чтобы обслуживать ровно один клиент (bean) и имеет тот же жизненный цикл как этот клиент (bean).

  • @ConversationScoped: взаимодействие пользователя с сервлета, в том числе JavaServer Faces приложений.Область разговора существует в пределах границ, контролируемых разработчиками, которые расширяют его на несколько запросов для длительных разговоров. Все длительные переговоры привязаны к определенному сеансу сервлетов HTTP и могут не пересекать границы сеанса.

Отвечая на Ваш вопрос, так же, как вы можете сделать контексты и Dependency Injection один внутри другого, каждый компонент будет управлять своим собственным состоянием независимо друг от друга. И в зависимости от роли, которую вы собираетесь выполнять, вы должны определить область для нее.

https://docs.oracle.com/javaee/7/tutorial/jaxrs-advanced004.htm https://docs.oracle.com/javaee/7/tutorial/cdi-basic008.htm#GJBBK

+0

Спасибо за ваш вопрос, но я до сих пор не понимаю. Как модель пула EJB совместима с моделью запросов JAX-RS? – GionJh

0

Что EJB предоставляет это один выделенный поток для каждого запроса клиента и сделки. Вы можете думать, например, о каждом элементе Faceless bean как экземпляр потока, созданный с помощью (введенных) данных, ожидающих обслуживания запроса. Когда создается компонент, происходит инъекция, и после каждого вызова метода (REST в вашем случае) возвращается в пул для повторного использования или уничтожения. Таким образом, существует соответствие между REST «по умолчанию для каждого запроса по умолчанию» и жизненным циклом SLSB.