ResultSet fechado [Hibernate/JSF]

9 respostas
cs.santos0

iai pessual, bele?

as vezes na minha aplicação, nas telas onde existe listagens eu recebo uma exceção ao tentar carregar a pagina, dizendo que o ResultSet esta fechado, gostaria mto de saber o pq q isso ocorre, alguem poderia me dar uma ajuda de como eu posso arrumar isso??

Meus metodos de listagem estao nessa linha:

DaoFactory instanciado no construtor (ManagedBean com escopo session)

public ProdutoBean() { this.daoFactory = new DaoFactoryImpl(); }

Listagem:

public DataModel getProdutos() { this.setProdDataModel(new ListDataModel(this.daoFactory.getProdutoDao().listaTudo())); return this.getProdDataModel(); }

o erro é o seguinte:

java.sql.SQLException: Operation not allowed after ResultSet closed at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927) at com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:770) at com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:7001) at com.mchange.v2.c3p0.impl.NewProxyResultSet.next(NewProxyResultSet.java:2859) at org.hibernate.loader.Loader.doQuery(Loader.java:697) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) at org.hibernate.loader.Loader.doList(Loader.java:2220) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) at org.hibernate.loader.Loader.list(Loader.java:2099) at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569) at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283) at br.com.cf.vitrola.dao.DaoImpl.listaTudo(DaoImpl.java:65) at br.com.cf.vitrola.mbean.ProdutoBean.getProdutos(ProdutoBean.java:134) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at javax.el.BeanELResolver.getValue(BeanELResolver.java:62) at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54) at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64) at org.apache.el.parser.AstValue.getValue(AstValue.java:118) at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101) at javax.faces.component.UIData.getValue(UIData.java:582) at org.ajax4jsf.component.UIDataAdaptor.getValue(UIDataAdaptor.java:1624) at org.ajax4jsf.component.SequenceDataAdaptor.getDataModel(SequenceDataAdaptor.java:65) at org.ajax4jsf.component.SequenceDataAdaptor.createDataModel(SequenceDataAdaptor.java:59) at org.richfaces.component.UIDataTable.createDataModel(UIDataTable.java:120) at org.ajax4jsf.component.UIDataAdaptor.getExtendedDataModel(UIDataAdaptor.java:621) at org.ajax4jsf.component.UIDataAdaptor.setRowKey(UIDataAdaptor.java:339) at org.richfaces.renderkit.AbstractTableRenderer.encodeTableStructure(AbstractTableRenderer.java:138) at org.richfaces.renderkit.html.DataTableRenderer.doEncodeBegin(DataTableRenderer.java:160) at org.richfaces.renderkit.html.DataTableRenderer.doEncodeBegin(DataTableRenderer.java:148) at org.ajax4jsf.renderkit.RendererBase.encodeBegin(RendererBase.java:100) at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:785) at javax.faces.component.UIData.encodeBegin(UIData.java:879) at org.ajax4jsf.component.UIDataAdaptor.encodeBegin(UIDataAdaptor.java:1202) at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:275) at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258) at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:220) at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:215) at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:120) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892) at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:244) at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:174) at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100) at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Thread.java:619)

alguem poderia me dar uma força?

9 Respostas

T

Poste também a classe br.com.cf.vitrola.dao.DaoImpl.listaTudo - o erro está ocorrendo lá, não?

cs.santos0

opa..vlw pela resposta..

meu DaoImpl esta assim:

public class DaoImpl<T> implements Dao<T> {

    private Session session;
    private final Class classe;
    
    public DaoImpl(Session session, Class classe) {
        this.session = session;
        this.classe = classe;
    }

    public List<T> listaTudo() {
        return this.session.createCriteria(this.classe).list();
    }
.......

e a DaoFactoryImpl

public class DaoFactoryImpl implements DaoFactory{

    private Session session;
    private Transaction transaction;

   
    public DaoFactoryImpl() {
        //this.session = HibernateUtil.getSessionFactory().getCurrentSession();
        this.session = HibernateUtil.getSession();
    }

    public Dao<Produto> getProdutoDao() {
        return new DaoImpl<Produto>(this.session, Produto.class);
    }

......

alguem poderia me dizer se tem algo errado?

deadlock

Talvez seja melhor fazer a busca em um método separado e armazenar o resultado em um atributo List da classe. No método getProdutos você construiria o dataModel usando esse atributo sem refazer a busca.

cs.santos0

vc poderia me dar um exemplo?

deadlock

vc poderia me dar um exemplo?

tipo:

private List produtos;

public String pesquisa() {
    produtos = produtoDao.listarTudo();
}

public DataModel getDataModel() {
    return new DataModel(produtos);
}

voce teria um botao executando a action pesquisa() e quando a pagina carregada a tabela chama o getDataModel();

cs.santos0

mas nesse caso ai, eu teria que ter um botão para fazer a listagem…no momento a tela ao ser aberta ja carrega a listagem…mas vlw a dica…

com relação ao meu modelo, tem algo errado nele?..é necessario abrir uma sessao em algum lugar?

deadlock

cs.santos0:
mas nesse caso ai, eu teria que ter um botão para fazer a listagem…no momento a tela ao ser aberta ja carrega a listagem…mas vlw a dica…

com relação ao meu modelo, tem algo errado nele?..é necessario abrir uma sessao em algum lugar?

cara é o seguinte… se você debugar seu código, vai ver que o JSF executa o metodo getDataModel umas 7 vezes (talvez os criadores sejam fãs d’O Rappa) enquanto a pagina de resposta é carregada. Sendo assim, a sua consulta ficando dentro deste método é executada várias vezes tb… Não posso garantir q seja essa a causa do erro, mas posso garantir q vc ganhará um pouco em desempenho.

cs.santos0

huum…é, realmente eu percebi isso msm…entao o jeito é fazer filtros nas telas de listagem e nao começar listando tudo??

vc faz como em seus sistemas?

deadlock

A tabela sempre inicia vazia. O usuário seleciona os parametros de busca e executa a consulta. A estrutura no bean fica como mostrado no exemplo.

Criado 3 de agosto de 2009
Ultima resposta 4 de ago. de 2009
Respostas 9
Participantes 3