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?