Olá Pessoal,
Será que poderiam me dar uma forcinha… Eu tenho esse filtro abaixo que abre e fecha a sessão do hibernate automaticamente, ou seja, eu não preciso ficar controlando o open e close, no código dos meus DAOs, bom tudo estava tranquilo, até eu colocar um dos meus ManagedBean como @ViewEscoped, na minha página eu tenho um <p:selectOne>, que busca uma lista de Estados no BD e quando selecionado o Estado ele lista as Cidades desse Estado, nesse exato momento é que eu recebo a exception abaixo:
Esse é o meu Filtro para Conexões com Hibernate:
public class ConexaoHibernateFilter implements Filter {
private SessionFactory sf;
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
Transaction trx = null;
Session session = null;
try {
session = this.sf.getCurrentSession();
trx = session.beginTransaction();
chain.doFilter(servletRequest, servletResponse);
trx.commit();
} catch (Throwable ex) {
ex.printStackTrace();
if (trx != null && trx.isActive()){
trx.rollback();
}
throw new ServletException(ex);
} finally {
if (session != null && session.isOpen()){
session.close();
}
}
}
Essa é a Exception:
Abr 26, 2013 10:36:03 AM com.sun.faces.lifecycle.ProcessValidationsPhase execute
WARNING: /cadastro-candidato.xhtml @137,146 value="#{portalBean.estados}": Error reading 'estados' on type br.com.sysline.views.PortalBean
javax.el.ELException: /cadastro-candidato.xhtml @137,146 value="#{portalBean.estados}": Error reading 'estados' on type br.com.sysline.views.PortalBean
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UISelectItems.getValue(UISelectItems.java:129)
........
........
Caused by: org.hibernate.SessionException: Session is closed!
at org.hibernate.internal.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:129)
at org.hibernate.internal.SessionImpl.createCriteria(SessionImpl.java:1554)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
Ele preenche a selectOne de Cidades via ajax, será que eu tenho que forçar a abertura da session do hibernate lá no meu DAO?
Isso significa que ele não está passando pelo Filtro, correto?
Valeu pessoal…
Abs.
Marcelo