спящий сеанс - PullRequest
       18

спящий сеанс

1 голос
/ 19 февраля 2012

Я просто следовал простому учебнику по hibernate и успешно делал вызовы БД через hibernate. Однако я нигде не вижу кода, закрывающего спящий режим.

sessionFactory.getCurrentSession();

используется для получения сеанса по запросу. Должен ли я закрыть этот сеанс, когда пользователь выходит из системы? или после каждого запроса об этом что-то заботится фреймворк?

второй связанный с этим вопрос: в каком случае использования я бы использовал перехватчик сеанса спящего режима?

и третий вопрос (извините, он только что всплыл в моей памяти), какой лучший вариант для кэширования с помощью hibernate / struts2?

Ответы [ 2 ]

5 голосов
/ 19 февраля 2012

По первому вопросу справочная документация гласит:

org.hibernate.Session начинается, когда первый вызов getCurrentSession () сделан для текущего потока.Затем он привязывается Hibernate к текущему потоку.Когда транзакция заканчивается, либо с помощью коммита, либо с помощью отката, Hibernate автоматически отсоединяет org.hibernate.Session от потока и закрывает его для вас.

По второму вопросу документация говорит:

Интерфейс Interceptor обеспечивает обратные вызовы от сеанса к приложению, позволяя приложению проверять и / или манипулировать свойствами постоянного объекта перед его сохранением, обновлением, удалением или загрузкой.Одним из возможных применений для этого является отслеживание информации аудита.Например, следующий Interceptor автоматически устанавливает createTimestamp при создании Auditable и обновляет свойство lastUpdateTimestamp при обновлении Auditable.

Что касается третьего вопроса, Struts2 является структурой представления.Это не имеет никакого отношения к постоянству и, следовательно, кешированию постоянных сущностей. В документации подробно говорится о кеше второго уровня.

Как видите, в документации много интересной информации.Я бы посоветовал прочитать это.

2 голосов
/ 19 февраля 2012

Нужна дополнительная информация для ответа на ваш вопрос, например о том, как вы используете hibernate, и мы действительно не знаем, какой урок вы читаете :) относительно ваших вопросов

  1. Сеанс Hibernate представляет собой единицу работы, и закрытие сессии всегда является хорошей практикой. Я не вижу связи сеанса Hibernate с процессом входа / выхода пользователя из системы. Просьба не смешивать концепцию веб-сеанса с сеансом Hibernate. так как оба совершенно разные.
  2. Для кэширования на уровне гибернации вы можете использовать ehcache в качестве кэша второго уровня, а hibernate обеспечивает готовый кеш первого уровня для вас, для стороны Struts2 я рекомендую EHCache, общее хорошее и гибкое решение для кэширования.

Мое предложение, если вы изучаете Strust2 и Hibernate, так что лучше пропустить часть кэширования и сосредоточиться на основных областях

...