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();
}
}