Eu criei a abertura e fechando do EntityManager por requisição num Filter. Conforme segue abaixo.
@WebFilter(servletNames ={"Faces Servlet"})
public class JPAFilter implements Filter{
private EntityManagerFactory factory;
@Override
public void destroy() {
// TODO Auto-generated method stub
this.factory.close();
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// CHEGADA
EntityManager manager = this.factory.createEntityManager();
request.setAttribute("EntityManager", manager);
manager.getTransaction().begin();
// FACES SERVLET
chain.doFilter(request,response);
// SAÍDA
try {
manager.getTransaction().commit();
}catch(Exception e) {
manager.getTransaction().rollback();
} finally {
manager.close();
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
this.factory = Persistence.createEntityManagerFactory("portal");
}
}
Mas quando o sistema fica um tempo ocioso sem utilizar ele começa a dar um erro - org.hibernate.exception.JDBCConnectionException: could not extract ResultSet
O eclipse mostra que o erro esta na linha do filter - manager.getTransaction().rollback();
Alguém poderia me ajudar e me dizer o que seria esse erro ou porque ele esta sendo causado?