Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top