Hibernate накапливаются jdbc сессии
Веб приложение — Netbeans, Glassfish, бд Oracle. В одной http сессии все работает нормально — открывается сессия hibernate -> запрос -> сесия закрывается -> сесия уходит в пул. При следующем обращении сессия опять выдергивается из пула. Но если стартую еще одни IE, т е другую http сессию то для нее в пуле создается несколько новых jdbc подключений к oracle. При этом предидущие подключения продолжают висеть. Соотвественно при открытии нескольких окон с обращениями hibernate появляется ошибка что достигнут предел сессий в пуле — больше выделить не могу. Вопрос почему коннекты в пуле никогда не уменьшаются? Может где-то нужно поставить таймаут?
Ностройки пула:
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="oracle.jdbc.pool.OracleDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="oracle-thinPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="User" value="..."/>
<property name="Password" value="..."/>
<property name="URL" value="jdbc:oracle:thin:@..."/>
<property name="driverClass" value="oracle.jdbc.OracleDriver"/>
</jdbc-connection-pool>
Hibernate.cfg.xml
<session-factory name="session1">
<property name="hibernate.connection.datasource">jdbc/...
</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect
</property>
<property name="hibernate.show_sql">true
</property>
<property name="hibernate.use_sql_comments">true
</property>
<property name="hibernate.format_sql">true
</property>
<property name="hibernate.current_session_context_class">thread
</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider
</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory
</property>
Создание сессии в HibernateUtil:
static {
try {
AnnotationConfiguration aConf = new AnnotationConfiguration();
sessionFactory = aConf.configure("hibernate.cfg.xml").buildSessionFactory();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static Session getSession(String url4log) throws HibernateException {
Session sess = sessionFactory.openSession(); //getCurrentSession();
return sess;
}
Запрос и освобождение сессии:
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try {
Query q = session.createQuery(...);
} catch (Exception ex) {
} finally {
sess.close();
Re: Hibernate накапливаются jdbc сессии
Оказалось проблема в том что при инициализации приложения для системных нужд открывалась сессия и не закрывалась.
Hibernate нипричем.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить