воскресенье, 8 июня 2014 г.

Самая распространенная ошибка в приложениях SpringMVC-Hibernate/JPA

Это експешины связаны с ленивой подгрузкой из базы зависимостей.
Суть проблемы состоит вот в чем: когда запрос приходит от браузера то его обработка проходит несколько фаз.
На фазе сервисов создается сессия энтити менеджера здесь происходят всякие транзакционные штуки и обращения в базу, после чего обычно сессия закрывается и запрос обрабатывается дальше.
Дальше идет обработка вьюшки и вот здесь происходит проблема - одна из вьюшек обращается с методу модели, который пытается сделать выборку из базы, а поскольку сессия уже закрыта мы и получает иксепшин.

Проблема решается вот таким веб-фильтром OpenEntityManagerInViewFilter, который обеспечивает жизнь сессии ЭнтитиМенеджера на все время обработки веб-запроса:
<filter>
  <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
  <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

Комментариев нет:

Отправить комментарий