Boa tarde, estou com um problema no meu hibernate q é o seguinte, faço a busca e o resultado me é retornado, se eu deixo o resultado parado na tela e volto a mexer no site 1h depois por exemplo, o hibernate nao executa mais busca nenhuma no meu mysql e começa a der erro de “rollback failed (read time out)”, isso acontece de vez em quando, se alguem puder me ajudar, provavelmente tem algo errado ao fechar ou abrir a Connection, segue abaixo os codigos do hibernate:
Interceptor para abrir e fechar as conexões:
@RequestScoped
@Intercepts
public class HibernateInterceptor implements Interceptor{
public void intercept(InterceptorStack stack, ResourceMethod method, Object instance)
throws InterceptionException {
Session session = HibernateUtil.openSession();
try {
session.beginTransaction();
stack.next(method, instance);
session.getTransaction().commit();
} finally {
if (HibernateUtil.currentSession().getTransaction().isActive()) {
HibernateUtil.rollback();
}
HibernateUtil.closeCurrentSession();
}
}
public boolean accepts(ResourceMethod method) {
return true;
}
}
HibernateUtil
public class HibernateUtil {
private static SessionFactory factory;
private static ThreadLocal<Session> sessions = new ThreadLocal<Session>();
static {
Configuration cfg = new Configuration();
cfg.configure();
factory = cfg.buildSessionFactory();
}
public static Session openSession(){
sessions.set(factory.openSession());
return sessions.get();
}
public static Session currentSession(){
return sessions.get();
}
public static void closeCurrentSession(){
sessions.get().close();
sessions.set(null);
}
public static void clearSession(){
sessions.get().clear();
}
public static void flushSession(){
sessions.get().flush();
}
public static void rollback(){
sessions.get().getTransaction().rollback();
sessions.get().getTransaction().begin();
}
}