![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Atum |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
Добрый день !
В стандартном tomcat 6 возникла ошибка - при долгом простое сервера если к нему никто не обращался коннектор с базой разрывался и не восстанавливался ? может у кого была такая ошибка? как с ней бороться ? Начало темы тут (настройки второе сообщение с конца ) http://forum.vingrad.ru/index.php?showtopi...t&p=2533182
Решил разобраться с Пулом соединений. После перехода на c3p0 возникло недопонимание почему при закрытии коннекта - вылетает ошибка ? ведь коннект должен вернуться в Пул... а потом при следующем обращении взяться из него ? это верно ? описание context.xml
что делаю : у меня есть класс
Делаю два вызова так : int count = getMessageCount(); count = getMessageCount(); получаю com.mchange.v2.c3p0.impl.NewProxyConnection) com.mchange.v2.c3p0.impl.NewProxyConnection@19cd29f при первом обращении : а после закрытия ошибку : java.sql.SQLException: You can't operate on a closed Connection как работать с пулом коннектов , У меня видимо есть какое то недопонимание вопроса !?
При повторном обращении к getConnection().createStatement() сам объект con - не null ? но из за того что я его закрыл - внутри его все ссылки null / из за этого, видимо , и вылетает ошибка . Это сообщение отредактировал(а) Atum - 5.2.2013, 12:13 |
||||||||
|
|||||||||
| danilych |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 2.2.2011 Репутация: нет Всего: 3 |
вот такая строка коннекта мне помогла jdbc:mysql://localhost/mydb?autoReconnect=true
|
|||
|
||||
| Atum |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
Это для первой ошибки для стандартного tomcat6 !? А кто что может рассказать по поводу Пула ? как я понимаю действовать надо иначе :
Если я правильно понимаю то poolDataSource - будет возвращать мне каждый раз новый коннект - из своего пула и ошибок не будет ?! Это сообщение отредактировал(а) Atum - 5.2.2013, 11:50 |
||||||
|
|||||||
| Старовъръ |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.5.2008 Репутация: 1 Всего: 10 |
Вместо этого нужно сконфигурировать пул слать минимальные запросы с какой-то частотой (по умолчанию MySQL разрывает соединение через 8 часов). Пример настройки connection pool'a можно найти здесь, он правда настроен на стороне приложения, а не Tomcat JNDI. -------------------- |
||||
|
|||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
"Если я правильно понимаю то poolDataSource - будет возвращать мне каждый раз новый коннект - из своего пула@
Новый или тот же самый - вас не должно интересовать. Коннекшен надо всегда брать из DataSource и закрывать, а не присваивать его статической переменной, т.е. не дублировать DataSource. Ошибка в этом. |
|||
|
||||
| Atum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
т.е. не дублировать DataSource. Ошибка в этом. Пример можно ? Чем плохо решение с ConnectionFactory и poolDataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/mytest"); poolDataSource - создается один раз. от него я буду каждый раз брать Connection. Или его нужно делать не статиком ? и каждый раз сначала получать DataSource через lookup
|
||||
|
|||||
| COVD |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Именно так и надо. Переменная connection должна быть локальной, а вы ее делали статической и это вносило путаницу.
|
||||
|
|||||
| Atum |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
А Если класс в котором будет использоваться Connection и в котором реализована функция getMessageCount() - будет иметь один инстантс - будет DAO / чем плохо в нем один раз создать такой коннект и держать его постоянно ?! Хотя нет гарантии что при долгом " провисании , бездействии" - коннект может отвалиться ?! так ? так же вопроспо поводу DataSource poolDataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/mytest"); должен ли быть DataSource poolDataSource - один раз создан (в ConnectionFactory ) - или можно каждый раз искать его JNDI контексте и вытаскивать от туда ? |
||||||
|
|||||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Я обычно создаю DataSource один раз - база данных свой адрес ведь не меняет. А Connection всякий раз беру и возвращаю в пул. Это хорошо тем, что пул несет ответственность за соединения и его настройками можно регулировать количество соединений и создание новых при необходимости. Эту функциональность не надо программировать, она уже реализована в пуле.
|
|||
|
||||
| Atum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
c этим полностью согласен ! Готовый пул это огромное подспорье ! Но Пулы тоже пишут люди .Cтолкнулся с тем что в tomcat6 что -то по умолчанию работает не так как надо , перешел на c3p0 . Вот теперь хочу еще сравнить что изменилось в tomcat7 . |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |