Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Управление HibernateSession через ServletFilter


Автор: UnicornMirage 5.7.2009, 15:41
Здравствуйте.
Хотелось бы спросить сообщество относительно сумасшедшей мысли, пришедшей в голову, после копания в springframework+hibernate+transactions - и с ними связанных библиотеках. Суть в следующем: хочется максимально упростить приложение, и очистить от избыточности. Предположим есть стандартное web-приложение с несложной бизнес-логикой. Используется hibernate, и какой нибудь простой Web MVC.

Хорошим ли решением будет: создание фильтра, стоящего наверху всех цепочек вызова, который при обращении к нему открывает HibernateSession и кладёт ее в HttpSession, а по-завершению всех цепочек - закрывает HibernateSession, и удаляет из HttpSession.

Вся стратегия управления транзакциями ложится на контроллеры.
Мои предположения относительно этого:
1) более гибкая обработка транзакций
2) обращение к lazy-полям из любого места и любых контроллеров.

Или это плохое решение?



Автор: powerOn 5.7.2009, 16:20
https://www.hibernate.org/43.html не есть тоже самое?

Автор: UnicornMirage 5.7.2009, 17:27
Цитата(powerOn @ 5.7.2009,  16:20)
https://www.hibernate.org/43.html не есть тоже самое?

Да, действительно, оно самое. Спасибо.
Теперь второй вопрос - как быть с юнит-тестами в этом случае? Придется эмулировать сессии? И вообще - данный подход каков с точки зрения удобства?

Автор: powerOn 5.7.2009, 19:55
Цитата(UnicornMirage @  5.7.2009,  18:27 Найти цитируемый пост)
Теперь второй вопрос - как быть с юнит-тестами в этом случае? Придется эмулировать сессии? И вообще - данный подход каков с точки зрения удобства? 


Если вы используете, к примеру, Spring + Hibernate (или TopLink) то вам поможет spring-test. Он и инъекции сделает и транзакции нужные запустит.

Автор: UnicornMirage 5.7.2009, 22:01
Вот еще мысль возникла - в высоконагруженных приложениях, по-видимому этот подход (управление сессией хибернейта через сервлет-фильтр) будет неэффективным, так как  ведь на каждый HTTP-запрос будет создаваться HibernateSession - хотя не всегда она будет использоваться при этом.

Так ведь? smile

Автор: powerOn 5.7.2009, 23:14
Цитата(UnicornMirage @  5.7.2009,  23:01 Найти цитируемый пост)
Вот еще мысль возникла - в высоконагруженных приложениях, по-видимому этот подход (управление сессией хибернейта через сервлет-фильтр) будет неэффективным, так как  ведь на каждый HTTP-запрос будет создаваться HibernateSession - хотя не всегда она будет использоваться при этом.

Так ведь? smile 


Не могу точно сказать, но осмелюсь предположить что Hibernate использует пул сессий для оптимизации скорости их создания. 
Если в реальном приложении, требующем высокой нагрузки, выяснится что получение экземпляра HibernateSession является узким местом, то тогда и можно задуматься над более хитрыми решениями. 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)