Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / [Hibernate] стратегия работы с Session / 12 сообщений из 12, страница 1 из 1
03.07.2006, 09:37
    #33826544
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Hibernate] стратегия работы с Session
Практически во всех примерах вижу, что обычно время жизни сессии
очень короткое. В пределах одного try-catch Открыли сессию, открыли транзакцию, чего-то поделали, закрыли транзакцию, закрыли сессию.
Это все хорошо, но не работает при использовании lazy initialization.
А как быть в реальном приложении? Хранить глобальную сессию и всегда ее использовать? Что-то не нравится. А как быть?
...
Рейтинг: 0 / 0
03.07.2006, 10:54
    #33826741
BlackWall
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Hibernate] стратегия работы с Session
Использовать шаблон OpenSessionInView (OpenSessionInViewFilter или OpenSessionInViewInterceptor) в случае использования Spring. Или можно, в принципе, сделать свое по аналогии в Filter.
...
Рейтинг: 0 / 0
03.07.2006, 11:01
    #33826760
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Hibernate] стратегия работы с Session
Расскажите, пожалуйста, поподробнее. (Spring не использую - маленький ишшо :) )
...
Рейтинг: 0 / 0
03.07.2006, 11:24
    #33826836
[Hibernate] стратегия работы с Session
Если работаешь с сервлетами (или struts), то пишешь фильтр, который открывает сессию перед выполнением сервлета и закрывает после.

Вместо фильтра можно использовать всяко разные interseptor'ы имеющиеся в спринг/стратс.
...
Рейтинг: 0 / 0
03.07.2006, 11:46
    #33826902
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Hibernate] стратегия работы с Session
Приложение - десктоп
...
Рейтинг: 0 / 0
03.07.2006, 11:59
    #33826960
AciD_v
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Hibernate] стратегия работы с Session
fixxerПриложение - десктоп
А почему не нравиться держать одну открытую сессию в течение выполнения приложения? (приложение все-таки десктопное).
...
Рейтинг: 0 / 0
03.07.2006, 12:24
    #33827088
Петушок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Hibernate] стратегия работы с Session
AciD_v fixxerПриложение - десктоп
А почему не нравиться держать одну открытую сессию в течение выполнения приложения? (приложение все-таки десктопное).

Потому что сессия кеширует все объекты доставаемые из базы и нужно либо регулярно их оттуда выкидывать, либо пересоздавать сессию.

В десктопном приложении управление сессиями/транзакциями зависит от принятых ахитектурных решений.

Если всё намешано в одну кучу (логика, представление, доступ к данным), то будет тяжело.
А если есть выделенные бизнес транзакции, то можно открывать и закрывать сессию одновременно с такой траназкцией и будет щастье.
...
Рейтинг: 0 / 0
03.07.2006, 12:50
    #33827190
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Hibernate] стратегия работы с Session
ПетруччииоЕсли работаешь с сервлетами (или struts), то пишешь фильтр, который открывает сессию перед выполнением сервлета и закрывает после.
Даже на вебе имхо это не всегда спасает... Порой приходится выкручиваться с чтением полей с lazy-initialization в рамках нескольких request'ов. Вот еще: Open Session in View
...
Рейтинг: 0 / 0
04.07.2006, 08:54
    #33829071
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Hibernate] стратегия работы с Session
Петушок
Потому что сессия кэширует все объекты, доставаемые из базы и нужно либо регулярно их оттуда выкидывать, либо пересоздавать сессию.


Это заблуждение, сессионный кэш или кэш первого уровня кэширует объекты только одной транзакции. см http://www.hibernate.org/hib_docs/v3/reference/en/html/performance.html#performance-cache
Возможно, у вас включен кэш второго уровня?

По теме вопроса
Наиболее идеологически верный подход работы с сессией в hibernate сегодня - это стратегия одна сессия - одна транзакция. Для борьбы же с lazy initialization советую придерживаться правила, что за пределы business tier'а должны попадать только полностью инициализированные объекты. Вообще, старайтесь делать ваш граф объектов проще, используя для этого меньше navigable (в терминах UML) связей.
...
Рейтинг: 0 / 0
04.07.2006, 11:06
    #33829466
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Hibernate] стратегия работы с Session
А можно поподробнее про navigable?
...
Рейтинг: 0 / 0
06.07.2006, 14:42
    #33835742
Петушок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Hibernate] стратегия работы с Session
funikovyuri Петушок
Потому что сессия кэширует все объекты, доставаемые из базы и нужно либо регулярно их оттуда выкидывать, либо пересоздавать сессию.


Это заблуждение, сессионный кэш или кэш первого уровня кэширует объекты только одной транзакции. см http://www.hibernate.org/hib_docs/v3/reference/en/html/performance.html#performance-cache
Возможно, у вас включен кэш второго уровня?


hibernate in action
The Session caches every object that is in persistent state (watched and checked for dirty state by Hibernate).
This means it grows endlessly until you get an OutOfMemoryException, if you keep it open for a long
time or simply load too much data. One solution for this is to call clear() and evict() to manage the Session
cache, but you most likely should consider a Stored Procedure if you need mass data operations.



funikovyuri
По теме вопроса
Наиболее идеологически верный подход работы с сессией в hibernate сегодня - это стратегия одна сессия - одна транзакция. Для борьбы же с lazy initialization советую придерживаться правила, что за пределы business tier'а должны попадать только полностью инициализированные объекты. Вообще, старайтесь делать ваш граф объектов проще, используя для этого меньше navigable (в терминах UML) связей.

А как же концепция Unit of work и бизнес транзакции, которые могут состоять более чем из одной системной транзакции?
...
Рейтинг: 0 / 0
06.07.2006, 14:45
    #33835754
Петушок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Hibernate] стратегия работы с Session
Петушок hibernate in action



т.е. hibernate_references, 12.1.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / [Hibernate] стратегия работы с Session / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]