![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| nogoody |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 12.9.2007 Где: Смоленск Репутация: нет Всего: нет |
Проблема в следующем... написал простенький пример выборки из базы MySQL через Hibernate... Все добро стоит на TomCat 5.5
Запускаю, все работает, проходит время - вылетает ошибка:
Это сообщение отредактировал(а) nogoody - 4.2.2008, 14:58 |
||||
|
|||||
| seth |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: 1 Всего: 1 |
весь лог в студию
|
|||
|
||||
| nogoody |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 12.9.2007 Где: Смоленск Репутация: нет Всего: нет |
вот весь лог ошибки, почитал на форумах, добавил в xml это: <property name="connection.autoReconnect">true</property> <property name="connection.is-connection-validation-required">true</property> но не помогло... я так понимаю соединение вылетает... или что? |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
||||
|
||||
| nogoody |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 12.9.2007 Где: Смоленск Репутация: нет Всего: нет |
вот достал из Томката |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Известная проблема с отваливанием соединения в MySQL. Проблема уже обсуждалась, например, здесь - http://forum.vingrad.ru/forum/topic-173917.html.
|
|||
|
||||
| nogoody |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 12.9.2007 Где: Смоленск Репутация: нет Всего: нет |
Сделал все по науке...
Вроде бы и dbcp использую, вроде бы и валидация есть... а ошибка таже вываливается, только теперь выполняется через раз... Никак не могу понять, помогите пожалуйста... |
|||
|
||||
| AndrewV |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Что-то сомнения у меня что dbcp используешь, то что ты property-ей вида dbcp.* навставлял в конфигурационный файл ничего не даёт. Ты ж указываешь hibernate-у драйвер для создания соединений, он их и создаёт как в начальном варианте. Для корректной работы через dbcp тебе надо использовать вместо
<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/test?autoReconnect=true</property> ... свойство connection.datasource, например <property name="connection.datasource">java:comp/env/jdbc/MyDataSource</property> , а указанный DataSource и организовывать посредством dbcp. |
|||
|
||||
| nogoody |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 12.9.2007 Где: Смоленск Репутация: нет Всего: нет |
Насколько я понял, именно так и надо пулы подключать по докам... Покрайней мере c3p0 именно так и подключался. Хибернет должен сам подключать этот пул. Если у кого есть готовый пример с подключением dbcp выложите пожалуйста, а то совсем замучился я с ним. |
|||
|
||||
| AndrewV |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
вот пример конфигурирования Hibernate-а посредством Spring-а. из примера идея будет ясна?
... хотя может наоборот запутает, еще и Spring приплёл :( <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/bean...p;quot;> <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" > <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost/samples"/> <property name="username" value="root"/> <property name="password" value="pwForRoot"/> </bean> <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="myDataSource"/> <property name="mappingResources"> <list> <value>./resources/employee.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <value>hibernate.dialect=org.hibernate.dialect.MySQLDialect</value> </property> </bean> </beans> Добавлено через 12 минут и 34 секунды
не хрена ты не понял, я ж объяснил что c3p0 подключался не по причине наличия c3p0.* propertey в конфиг.файле, а по причине наличия свойства <property name="connection.driver_class">com.mysql.jdbc.Driver</property> hibernate видя что для конфигурирования ему указывают Driver.class, понимает что нужно создать DataSource самому. Про пул каких соединений он знает? Только про c3p0... он его и создаёт чихая на все твои упоминания dbcp. Пишу еще раз, при конфигурировнии hibernate-а если хочется использовать отличный от default-ного (c3p0) пула, надо указывать <property name="connection.datasource"><ТВОЙ ДАТА-СОУРС СКОНФИГУРИРОВАННЫЙ С DBCP></property> |
||||
|
|||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
AndrewV, не надо писать бред. Hibernate конфигурит пул соединений именно так. Без указания пропертей пулов DBCP или C3P0 он использует дефолтную реализацию пула, но это не C3P0, а свой собственный хибернейтовский простенький пул. Подробности смотри в коде Hibernate. Пропертю connection.driver_class Hibernate использует с любым пулом. С помощью такой проперти
Hibernate конфигурится чтобы использовать источник данных, хранящийся в JNDI. В случае с Томкатом это и будет DBCP, в большинстве остальных случаев нет. За грубость предупреждение. То, что пишешь не разбираясь в вопросе, оставлю без внимания до следующего прецедента. |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
nogoody, попробуй добавить еще две проперти:
Тогда DBCP должен начать периодически тестировать на живость соединения в пуле. |
|||
|
||||
| AndrewV |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Приношу извинения... Перепроверился, tux прав, когда hibernate видит свойства dbcp.* используется DBCPConnectionProvider. Но справедливости ради, хочу заметить, что использование DBCPConnectionProvider ограниченно реализует фичи DBCP и к тому же deprecated для hibernate3.
|
|||
|
||||
| ochnev |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 253 Регистрация: 27.3.2006 Репутация: нет Всего: нет |
У c3p0 есть возможность валидировать соединение с БД или автоматически делать reconnect к БД?
|
|||
|
||||
| ochnev |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 253 Регистрация: 27.3.2006 Репутация: нет Всего: нет |
Насколько я понял, перечитав все обсуждения здесь, единственный способ решить проблему - это использовать connection pool, который умеет раз в N секунд делать запросы к MySQL, а именно - тестовые запросы "SELECT * FROM some_table", которые должны настраиваться в конфиге. Но тут ещё один вопрос:
А где это написано, что DBCPConnectionProvider - deprecated? Есть какая-нибудь адекватная замена для него, которая умеет делать периодические запросы для оживления соединения с MySQL? |
||||
|
|||||
![]()
|
| Правила форума "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. |