Лучшая практика получения EntityManagerFactory

Каков наилучший подход для получения EntityManagerFactory в веб-приложении (jsp / servlets)? Это хороший способ Когда должен быть создан / открыт экземпляр EntityManagerFactory? , или лучше получить его от JNDI или что-то еще?

Они тяжеловесы, и они должны находиться в области применения. Таким образом, вам нужно открыть их при запуске приложений и закрыть их при завершении работы приложения.

Как это сделать, зависит от вашего целевого контейнера. Поддерживает ли он EJB 3.x (Glassfish, JBoss AS и т. Д.)? Если это так, то вам не нужно беспокоиться об открытии / закрытии (вообще не о транзакциях), если вы просто выполняете работу JPA в EJB с помощью @PersistenceContext обычным способом:

 @Stateless public class FooService { @PersistenceContext private EntityManager em; public Foo find(Long id) { return em.find(Foo.class, id); } // ... } 

Если целевой контейнер не поддерживает EJB (например, Tomcat, Jetty и т. Д.), И надстройка EJB, такая как OpenEJB , также по какой-то причине не является вариантом, и поэтому вы вручную запускаете создание EntityManager (и транзакций) самостоятельно , тогда ваш лучший выбор – ServletContextListener . Вот пример базового запуска:

 @WebListener public class EMF implements ServletContextListener { private static EntityManagerFactory emf; @Override public void contextInitialized(ServletContextEvent event) { emf = Persistence.createEntityManagerFactory("unitname"); } @Override public void contextDestroyed(ServletContextEvent event) { emf.close(); } public static EntityManager createEntityManager() { if (emf == null) { throw new IllegalStateException("Context is not initialized yet."); } return emf.createEntityManager(); } } 

(обратите внимание: до Servlet 3.0 этот class должен быть зарегистрирован в web.xml вместо @WebListener )

Который может использоваться как:

 EntityManager em = EMF.createEntityManager(); // ... 
  • Пожалуйста, объясните: insertable = false, updatable = false
  • Spring-Data-Jpa Repository - Подчеркивание имени столбца объекта
  • Уникальное ограничение с JPA и проверкой Bean
  • Как создать и обработать составной первичный ключ в JPA
  • Hibernate: автоматическое создание / обновление таблиц db на основе classов сущностей
  • Сохранение карты с использованием JPA
  • Единица сохранения как RESOURCE_LOCAL или JTA?
  • Как смешивать страtagsи наследования с аннотациями JPA и Hibernate?
  • Резервные данные в операциях обновления
  • Как хранить дату и время и временные метки в часовом поясе UTC с JPA и Hibernate
  • Нарушение спящего режима с помощью orphanRemoval
  • Interesting Posts

    Получение времени, прошедшего в Objective-C

    Преобразование int для bool с Json.Net

    Как создать липкое меню левой боковой панели с помощью бутстрапа 3?

    Если я выполняю обновление до Windows 8, должен ли я иметь установленную предыдущую версию или просто достаточно ключа?

    Ограничить загрузку-datepicker только в рабочие дни?

    Документация по API API iOS

    Как получить положение Touch в андроиде?

    Как изменить цвет фона вокруг диалогового windows?

    Проблема с удаленным отображением приложений Java

    Действительно ли SEO-дружественные URL-адреса влияют на рейтинг страницы?

    Кэширование streamов и модель памяти Java

    Командный сценарий Windows 7 для установки диска VHD с назначенной буквой диска через DiskPart

    Конфликт между приоритетом динамической привязки в OSX?

    Excel: скопировать форматирование ячейки в уравнение

    Запись / чтение файлов в / из внутренней памяти телефона Android

    Давайте будем гением компьютера.