Java Hibernate/C3P0 d'erreur: “impossible d'obtenir les métadonnées de connexion. Une tentative de la part d'un client à la caisse d'une Connexion a expiré.”
J'essaie d'en obtenir un code que j'ai été adopté et en cours d'exécution. Il semble utiliser le framework Hibernate. J'ai obtenu passé, la plupart des erreurs de peaufiner la configuration, mais cela m'a dead perplexe.
Essayer de se connecter à deux bases de données: gameapp et gamelog. Les deux existent. Il semble avoir des problèmes de connexion à gamelog, mais aucune connexion à gameapp (plus tard dans l'init, il se connecte et charges autres DBs très bien). Ci-dessous, je l'ai collé l'erreur et à l'exception de vidage de pile.
Je imagerie il y a autre chose dans les configs, donc j'ai aussi inclus le fichier de configuration pour que db. Je sais que c'est très vague, mais j'espère que certains pro peut voir l'erreur stupide, je suis absent.
<?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>
Exception et la trace de la pile:
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 com.mchange.v2.resourcepool.BasicResourcePool@ca470 -- 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
mysql -u root gamelog fonctionne exactement comme prévu.
J'ai été en mesure de parler aux développeurs de code et ils m'ont dit que cette erreur est tout à fait acceptable pour leur installation et de simplement l'ignorer. Devez aimer les harengs rouges.
OriginalL'auteur Allan | 2010-04-30
Vous devez vous connecter pour publier un commentaire.
Si vous avez défini C3P0 "checkoutTimeout" bien autre chose que 0, vous pourriez être timing trop vite (c'était mon problème, solution: heurté à 2000 millisecondes à partir de 500).
Sinon, il y a une solution de contournement pour cette mise en garde:
Définir la
hibernate.temp.use_jdbc_metadata_defaults
propriétéfalse
.Trouvé ça dans http://www.docjar.com/html/api/org/hibernate/cfg/SettingsFactory.java.html, s'il y a peut être des effets secondaires de ne pas avoir Hibernate extrait JDBC de Métadonnées par défaut.
les effets secondaires peuvent inclure si vous utilisez quelque chose comme SchemaUpdate.
OriginalL'auteur Tyler Szabo
En fait ce n'est même pas une erreur d'authentification. Est MySQL, même en cours d'exécution ou lié à localhost?
ne telnet 127.0.0.1 3306 travail?
dans ce cas, installez le client mysql sur la boîte et essayez
mysql --user=root --ip=127.0.0.1
et voir ce qui se passe
Eh bien, si telnet sur votre ips, y compris localhost ne fonctionne pas et vous n'avez pas changer le port par défaut, mysql n'est pas en cours d'exécution ou vous gots un problème de firewall
vous pouvez également faire
mysql -u root -h 127.0.0.1
, le seul fait de mentionner parce que-u
est généralement plus commun, moins l'écriture, et plus propre 🙂OriginalL'auteur MJB
Vérifier si vous pouvez vous connecter à l'gamelog de base de données mysql en ligne de commande avec l'utilisateur root et pas de mot de passe (!). Comme une note de côté, je vous recommande de définir un mot de passe pour root et utiliser un autre compte pour se connecter à la base de données à partir de votre application, mais c'est une autre histoire.
OriginalL'auteur Pascal Thivent