Senhores,
Uma pergunta bem de iniciante, qual a real necessidade desse código?
Entendi que é necessário para abrir uma transação e logo em seguida com o comit salvar os estados das entidades na base de dados…mas ainda nao ficou claro pq então dou um close, sendo que o meu save/update/ ect…ainda nao foram chamados!!!
E outra em termos de performance isso não é ruim? Pois estou debugando e tudo que faço esse código é chamado!!
public class ConexaoHibernateFilter implements Filter{
private SessionFactory sf;
public void destroy() {
}
public void doFilter(ServletRequest servletFilter, ServletResponse servletResponse,
FilterChain chain) throws IOException, ServletException {
try {
this.sf.getCurrentSession().beginTransaction();
chain.doFilter(servletFilter, servletResponse);
this.sf.getCurrentSession().getTransaction().commit();
this.sf.getCurrentSession().close();
} catch (Throwable ex) {
try {
if(this.sf.getCurrentSession().getTransaction().isActive()){
this.sf.getCurrentSession().getTransaction().rollback();
}
} catch (Throwable t) {
t.printStackTrace();
}
throw new ServletException(ex.getMessage());
}
}
public void init(FilterConfig conf) throws ServletException {
this.sf = HibernateUtil.getSession();
}
}