Падает соединение с базой (Hibernate)
От: Roamer_KDN Россия  
Дата: 18.02.10 07:28
Оценка:
Проблема следущая: если к серверу, на котором крутится приложение несколько часов не было обращений при первом обращении к любой странице странице возникает ошибка:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed
Предполагаю что проблема во времени жизни сессии Hibernate
Hibernate.cgf.xml выглядит так:

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">${db.username}</property>
<property name="hibernate.connection.password">${db.password}</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/${updater.dbName}</property>
<property name="hibernate.connection.isolation">2</property>
<property name="hibernate.connection.characterEncoding">utf8</property>
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

<property name="c3p0.initialPoolSize">0</property>
<property name="c3p0.minPoolSize">0</property>
<property name="c3p0.maxPoolSize">4000</property>
<property name="c3p0.maxIdleTime">7200</property>
<property name="c3p0.preferredTestQuery">SELECT 1 FROM DUAL</property>
<property name="c3p0.idleConnectionTestPeriod">600</property>
<property name="c3p0.testConnectionOnCheckout">true</property>
<property name="c3p0.acquireRetryAttempts">3</property>
<property name="c3p0.maxAdministrativeTaskTime">5</property>
<property name="c3p0.numHelperThreads">10</property>
<property name="c3p0.checkoutTimeout">5000</property>
<property name="c3p0.maxStatements">50</property>
<property name="c3p0.unreturnedConnectionTimeout">3000</property>
<property name="c3p0.dataSourceName">dataSource</property>

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>

<property name="hibernate.show_sql">${hibernate.show_sql}</property>
<property name="hibernate.format_sql">${hibernate.show_sql}</property>
<property name="hibernate.use_sql_comments">false</property>

<property name="hibernate.generate_statistics">${hibernate.generate_statistics}</property>

<property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</property>
<property name="hibernate.cache.use_query_cache">true</property>
<property name="hibernate.сache.use_second_level_cache">true</property>

<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>

<property name="hibernate.current_session_context_class">thread</property>

Подскажите, пожалуйста, что можно/нужно подкрутить чтобы увиичить время жизни сессии, либо где можно поставить обработчик
Заранее спасибо!
Re: Падает соединение с базой (Hibernate)
От: Donz Россия http://donz-ru.livejournal.com
Дата: 18.02.10 12:16
Оценка:
Здравствуйте, Roamer_KDN, Вы писали:

R_K>Проблема следущая: если к серверу, на котором крутится приложение несколько часов не было обращений при первом обращении к любой странице странице возникает ошибка:

R_K>Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed
R_K>Предполагаю что проблема во времени жизни сессии Hibernate

Проблема в настройках сервера мускуля, который через определенное время убивает неактивные коннекты.
Решение тут: http://donz-ru.livejournal.com/89454.html
Re[2]: Падает соединение с базой (Hibernate)
От: megapoliss Украина  
Дата: 18.02.10 12:46
Оценка:
Здравствуйте, Donz, Вы писали:

R_K>>Проблема следущая: если к серверу, на котором крутится приложение несколько часов не было обращений при первом обращении к любой странице странице возникает ошибка:

R_K>>Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed
R_K>>Предполагаю что проблема во времени жизни сессии Hibernate

D>Проблема в настройках сервера мускуля, который через определенное время убивает неактивные коннекты.

D>Решение тут: http://donz-ru.livejournal.com/89454.html

а разве использование ConnectionPool'a (c3po) не должно решать эту проблему автоматически ?
Re[3]: Падает соединение с базой (Hibernate)
От: Blazkowicz Россия  
Дата: 18.02.10 12:47
Оценка:
Здравствуйте, megapoliss, Вы писали:

M>а разве использование ConnectionPool'a (c3po) не должно решать эту проблему автоматически ?

Только если его настроить соответствующим образом. Поищи по форуму, уже несолько раз примеры настроек приводили.
Re[3]: Падает соединение с базой (Hibernate)
От: Donz Россия http://donz-ru.livejournal.com
Дата: 18.02.10 15:47
Оценка:
Здравствуйте, megapoliss, Вы писали:

M>а разве использование ConnectionPool'a (c3po) не должно решать эту проблему автоматически ?


Я по ссылке как раз и дал настройки для пула соединений, при которых проблема решается и коннекты не висят до бесконечности. Сам по себе пул не телепат, чтобы понимать, какое поведение хочет программист
Re[4]: Падает соединение с базой (Hibernate)
От: megapoliss Украина  
Дата: 19.02.10 16:20
Оценка:
Здравствуйте, Donz, Вы писали:

M>>а разве использование ConnectionPool'a (c3po) не должно решать эту проблему автоматически ?


D>Я по ссылке как раз и дал настройки для пула соединений, при которых проблема решается и коннекты не висят до бесконечности. Сам по себе пул не телепат, чтобы понимать, какое поведение хочет программист


Мне казалось, что ожидаемым поведением "по умолчанию" есть проверка выдаваемых пулом значений.
В действительности это не так — все просмотренные реализации "по умолчанию" такую проверку не делают.
Поэтому, не понятно, отчего так.
Если знаете случаи, когда такая проверка не нужна, расскажите.
Re[5]: Падает соединение с базой (Hibernate)
От: Donz Россия http://donz-ru.livejournal.com
Дата: 24.02.10 12:53
Оценка:
Здравствуйте, megapoliss, Вы писали:

M>Мне казалось, что ожидаемым поведением "по умолчанию" есть проверка выдаваемых пулом значений.

M>В действительности это не так — все просмотренные реализации "по умолчанию" такую проверку не делают.
Ну да, о чем и речь. Для апачевского пула соединений надо как минимум указать sql-строку для проверки.

M>Если знаете случаи, когда такая проверка не нужна, расскажите.

Проверка не нужна, если точно известно, что база простаиваемое соединение не грохнет. Но, ИМХО, гораздо лучше правильно настроить пул, например, так, как указано у меня в посте. И коннекты зря висеть не будут, и проверка будет только тогда, когда она реально нужна.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.