Фильтр запросов веб-приложения - PullRequest
0 голосов
/ 02 сентября 2010

Я использую Turbine 2.3.2 с Hibernate 3. Моя проблема в том, что сеанс Hibernate не активен, когда выполняется мой шаблон (Velocity 1.6.4), и я обращаюсь к данным из базы данных, для которой Hibernate требуется ленивая инициализация , Поэтому я получаю LazyInitializationException - нет ошибки сеанса.

Поскольку я хочу, чтобы мой сеанс Hibernate был активным при выполнении шаблона скорости, я бы хотел, чтобы класс выполнялся после и до шаблона Velocity. Таким образом, я мог открыть и закрыть сеанс Hibernate в одном месте. (Отключение отложенной инициализации в Hibernate не вариант для меня). Есть ли какие-либо возможности, связанные с Turbine или нет, написать своего рода слушателя или фильтр (я не уверен, как его вызвать), который будет выполняться непосредственно до и после выполнения шаблона Velocity? Или, может, контейнер сервлетов мог фильтровать запросы .... Какой вариант вы бы порекомендовали?

Ответы [ 3 ]

1 голос
/ 02 сентября 2010

Open Session in View не является чистым решением.Вы можете настроить в своих критериях (если вы используете его), какие пути ассоциации Hibernate должен охотно выбирать.Если вы используете HQL, просто «прикоснитесь» к ассоциации, пока сеанс еще открыт.

1 голос
/ 02 сентября 2010

Попробуйте посмотреть на Spring OpenSessionInViewFilter .Он открывает Hibernate Session и назначает его локальному потоку.Таким образом, вы можете выбрать его на своем уровне доступа к данным и использовать его.

0 голосов
/ 02 сентября 2010

Похоже, ваш вопрос касается (не) известного шаблона Open Session In View (OSIV).Взгляните на страницу Open Session in View в вики JBoss, вы найдете реализацию на основе фильтров (не на основе Spring).

...