Подтвердить что ты не робот

Как часто я должен создавать EntityManager?

У меня есть EntityManagerFactory, для которого я могу создать один (или несколько) экземпляров EntityManager. Я использую среду Servlet, и у меня есть один EntityManagerFactory, подключенный к сервлету (через контекст сервлета), который совместно используется для срока службы сервлета (и, следовательно, для всех пользователей).

Я могу сделать одно из следующего:

  • Создайте единый EntityManager для срока службы моего сервлета (например, общий для всех пользователей)
  • Создайте один для каждого пользователя (поэтому каждый пользователь получает свои собственные в HttpSession)
  • Создайте один для HTTP-запроса (скажем, создавая новый экземпляр и закрывая его в конце метода doGet)

Что наиболее подходит? Значительна ли стоимость создания EntityManager? Если я делаю один общий EntityManager, есть ли одна область транзакции (например, обновления между независимыми пользователями могут совершать другие изменения)?

4b9b3361

Ответ 1

Один EM для всего сервлета звучит не очень хорошо. Если вы не используете EMC, управляемую контейнером (например, EJB3), то рекомментация заключается в использовании EM для конкретной единицы работы.

В контексте веб-приложения ваше третье предложение (по одному на HTTP-запрос) звучит неплохо. Однако это может привести вас к ловушке, когда вы связываете свой сервисный уровень с вашим слоем db (ваш уровень обслуживания даже не должен знать о существовании EM).

Другим подходом было бы программно разделить транзакции в вашем DAO и заставить ваш DAO использовать новый EM для каждого вызова метода.

Изменить: EM дешево создавать в отличие от EMF, которые имеют значительные накладные расходы. Использование одной EMF (которая кажется, что вы это делаете), и множество EM - это путь.

Ответ 2

для каждого slsb выполняется один инъецируемый менеджер сущностей, и сам slsb получает доступ через делегат, из которых один за сеанс, который ищет локальный/удаленный интерфейс. Использование ejb3.0.

Ответ 3

Да, я согласен с NimChimpsky и Qwerky использовать EJB3.x при доступе к БД и использовать один EM на единицу работы.