Problema Hibernate + MySQL: Conexão fechada?

Falae gente,
to com uma coisa que tá me perturbando há muito tempo.

Tenho uma aplicação web deployada. Logo após o deploy, a conexão(via hibernate) com o MySQL funciona numa boa. Depois de um tempo que ela está inativa. A Conexão meio que se quebra e nem com autoReconnectForPools=true ou autoReconnect=true na String de conexão funciona! :cry:
Não to usando datasources agora, mas tentei por datasource no Glassfish e tive o mesmo erro.

O erro é o seguinte:

aí vai o Hibernate.cfg.xml

		<!--  Configuração Principal -->
		<property name="connection.url">jdbc:mysql://mysql.hospedagemblabla.net/banco?autoReconnectForPools=true</property>
		<property name="connection.username">meuLogin</property>
		<property name="connection.password">minhaSenha</property>
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
		<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
      	<property name="hibernate.current_session_context_class">thread</property>

		<!-- Condiguração do c3p0 --> <!-- descomenta as c3p0 -->
		<!-- property name="hibernate.c3p0.max_size">10</property>
		<property name="hibernate.c3p0.min_size">2</property>
		<property name="hibernate.c3p0.timeout">5000</property>
		<property name="hibernate.c3p0.max_statements">10</property>
		<property name="hibernate.c3p0.idle_test_period">3000</property>
		<property name="hibernate.c3p0.acquire_increment">2</property --> 

		<!-- Configurações de debug -->
		<property name="show_sql">true</property>
		<property name="use_outer_join">true</property>
		<property name="hibernate.generate_statistics">true</property>
		<property name="hibernate.use_sql_comments">true</property> 

HibernateUtil.java

package package
import org.hibernate.Session;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil
{
	private static final SessionFactory sessionFactory;

	static
	{
		sessionFactory = new Configuration().configure("hibernate.cfg.xml")
				.buildSessionFactory();
	}

	public static Session getSession()
	{
		try
		{
			return sessionFactory.getCurrentSession();

			// Recupera ou cria uma nova sessão. Caso a
			// transação tenha sofrido um commit ou rollback,
			// a sessão terá sido fechada. Neste caso uma
			// nova sessão será criada. Caso contrário, a
			// sessão corrente será recuperada.
		}
		catch (HibernateException e)
		{
			throw new InfraestruturaException(e);
		}
	}

	public static void beginTransaction()
	{
		try
		{
			getSession().beginTransaction();

			// Cria ou recupera a transação corrente,
			// caso ela não tenha sofrido commit nem
			// rollback.
		}
		catch (HibernateException e)
		{
			throw new InfraestruturaException(e);
		}
	}

	public static void commitTransaction()
	{
		try
		{
			getSession().getTransaction().commit();
			// Efetua o commit da transacao e fecha a sessão.
		}
		catch (HibernateException ex)
		{
			rollbackTransaction();
			throw new InfraestruturaException(ex);
		}
	}

	public static void rollbackTransaction()
	{
		try
		{
			getSession().getTransaction().rollback();
			// Efetua o rollback da transacao e fecha a sessão.
		}
		catch (HibernateException ex)
		{
			throw new InfraestruturaException(ex);
		}
	}
}

parte do stacktrace do erro

23:33:35,234 INFO  [STDOUT] 28/08/2008 23:33:35-org.hibernate.util.JDBCExceptionReporter logExceptions
ERROR: Communications link failure

Last packet sent to the server was 37843 ms ago.
23:33:35,250 INFO  [STDOUT] 28/08/2008 23:33:35-org.hibernate.transaction.JDBCTransaction rollback
ERROR: JDBC rollback failed
com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state.
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:980)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
.
.
.
23:33:35,250 INFO  [STDOUT] Error: org.hibernate.exception.JDBCConnectionException: could not execute query

Por favor, ajuda! não sei mais o que fazer… :cry:

[quote=Willenjs]Falae gente,
to com uma coisa que tá me perturbando há muito tempo.

