2010-04-30 2 views
12

Sto provando a ottenere del codice che mi è stato passato in esecuzione. Sembra utilizzare la struttura di Hibernate. Ho superato la maggior parte degli errori modificando la configurazione, ma questo mi ha stumped morto.Errore Java Hibernate/C3P0: "Impossibile ottenere i metadati della connessione. Un tentativo da parte di un client di eseguire il checkout di una connessione è scaduto."

Sta cercando di connettersi a due database: gameapp e gamelog. Entrambi esistono. Sembra avere problemi di connessione al gamelog, ma nessuno si connette a gameapp (più avanti nella init, si connette e carica altri DB benissimo). Di seguito, ho incollato l'errore e il dump dello stack delle eccezioni.

I imaging c'è qualcos'altro nelle configurazioni, quindi ho anche incluso il file di configurazione per quel db. So che questo è molto vago, ma spero che qualche professionista possa vedere lo stupido errore che mi manca.

<?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> 

eccezione e lo stack trace:

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 
+0

La stringa di connessione nel file di configurazione funziona per le connessioni al DB sulla stessa macchina su cui è in esecuzione il codice? –

+0

mysql -u root gamelog funziona esattamente come previsto. – Allan

+0

Sono stato in grado di parlare con gli sviluppatori del codice e mi hanno detto che questo errore è perfetto per la loro configurazione e semplicemente lo ignoro. Devo amare le aringhe rosse. – Allan

risposta

8

Se è stata impostata di C3P0 proprietà "checkoutTimeout" a qualcosa a parte lo 0 potrebbe essere il timeout troppo veloce (questo era il mio problema, soluzione: l'ho raggiunto a 2000 millisecondi da 500).

In alternativa, c'è una soluzione per questo avvertimento:

Impostare la proprietà hibernate.temp.use_jdbc_metadata_defaults a false.

Trovato questo in http://www.docjar.com/html/api/org/hibernate/cfg/SettingsFactory.java.html, anche se potrebbero esserci effetti collaterali di non avere i valori predefiniti di metadati JDBC dell'estrazione di ibernazione.

+0

Questo mi è stato utile, ci eravamo appena trasferiti in un nuovo ambiente e ricevevo gli stessi errori, ma l'applicazione funzionava. Grazie! Gli effetti collaterali – samspot

+0

possono includere se si sta utilizzando qualcosa come SchemaUpdate. – Njax3SmmM2x2a0Zf7Hpd

0

Verificare se è possibile connettersi al database mysql gamelog sulla riga di comando con l'utente root e nessuna password (!). Come nota a margine, ti consiglio di impostare una password per root e di utilizzare un account diverso per connettersi al database dall'applicazione, ma questa è un'altra storia.

1

In realtà non è nemmeno un errore di autenticazione. MySQL è anche in esecuzione o associato a localhost?

funziona telnet 127.0.0.1 3306? in caso affermativo, installare il client mysql sulla scatola e provare

mysql --user = radice --ip = 127.0.0.1 e vedere cosa succede

+0

Cosa succede se telnet localhost 3306 non funziona? – Guilherme

+0

Beh, se telnet sugli ips, incluso localhost non funziona e non hai cambiato la porta predefinita, mysql aint in esecuzione o hai un problema con il firewall – MJB

+0

puoi anche fare 'mysql -u root -h 127.0.0.1', menzionando solo perché '-u' è in genere più comune, meno scritto e più pulito :) – Seaux