Perda de conexão

Estou desenvolvendo um sistema com Hibernate JPA jsf e mysql.
O sistema funciona o dia todo sem problemas, porem no dia seguinte pela manhã quando vou abri-lo recebo mensagem abaixo:

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.TransactionException: JDBC begin failed: 
	org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
	org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
	org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1224)
	org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:63)
	potencial.core.filter.JPAFilter.doFilter(JPAFilter.java:25)

root cause

org.hibernate.TransactionException: JDBC begin failed: 
	org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:92)
	org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473)
	org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:60)
	potencial.core.filter.JPAFilter.doFilter(JPAFilter.java:25)

root cause

java.sql.SQLException: Communication link failure: java.io.EOFException, underlying cause: null

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
	at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1395)
	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1539)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1930)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1168)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1279)
	at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1225)
	at com.mysql.jdbc.Connection.execSQL(Connection.java:2278)
	at com.mysql.jdbc.Connection.execSQL(Connection.java:2237)
	at com.mysql.jdbc.Connection.execSQL(Connection.java:2218)
	at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:548)
	at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:87)
	at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473)
	at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:60)
	at potencial.core.filter.JPAFilter.doFilter(JPAFilter.java:25)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:550)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:380)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)


** END NESTED EXCEPTION **


	com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1714)
	com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1930)
	com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1168)
	com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1279)
	com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1225)
	com.mysql.jdbc.Connection.execSQL(Connection.java:2278)
	com.mysql.jdbc.Connection.execSQL(Connection.java:2237)
	com.mysql.jdbc.Connection.execSQL(Connection.java:2218)
	com.mysql.jdbc.Connection.setAutoCommit(Connection.java:548)
	org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:87)
	org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473)
	org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:60)
	potencial.core.filter.JPAFilter.doFilter(JPAFilter.java:25)

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

Minha classe JPAFilter esta assim:

package potencial.core.filter;



import java.io.IOException;



import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.annotation.WebFilter;



@WebFilter(servletNames={"Faces Servlet"})

public class JPAFilter implements Filter{

	

	private EntityManagerFactory factory;



	@Override

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

		EntityManager entityManager = this.factory.createEntityManager();

		request.setAttribute("entityManager", entityManager);

		entityManager.getTransaction().begin();

		chain.doFilter(request, response);	

		try {

			entityManager.getTransaction().commit();

		} catch (Exception e) {

			entityManager.getTransaction().rollback();

			throw new ServletException(e);

		} finally {

			entityManager.close();

		}

	}

	

	@Override

	public void init(FilterConfig filterConfig) throws ServletException {

		this.factory = Persistence.createEntityManagerFactory("core");

	}

	

	@Override

	public void destroy() {

		this.factory.close();

	}

}

e a parte de transação com o banco assim:

import java.lang.reflect.Method;

import java.util.List;



import javax.el.ELContext;

import javax.faces.context.FacesContext;

import javax.persistence.EntityManager;

import javax.persistence.Query;

import javax.persistence.criteria.CriteriaBuilder;

import javax.persistence.criteria.CriteriaQuery;

import javax.persistence.criteria.Root;



public class Transaction {



private EntityManager entityManager;

	

	public Transaction(){

		ELContext elContext = FacesContext.getCurrentInstance().getELContext();

        this.entityManager = (EntityManager)FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "entityManager");

	

	}

	

	public Object save(Object obj){

		obj = this.entityManager.merge(obj);

		this.entityManager.flush();

		return obj;

	}	

	

	public void remove(Object obj) {

		this.entityManager.remove(obj);

		this.entityManager.flush();

	}
}

Já pesquisei muito sobre isso no google e até agora não encontrei nada que funcionou.

Alguém pode me dar uma luz por favor?

Qual é o tamanho do pool de conexões?

Vc já investigou para saber se as conexões estão sendo fechadas mesmo?

Toda parte de conexão estão nesses screens que postei. Não faço idéia de como consertar isso

As configurações do pool de conexões costumam ficar em descritores de implantação, alguns app servers possuem consoles mais robustos para se configurar isso…mas enfim, qual é o web conatiner que utiliza?

Estou usando o Tomcat 7

e qual é o BD?

faça o teste de stress do sistema, se ele estourar o numero de conexões o problema é no fechamento. Mas olhando esse erro, parece que o banco fechou a conexão mas a aplicação deve pega-la como aberta…testa ai e posta para a galera ver…vlw

adicionei essa parte no meu persistence.xml

			<property name="hibernate.c3p0.min_size" value="1"/>
			<property name="hibernate.c3p0.max_size" value="5"/>
			<property name="hibernate.c3p0.timeout" value="1800"/>
			<property name="hibernate.c3p0.max_statements" value="50"/>

Não sei se isso vai resolver.

Estou usando o MySql.

Veja se isso ajuda:

Muito obrigado a todos.

Consegui resolver o preblema adicionando essas linhas na persistence.xml.

   1. <property name="hibernate.c3p0.min_size" value="1"/>  
   2. <property name="hibernate.c3p0.max_size" value="5"/>  
   3. <property name="hibernate.c3p0.timeout" value="1800"/>  
   4. <property name="hibernate.c3p0.max_statements" value="50"/>