Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate+MySQL, вылетает соединение 
:(
    Опции темы
nogoody
Дата 4.2.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 12.9.2007
Где: Смоленск

Репутация: нет
Всего: нет



Проблема в следующем... написал простенький пример выборки из базы MySQL через Hibernate... Все добро стоит на TomCat 5.5
Запускаю, все работает, проходит время - вылетает ошибка:

Код

org.hibernate.exception.JDBCConnectionException: could not execute query
    org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:72)
    org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)




Код

Вот xml:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>


        <!-- Database connection settings -->
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <property name="connection.url">
            jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8
        </property>
        <property name="connection.username">root</property>
        <property name="connection.password">password</property>
        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">

            org.hibernate.dialect.MySQLDialect

        </property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">
            org.hibernate.cache.NoCacheProvider
        </property>

        <!-- Echo all executed SQL to stdout -->
        <!-- <property name="show_sql">true</property> -->

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>



        <mapping resource="events\test.hbm.xml" />
    </session-factory>
</hibernate-configuration>




Это сообщение отредактировал(а) nogoody - 4.2.2008, 14:58
PM MAIL   Вверх
seth
Дата 4.2.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 4.6.2006

Репутация: 1
Всего: 1



весь лог в студию smile


--------------------
PM MAIL   Вверх
nogoody
Дата 4.2.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 12.9.2007
Где: Смоленск

Репутация: нет
Всего: нет



Код

org.hibernate.exception.JDBCConnectionException: could not execute query
    org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:72)
    org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    org.hibernate.loader.Loader.doList(Loader.java:2148)
    org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
    org.hibernate.loader.Loader.list(Loader.java:2024)
    org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
    org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
    org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
    org.hibernate.impl.SessionImpl.list(SessionImpl.java:1129)
    org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    servlets.SearchSemantics.doGet(SearchSemantics.java:115)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


вот весь лог ошибки, почитал на форумах, добавил в xml это:
<property name="connection.autoReconnect">true</property>
        <property name="connection.is-connection-validation-required">true</property>

но не помогло... я так понимаю соединение вылетает... или что?
PM MAIL   Вверх
tux
Дата 4.2.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(nogoody @  4.2.2008,  15:01 Найти цитируемый пост)
вот весь лог ошибки

Лог не весь, еще поищи.
PM MAIL Skype GTalk Jabber YIM   Вверх
nogoody
Дата 5.2.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 12.9.2007
Где: Смоленск

Репутация: нет
Всего: нет



Код

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: Software caused connection abort: socket write error

STACKTRACE:

java.net.SocketException: Software caused connection abort: socket write error
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65
)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
        at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2744)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
        at com.mysql.jdbc.Connection.execSQL(Connection.java:3256)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.ja
va:1313)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:
1448)
        at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:
139)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)
        at org.hibernate.loader.Loader.doQuery(Loader.java:662)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Lo
ader.java:224)
        at org.hibernate.loader.Loader.doList(Loader.java:2145)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
        at org.hibernate.loader.Loader.list(Loader.java:2024)
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
        at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.ja
va:308)
        at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java
:153)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1129)
        at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
        at servlets.SearchSemantics.doGet(SearchSemantics.java:97)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:174)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:151)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:874)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.p
rocessConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpo
int.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFol
lowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:689)
        at java.lang.Thread.run(Thread.java:619)


** END NESTED EXCEPTION **



Last packet sent to the server was 0 ms ago.
        at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2759)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
        at com.mysql.jdbc.Connection.execSQL(Connection.java:3256)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.ja
va:1313)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:
1448)
        at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:
139)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)
        at org.hibernate.loader.Loader.doQuery(Loader.java:662)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Lo
ader.java:224)
        at org.hibernate.loader.Loader.doList(Loader.java:2145)
        ... 24 more


вот достал из Томката
PM MAIL   Вверх
tux
Дата 5.2.2008, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Известная проблема с отваливанием соединения в MySQL. Проблема уже обсуждалась, например, здесь - http://forum.vingrad.ru/forum/topic-173917.html.
PM MAIL Skype GTalk Jabber YIM   Вверх
nogoody
Дата 19.3.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 12.9.2007
Где: Смоленск

Репутация: нет
Всего: нет



Сделал все по науке...  

