Подтвердить что ты не робот

Ошибка Java Hibernate/C3P0: "Не удалось получить метаданные соединения. Попытка клиента проверять соединение истекает".

Я пытаюсь получить код, который был пропущен и запущен. Похоже, он использует структуру Hibernate. Я пропустил большую часть ошибок, настраивая конфигурацию, но у меня есть мертвая боль.

Он пытается подключиться к двум базам данных: gameapp и gamelog. Оба существуют. Кажется, что у вас проблемы с подключением к gamelog, но никто не подключается к gameapp (позже в init, он подключается и загружает другие DBs просто отлично). Ниже я вставил ошибку и дамп стека исключений.

Я создаю там что-то еще в конфигурациях, поэтому я также включил конфигурационный файл для этого db. Я знаю, что это очень расплывчато, но я надеюсь, что некоторые профессионалы смогут увидеть тупую ошибку, которую мне не хватает.

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

<hibernate-configuration>
    <session-factory>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/gamelog</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        <property   name="connection.useUnicode">true</property>     
            <property   name="connection.characterEncoding">UTF-8</property>   
        <property name="hibernate.jdbc.batch_size">100</property>
        <property name="jdbc.fetch_size">1</property>
        <property name="hbm2ddl.auto">none</property><!-- update -->
        <property name="connection.useUnicode">true</property>
        <property name="show_sql">true</property>
        <!-- c3p0-configuration -->
        <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
        <property name="hibernate.c3p0.min_size">5</property>
        <property name="hibernate.c3p0.max_size">10</property>
        <property name="hibernate.c3p0.timeout">30</property>
        <property name="hibernate.c3p0.idle_test_period">30</property>
        <property name="hibernate.c3p0.max_statements">0</property>
        <property name="hibernate.c3p0.acquire_increment">5</property>      
    </session-factory>
</hibernate-configuration>

Исключение и трассировка стека:

2010-04-30 17:50:00,411 WARN [org.hibernate.cfg.SettingsFactory] - Could not obtain connection metadata
java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:527)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
    at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:35)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:76)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1933)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1216)
    at com.database.hibernate.util.HibernateFactory.<init>(Unknown Source)
    at com.database.hibernate.util.HibernateUtil.<clinit>(Unknown Source)
    at com.server.databaseop.goodOp.GoodOpImpl.initBreedGoods(Unknown Source)
    at com.server.databaseop.goodOp.GoodOpImpl.access$000(Unknown Source)
    at com.server.databaseop.goodOp.GoodOpImpl$1.run(Unknown Source)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:165)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:636)
Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from [email protected] -- timeout at awaitAvailable()
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1317)
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
    ... 18 more
4b9b3361

Ответ 1

Если вы установили свойство C3P0 "checkoutTimeout" на что-то другое, кроме 0, вы могли бы слишком быстро выходить из строя (это была моя проблема, решение: натолкнуло его на 2000 миллисекунд с 500).

В качестве альтернативы, существует обходное решение для этого предупреждения:

Задайте для свойства hibernate.temp.use_jdbc_metadata_defaults значение false.

Обнаружено это в http://www.docjar.com/html/api/org/hibernate/cfg/SettingsFactory.java.html, хотя могут быть побочные эффекты, не связанные с извлечением Hibernate JDBC метаданных по умолчанию.

Ответ 2

Фактически это даже не ошибка аутентификации. Является ли MySQL даже запущенным или привязанным к localhost?

работает telnet 127.0.0.1 3306? если это так, установите клиент mysql в поле и попробуйте

mysql --user = root -ip = 127.0.0.1 и посмотреть, что произойдет

Ответ 3

Проверьте, можете ли вы подключиться к базе данных gamelog mysql в командной строке с пользователем root и без пароля (!). В качестве дополнительной заметки я бы рекомендовал установить пароль для root и использовать другую учетную запись для подключения к базе данных из вашего приложения, но это другая история.