Хорошо, вот что я испытал вчера:
Мой тест (запущенный селеном) входит в мое приложение и загружает данные из БД, создавая, таким образом, один сеанс гибернации. Затем он выходит из системы. Это делается один раз каждые 3 минуты.
Компоненты персистентности создаются Spring следующим образом:
<bean scope="session"
id="persistanceService"
class="com.a.b.c.PersistanceServiceImpl"
p:entityManagerFactory-ref="entityManagerFactory" />
Фабрика менеджера сущностей настроена следующим образом:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSource" p:persistenceUnitName="jpa" >
<property name="jpaVendorAdapter">
<bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
p:database="ORACLE"
p:databasePlatform="org.hibernate.dialect.Oracle9iDialect"
p:showSql="false" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">validate</prop>
</props>
</property>
</bean>
Я запускал тест и создавал дамп потока каждые 30 минут, то есть каждые 10 входов / выходов из системы.
Если прослушиватель не установлен, я вижу, что экземпляры сеанса складываются каждый раз, когда я вхожу и выхожу. Время ожидания сеанса установлено на 30 минут, и в журналах я вижу, что сеанс признан недействительным, поэтому я ожидал, что число сеансов уменьшится после этого времени, но оно все еще увеличивается. Количество сессий составляло 30 после 1:30 и продолжало расти.
Если установлен прослушиватель, то количество экземпляров сеанса остается низким. На самом деле, это говорит об одном, потому что, как только тест выходит из системы, аннулирование сеанса http фактически делает недействительным сеанс гибернации, и все GC'ed. Так было последние 15 часов.
Учитывая все это, я думаю, что отсутствие этого слушателя вполне может привести к утечкам памяти ...
Божо: что ты думаешь об этом? Кстати, я не опытный пользователь SO: я должен был опубликовать это под моим вопросом? Я думал, что отвечаю на свой вопрос здесь, поэтому я добавил ответ, но не уверен: -)