Если вы используете Hibernate Sessions в веб-приложении, НЕ позволяйте объектам Session в ThreadLocal оставаться там между запросами - так как у вас все равно нет контроля над потоками, они принадлежат контейнеру.
Если вам нужно создать и закрыть сеанс на время существования веб-запроса, и вы не хотите передавать объект Session повсюду, вам следует подумать о написании ServletFilter для выполнения очистки - он будет вызываться по всему каждый запрос. Вы также можете разрешить этому фильтру фиксировать или откатывать любые транзакции, которые вы, возможно, начали.
Вы должны прочитать эту страницу для простого рецепта, как это сделать: http://community.jboss.org/wiki/OpenSessioninView