LazyInitializationException OpenSessionInViewFilter failed to lazily initialize a collection of role
1 resposta
cezbatistao
fala ae galera, tudo bem?
estou com um problema ao utilizar a classe org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
estou utilizando JSF, Facelets, Richfaces, Spring e Hibernate, e ao paginar uma tabela no componente rich:dataTable utilizando o rich:datascroller, lança a exception OpenSessionInViewFilter failed to lazily initialize a collection of role, mas com outras chamadas está funcionando normal, acho q deve ser algum erro com chamadas ajax.
alguem jah passou por este tipo de problema e tem alguma solução?
pesquisando um pouco mais a fundo achei uma solução para o problema, agora tah funfando zero bala
não estou utilizando o a implementação do OpenSessionInView do Spring e acabei utilizando um outro filtro, segue abaixo para caso alguem precise tb
packagebr.com.carlox.projeto.web.filter;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpSession;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.hibernate.FlushMode;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.springframework.dao.DataAccessResourceFailureException;importorg.springframework.orm.hibernate3.SessionFactoryUtils;importorg.springframework.orm.hibernate3.SessionHolder;importorg.springframework.transaction.support.TransactionSynchronizationManager;importorg.springframework.web.context.WebApplicationContext;importorg.springframework.web.context.support.WebApplicationContextUtils;publicclassKeepSessionPerPageimplementsFilter{privatestaticLoglog=LogFactory.getLog(KeepSessionPerPage.class);publicstaticfinalStringDEFAULT_SESSION_FACTORY_NAME="sessionFactory";publicstaticfinalStringHIBERNATE_SESSION_KEY="hibernateSession";publicstaticfinalStringHIBERNATE_SCOPE_KEY="hibernateCurrentSessionScope";privatestaticfinalStringHIBERNATE_FLUSH_MODE_KEY="FlushMode";privatestaticfinalStringHIBERNATE_SESSION_FACTORY_REFERENCE_KEY="SessionFactoryReference";privateSessionFactorysessionFactory;privateFlushModeflushMode=FlushMode.MANUAL;publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{HttpServletRequesthttpRequest=(HttpServletRequest)request;HttpSessionhttpSession=((HttpServletRequest)request).getSession();IntegernewResourceCode=getNewPageCode(httpRequest);booleanparticipate=false;booleancreateNewSession=outOfCurrentScope(newResourceCode,httpSession);if(TransactionSynchronizationManager.hasResource(sessionFactory)){participate=true;}else{Sessionsession;SessionkeptSession=(org.hibernate.classic.Session)httpSession.getAttribute(HIBERNATE_SESSION_KEY);if(keptSession==null){log.debug("No session kept");log.info("Opening new session for page: "+httpRequest.getRequestURL());session=getSession(sessionFactory);}elseif(keptSession!=null&&createNewSession){log.debug("Closing current session");SessionFactoryUtils.closeSession(keptSession);log.info("Opening new session for page: "+httpRequest.getRequestURL());session=getSession(sessionFactory);}elsesession=keptSession;TransactionSynchronizationManager.bindResource(sessionFactory,newSessionHolder(session));try{chain.doFilter(request,response);}finally{if(!participate){log.debug("Unbinding session");SessionHoldersessionHolder=(SessionHolder)TransactionSynchronizationManager.unbindResource(sessionFactory);httpSession.setAttribute(HIBERNATE_SESSION_KEY,sessionHolder.getSession());httpSession.setAttribute(HIBERNATE_SCOPE_KEY,newResourceCode);}}}}publicvoidinit(FilterConfigfilterConfig)throwsServletException{StringsessionFactoryRef=filterConfig.getInitParameter(HIBERNATE_SESSION_FACTORY_REFERENCE_KEY);if(sessionFactoryRef==null){sessionFactoryRef=DEFAULT_SESSION_FACTORY_NAME;}WebApplicationContextwebAppContext=WebApplicationContextUtils.getWebApplicationContext(filterConfig.getServletContext());sessionFactory=(SessionFactory)webAppContext.getBean(sessionFactoryRef,SessionFactory.class);StringflushModeParam=filterConfig.getInitParameter(HIBERNATE_FLUSH_MODE_KEY);if(flushModeParam==null){return;}elseif(flushModeParam.equals("ALWAYS")){flushMode=FlushMode.ALWAYS;}elseif(flushModeParam.equals("AUTO")){flushMode=FlushMode.AUTO;}elseif(flushModeParam.equals("COMMIT")){flushMode=FlushMode.COMMIT;}elseif(flushModeParam.equals("MANUAL")){flushMode=FlushMode.MANUAL;}elseif(flushModeParam.equals("NEVER")){flushMode=FlushMode.MANUAL;// FlushMode.NEVER esta deprecated utilizar FlushMode.MANUAL.}}publicvoiddestroy(){}privateIntegergetNewPageCode(HttpServletRequestrequest){return(Integer)request.getRequestURL().toString().hashCode();}privatebooleanoutOfCurrentScope(IntegernewResourceCode,HttpSessionhttpSession){IntegercurrentResourceCode=(Integer)httpSession.getAttribute(HIBERNATE_SCOPE_KEY);if(currentResourceCode==null){log.debug("No scope found");returntrue;}else{log.debug("Current page code: "+currentResourceCode);log.debug("New page code: "+newResourceCode);if(currentResourceCode.equals(newResourceCode)){log.debug("Request is in current session scope");returnfalse;}else{log.debug("Request is out of current session scope");returntrue;}}}privateSessiongetSession(SessionFactorysessionFactory)throwsDataAccessResourceFailureException{Sessionsession=SessionFactoryUtils.getSession(sessionFactory,true);session.setFlushMode(flushMode);returnsession;}}