Как часто мне следует создавать EntityManager? - PullRequest
27 голосов
/ 19 ноября 2010

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

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

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

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

Ответы [ 3 ]

25 голосов
/ 19 ноября 2010

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

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

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

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

1 голос
/ 19 ноября 2010

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

0 голосов
/ 19 ноября 2010

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

...