Projeto para do nada utilizando jpa,hibernate e mysql

Bom dia, alguem podé me ajudar? Não sei mais o que fazer.
Tipo… esse erro dá quando o sistema fica sem acessar por um tempo, um dia por exemplo. quando vou acessá-lo novamente dá este erro. Só que verifico e o MySql e o TomCat estão rodando normalmente. Já revisei tudo e não vi nada de errado. Preciso de uma luz. Desde já obrigado pela atenção.

O sistema possui: JPA, Hibernate 3, DisplayTag, Servlets


HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot release connection
	org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)

	org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:108)
	smsjp.cais.dao.UsuarioDAO.retrieveUsuario(UsuarioDAO.java:73)
	smsjp.cais.logica.usuario.ValidaLogin.doPost(ValidaLogin.java:32)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)

	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:39)

root cause

org.hibernate.exception.GenericJDBCException: Cannot release connection

	org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
	org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
	org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)

	org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
	org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:455)
	org.hibernate.jdbc.ConnectionManager.aggressiveRelease(ConnectionManager.java:406)

	org.hibernate.jdbc.ConnectionManager.afterTransaction(ConnectionManager.java:293)
	org.hibernate.jdbc.JDBCContext.afterNontransactionalQuery(JDBCContext.java:241)
	org.hibernate.impl.SessionImpl.afterOperation(SessionImpl.java:417)

	org.hibernate.impl.SessionImpl.list(SessionImpl.java:1126)
	org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
	org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:82)
	smsjp.cais.dao.UsuarioDAO.retrieveUsuario(UsuarioDAO.java:73)

	smsjp.cais.logica.usuario.ValidaLogin.doPost(ValidaLogin.java:32)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:39)

root cause

java.sql.SQLException: Already closed.
	org.apache.tomcat.dbcp.dbcp.PoolableConnection.close(PoolableConnection.java:84)
	org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:181)

	org.hibernate.connection.DatasourceConnectionProvider.closeConnection(DatasourceConnectionProvider.java:74)
	org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:451)
	org.hibernate.jdbc.ConnectionManager.aggressiveRelease(ConnectionManager.java:406)

	org.hibernate.jdbc.ConnectionManager.afterTransaction(ConnectionManager.java:293)
	org.hibernate.jdbc.JDBCContext.afterNontransactionalQuery(JDBCContext.java:241)
	org.hibernate.impl.SessionImpl.afterOperation(SessionImpl.java:417)

	org.hibernate.impl.SessionImpl.list(SessionImpl.java:1126)
	org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
	org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:82)
	smsjp.cais.dao.UsuarioDAO.retrieveUsuario(UsuarioDAO.java:73)

	smsjp.cais.logica.usuario.ValidaLogin.doPost(ValidaLogin.java:32)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:39)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.
Apache Tomcat/6.0.16

persistence.xml


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
	<persistence-unit name="cais">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>
			<!-- Auto detect annotation model classes -->
			<property name="hibernate.archive.autodetection" value="class"/>
			<!-- Datasource -->
			<property name="hibernate.connection.datasource" value="java:comp/env/jdbc/ambulatorio" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.hbm2ddl.auto" value="update"/>	
		</properties>
	</persistence-unit>
</persistence>

a parte de autenticação(senha e user do bd) está no arquivo server.xml

DataBaseManagerSingleton


package smsjp.cais.util;

import java.sql.Connection;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.hibernate.Session;
import org.hibernate.ejb.HibernateEntityManager;

/**
 * Gerenciador singleton do banco de dados
 * 
 * @version $Id$
 */
public class DatabaseManageSingleton {
	
	private static DatabaseManageSingleton instancia;
	private EntityManagerFactory factory;
	private EntityManager manager;
	
	public EntityManagerFactory getFactory() {
		return factory;
	}

	public EntityManager getManager() {
		return manager;
	}

        public static DatabaseManageSingleton getInstancia() {
		if (instancia == null) {
			instancia = new DatabaseManageSingleton();
		}

		return instancia;
	}

	private DatabaseManageSingleton() {
		factory = Persistence.createEntityManagerFactory("j");
		manager = factory.createEntityManager();
	}
	
        /**
         * Retorna uma conexão JDBC obtida através da JPA
         * @return conexão JDBC
         */
	public Connection getJdbcConnection () {
		Session session = ((HibernateEntityManager) manager).getSession();
		
		return session.connection();
	}
}

Esse cara parece que resolveu, vê se ajuda: http://forum.springframework.org/archive/index.php/t-26626.html

Obrigado fiaux. Pelo que li parece ser algo com o pool de conexões. Configurei o c3p0 pra ver o que vai dar. Agora só amanhã para saber se o sistema vai dar algum problema. Valeu.

Sim, de fato parece ser pool de conexões, a exception diz “cannot release connection”, não sei se algo prendeu a conexão. Testa e volta com a resposta.

blz, obrigado. :wink:

E ae blz… continua do mesmo geito. parou de novo o mesmo erro, não sei mais o que fazer :frowning: mais alguma luz, para me ajudar? valeu ae.

Reparei que, quando dá este problema, reinicio o TomCat e o sistema volta ao normal.

E ae blz… continua do mesmo geito. parou de novo o mesmo erro, não sei mais o que fazer :frowning: mais alguma luz, para me ajudar? valeu ae.

Reparei que, quando dá este problema, reinicio o TomCat e o sistema volta ao normal.
[/quote]

Bom, se está do mesmo jeito parece que as coisas não mudaram, que continua tudo igual. Você por acaso em algum momento configurou o tomcat para gerenciar pool de conexões ou algo assim lá no administration dele?

E ae blz… continua do mesmo geito. parou de novo o mesmo erro, não sei mais o que fazer :frowning: mais alguma luz, para me ajudar? valeu ae.

Reparei que, quando dá este problema, reinicio o TomCat e o sistema volta ao normal.
[/quote]

Bom, se está do mesmo jeito parece que as coisas não mudaram, que continua tudo igual. Você por acaso em algum momento configurou o tomcat para gerenciar pool de conexões ou algo assim lá no administration dele?[/quote]

Está assim no server.xml


	<Resource
            name="jdbc/amb"
            scope="shareable"
            factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
            auth="Container"
            driverClassName="com.mysql.jdbc.Driver"
            type="javax.sql.DataSource"
            maxActive="200"
            maxIdle="10"
            maxWait="10000"
            url="jdbc:mysql://localhost:3306/ambulatorio"
            username="root"
            password="xxx"
   />

Cara, deve ser isso aí, eu não conheço essa configuração. Mas parece ser ela.

maxActive=“200”

maxIdle=“10”

maxWait=“10000”

Cara tente achar relação do seu problema e os parâmetros acima, eu sugiro que aumente todos e ir testando pra ver qual deles é o que precisa.

Abraço