Tenho uma aplicação web deployada. Logo após o deploy, a conexão(via hibernate) com o MySQL funciona numa boa. Depois de um tempo que ela está inativa. A Conexão meio que se quebra e nem com autoReconnectForPools=true ou autoReconnect=true na String de conexão funciona! :cry:
Não to usando datasources agora, mas tentei por datasource no Glassfish e tive o mesmo erro.

O erro é o seguinte:

aí vai o Hibernate.cfg.xml

		<!--  Configuração Principal -->
		<property name="connection.url">jdbc:mysql://mysql.hospedagemblabla.net/banco?autoReconnectForPools=true</property>
		<property name="connection.username">meuLogin</property>
		<property name="connection.password">minhaSenha</property>
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
		<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
      	<property name="hibernate.current_session_context_class">thread</property>

		<!-- Condiguração do c3p0 --> <!-- descomenta as c3p0 -->
		<!-- property name="hibernate.c3p0.max_size">10</property>
		<property name="hibernate.c3p0.min_size">2</property>
		<property name="hibernate.c3p0.timeout">5000</property>
		<property name="hibernate.c3p0.max_statements">10</property>
		<property name="hibernate.c3p0.idle_test_period">3000</property>
		<property name="hibernate.c3p0.acquire_increment">2</property --> 

		<!-- Configurações de debug -->
		<property name="show_sql">true</property>
		<property name="use_outer_join">true</property>
		<property name="hibernate.generate_statistics">true</property>
		<property name="hibernate.use_sql_comments">true</property> 

HibernateUtil.java

package package
import org.hibernate.Session;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil
{
	private static final SessionFactory sessionFactory;

	static
	{
		sessionFactory = new Configuration().configure("hibernate.cfg.xml")
				.buildSessionFactory();
	}

	public static Session getSession()
	{
		try
		{
			return sessionFactory.getCurrentSession();

			// Recupera ou cria uma nova sessão. Caso a
			// transação tenha sofrido um commit ou rollback,
			// a sessão terá sido fechada. Neste caso uma
			// nova sessão será criada. Caso contrário, a
			// sessão corrente será recuperada.
		}
		catch (HibernateException e)
		{
			throw new InfraestruturaException(e);
		}
	}

	public static void beginTransaction()
	{
		try
		{
			getSession().beginTransaction();

			// Cria ou recupera a transação corrente,
			// caso ela não tenha sofrido commit nem
			// rollback.
		}
		catch (HibernateException e)
		{
			throw new InfraestruturaException(e);
		}
	}

	public static void commitTransaction()
	{
		try
		{
			getSession().getTransaction().commit();
			// Efetua o commit da transacao e fecha a sessão.
		}
		catch (HibernateException ex)
		{
			rollbackTransaction();
			throw new InfraestruturaException(ex);
		}
	}

	public static void rollbackTransaction()
	{
		try
		{
			getSession().getTransaction().rollback();
			// Efetua o rollback da transacao e fecha a sessão.
		}
		catch (HibernateException ex)
		{
			throw new InfraestruturaException(ex);
		}
	}
}

parte do stacktrace do erro

23:33:35,234 INFO  [STDOUT] 28/08/2008 23:33:35-org.hibernate.util.JDBCExceptionReporter logExceptions
ERROR: Communications link failure

Last packet sent to the server was 37843 ms ago.
23:33:35,250 INFO  [STDOUT] 28/08/2008 23:33:35-org.hibernate.transaction.JDBCTransaction rollback
ERROR: JDBC rollback failed
com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state.
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:980)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
.
.
.
23:33:35,250 INFO  [STDOUT] Error: org.hibernate.exception.JDBCConnectionException: could not execute query

Por favor, ajuda! não sei mais o que fazer… :cry: [/quote]

mesmo problema aqui… Resolveu ?

Rapaz, tem muitos anos esse tópico… :slight_smile:

Mas procurando muito e muito na internet a grande solução foi aumentar alguma configuração de tempo de ‘timeout’.

Muita gente falava sobre problema se passar depois de uma noite ou um fim de semana e o sistema ficava sem uso. Se for o mesmo caso seu, tenta aumentar o timeout para algo maior que o período de inatividade previsto. Depois de quase 5 anos eu não me lembro, mas tentaria a hibernate.c3p0.timeout .

Boa sorte aí :slight_smile: