EJB: понимание того, как контейнер выбирает боб - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь понять, как работают bean-компоненты statefull (я прочитал теоретическую часть и знаю разницу между bean-компонентами statfull и statelss ...), поэтому я создал bean-компонент statefull и API отдыха для доступа к нему.
Я обнаружил, что контейнер создает / создает новый компонент для каждого запроса.
Затем я использовал сервлет для доступа к тому же компоненту statfull, и на этот раз контейнер контейнера просто один компонент, который обслуживает все запросы.
Итак, мои вопросы:

  1. Почему контейнер создает множество API для bean-компонентов?Я знаю, что он рассматривает каждый запрос как отдельный клиент, но как он знает, так как остальные API или сервлет доступны с помощью http-запросов ??
  2. Почему он рассматривает запрос, когда он приходит из сервлета, как один клиент ??(для этого создайте один bean-компонент)
  3. в моем случае (выполнение теста локально), как заставить контейнер создавать больше bean-компонентов (как имитировать более одного клиента) при использовании сервлета.

Заранее спасибо

1 Ответ

0 голосов
/ 15 октября 2018

Я проверил спецификации, но не смог что-то найти по этому поводу.Но это кажется разумным:

Кто-то должен позаботиться об экземпляре SFSB, закрыв его по завершении.

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

Сервлет имеет явный жизненный цикл.Внедренный EJB создается во время инициализации сервлета и может быть закрыт при уничтожении.

Вы можете искать новые экземпляры SFSB при каждом созданном сеансе HTTP, используя контекст сеанса для последующих вызовов этого сеанса и закрывая SFSB, когдасоответствующий сеанс закрыт.

...