2010-04-30 19 views
12

Estoy tratando de obtener un código que me dejó de funcionar. Parece usar el marco de Hibernate. He pasado la mayoría de los errores modificando la configuración, pero este me tiene absolutamente perplejo.Error de Java Hibernate/C3P0: "No se pudieron obtener los metadatos de conexión. Se ha agotado el tiempo de espera de un cliente para finalizar una conexión".

Está tratando de conectarse a dos bases de datos: gameapp y gamelog. Ambos existen. Parece tener problemas para conectarse al gamelog, pero ninguno se conecta a gameapp (más adelante en el init, se conecta y carga otros DBs muy bien). A continuación, he pegado el error y el volcado de la pila de excepción.

I imagen hay algo más en las configuraciones, así que también he incluido el archivo de configuración para esa base de datos. Sé que esto es muy vago, pero espero que algún profesional pueda ver el estúpido error que me falta.

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

Excepción y Seguimiento de la pila:

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

¿Funciona la cadena de conexión en el archivo de configuración para las conexiones a la base de datos en la misma máquina en la que se está ejecutando el código? –

+0

mysql -u root gamelog funciona exactamente como se esperaba. – Allan

+0

Pude hablar con los desarrolladores de código y me dijeron que este error es completamente correcto para su configuración y simplemente lo ignoraron. Me encantan los arenques rojos. – Allan

Respuesta

8

Si ha establecido la propiedad "checkoutTimeout" de C3P0 a algo aparte de 0, es posible que se agote el tiempo de espera demasiado rápido (ese fue mi problema, solución: lo superó a 2000 milisegundos desde 500).

Por otra parte, hay una solución para este aviso:

establecer la propiedad hibernate.temp.use_jdbc_metadata_defaults a false.

Se encontró esto en http://www.docjar.com/html/api/org/hibernate/cfg/SettingsFactory.java.html, aunque puede haber efectos secundarios de no tener los valores predeterminados de la metadata JDBC de Hibernate.

+0

Esto fue útil para mí, acabábamos de mudarnos a un nuevo entorno y recibía los mismos errores, pero la aplicación estaba funcionando. ¡Gracias! Los efectos secundarios de – samspot

+0

pueden incluir si está usando algo como SchemaUpdate. – Njax3SmmM2x2a0Zf7Hpd

0

Comprobar si se puede conectar a la base de datos MySQL gamelog en la línea de comandos con el usuario root y sin contraseña (!). Como nota al margen, recomiendo establecer una contraseña para root y usar una cuenta diferente para conectarse a la base de datos desde su aplicación, pero esa es otra historia.

1

En realidad eso ni siquiera es un error de autenticación. ¿MySQL se está ejecutando o está vinculado a localhost?

hace telnet 127.0.0.1 3306 trabajar? si es así, instalar el cliente de MySQL en la caja y tratar

mysql --user = root --ip = 127.0.0.1 y ver qué pasa

+0

¿Qué sucede si telnet localhost 3306 no funciona? – Guilherme

+0

Bueno, si telnet en sus ips incluyendo localhost no funciona y no ha cambiado el puerto predeterminado, ya sea mysql no se está ejecutando o tiene un problema de firewall – MJB

+0

también puede hacer 'mysql -u root -h 127.0.0.1', solo mencionando porque '-u' es típicamente más común, menos escritura y más limpio :) – Seaux

Cuestiones relacionadas