Код

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>


        <!-- Database connection settings -->
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <property name="connection.url">
        jdbc:mysql://localhost:3306/test?autoReconnect=true</property>
        <property name="connection.username">root</property>
        <property name="connection.characterEncoding">UTF-8</property>
        <property name="connection.password">password</property>
        
        <!-- JDBC connection pool (use the built-in) -->

    <property name="dbcp.maxActive">15</property>
        <property name="dbcp.maxIdle">5</property>
        <property name="dbcp.maxWait">120000</property>
        <property name="dbcp.whenExhaustedAction">1</property>
        <property name="dbcp.testOnBorrow">true</property>
        <property name="dbcp.testOnReturn">true</property>
        <property name="dbcp.validationQuery">
            select count(*) from some-table
        </property>
        <property name="dbcp.ps.maxActive">0</property>
        <property name="dbcp.ps.maxIdle">0</property>
        <property name="dbcp.ps.maxWait">-1</property>
        <property name="dbcp.ps.whenExhaustedAction">2</property>


        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>




        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">
            org.hibernate.cache.NoCacheProvider
        </property>
        <property name="hbm2ddl.auto">update</property>
        <mapping resource="main\Objects.hbm.xml" />
        
    </session-factory>

</hibernate-configuration>


Вроде бы и dbcp использую, вроде бы и валидация есть... а ошибка таже вываливается, только теперь выполняется через раз... Никак не могу понять, помогите пожалуйста...

PM MAIL   Вверх
AndrewV
Дата 20.3.2008, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
nogoody
Дата 20.3.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 12.9.2007
Где: Смоленск

Репутация: нет
Всего: нет



Цитата

Что-то сомнения у меня что dbcp используешь, то что ты property-ей вида dbcp.* навставлял в конфигурационный файл ничего не даёт


Насколько я понял, именно так и надо пулы подключать по докам... Покрайней мере c3p0 именно так и подключался. Хибернет должен сам подключать этот пул. Если у кого есть готовый пример с подключением dbcp выложите пожалуйста, а то совсем замучился я с ним.
PM MAIL   Вверх
AndrewV
Дата 20.3.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 секунды
Цитата(nogoody @ 20.3.2008,  15:05)
Цитата

Покрайней мере c3p0 именно так и подключался


не хрена ты не понял, я ж объяснил что 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>
PM MAIL   Вверх
tux
Дата 20.3.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



AndrewV, не надо писать бред. Hibernate конфигурит пул соединений именно так. Без указания пропертей пулов DBCP или C3P0 он использует дефолтную реализацию пула, но это не C3P0, а свой собственный хибернейтовский простенький пул. Подробности смотри в коде Hibernate. Пропертю connection.driver_class Hibernate использует с любым пулом. С помощью такой проперти
Код

<property name="connection.datasource">java:comp/env/jdbc/MyDataSource</property>

Hibernate конфигурится чтобы использовать источник данных, хранящийся в JNDI. В случае с Томкатом это и будет DBCP, в большинстве остальных случаев нет.

За грубость предупреждение. То, что пишешь не разбираясь в вопросе, оставлю без внимания до следующего прецедента.
PM MAIL Skype GTalk Jabber YIM   Вверх
tux
Дата 20.3.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



nogoody, попробуй добавить еще две проперти:
Цитата

dbcp.testWhileIdle=true
dbcp.timeBetweenEvictionRunsMillis=900000

Тогда DBCP должен начать периодически тестировать на живость соединения в пуле.
PM MAIL Skype GTalk Jabber YIM   Вверх
AndrewV
Дата 22.3.2008, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Приношу извинения... Перепроверился, tux прав, когда hibernate видит свойства dbcp.* используется DBCPConnectionProvider. Но справедливости ради, хочу заметить, что использование DBCPConnectionProvider ограниченно реализует фичи DBCP и к тому же deprecated для hibernate3.

PM MAIL   Вверх
ochnev
Дата 24.3.2008, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 253
Регистрация: 27.3.2006

Репутация: нет
Всего: нет



У c3p0 есть возможность валидировать соединение с БД или автоматически делать reconnect к БД?

PM MAIL   Вверх
ochnev
Дата 24.3.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 253
Регистрация: 27.3.2006

Репутация: нет
Всего: нет



Цитата(tux @ 5.2.2008,  17:58)
Известная проблема с отваливанием соединения в MySQL.

Насколько я понял, перечитав все обсуждения здесь, единственный способ решить проблему - это использовать connection pool, который умеет раз в N секунд делать запросы к MySQL, а именно - тестовые запросы "SELECT * FROM some_table", которые должны настраиваться в конфиге.

Но тут ещё один вопрос:
Цитата

когда hibernate видит свойства dbcp.* используется DBCPConnectionProvider. Но справедливости ради, хочу заметить, что использование DBCPConnectionProvider ограниченно реализует фичи DBCP и к тому же deprecated для hibernate3.


А где это написано, что DBCPConnectionProvider - deprecated?
Есть какая-нибудь адекватная замена для него, которая умеет делать периодические запросы для оживления соединения с MySQL?

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0584 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.