OBS: Na verdade não resolvi, mas fazer o OSIV com PhaseListener foi bem melhor diminui os erros estranho, descobri que alguns realmente vieram de funções feitas nos objetos q acabam buscando mais itens no banco. E realmente listas (mas essas contornadas com batch size)
Eu tenho uma aplicação “legada”, que faz uso do “Open Session In View” utilizando o seguinte filtro no web.xml
<filter>
<filter-name>conexaoFilter</filter-name>
<filter-class>br.gov.sp.indaiatuba.koch.util.filter.ConexaoHibernateFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>conexaoFilter</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
e eu tenho outros filtros no meu web.xml e por algum erro q eu não sei qual seja são 8 filtros e algumas atualizações de tela geram 8 selects no banco…
segue meu filtro de OSIV o ConexaoHibernateFilter
import java.io.IOException;
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 org.hibernate.SessionFactory;
import br.gov.sp.indaiatuba.koch.util.HibernateUtil;
public class ConexaoHibernateFilter implements Filter {
private SessionFactory sf;
public void destroy() {
}
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
try {
this.sf.getCurrentSession().beginTransaction();
chain.doFilter(servletRequest, servletResponse);
this.sf.getCurrentSession().getTransaction().commit();
} catch (Throwable e) {
try {
if (this.sf.getCurrentSession().getTransaction().isActive()) {
this.sf.getCurrentSession().getTransaction().rollback();
}
} catch (Throwable t) {
t.printStackTrace();
}
throw new ServletException(e);
} finally {
this.sf.getCurrentSession().close();
}
}
public void init(FilterConfig config) throws ServletException {
this.sf = HibernateUtil.getSessionFactory();
}
}
como posso fazer pra que o hibernate não faça 8 selects desnecessários? eu estou usando de forma errada?