Hi everyone,
I added OpenSessionInViewInterceptor into my Spring beans so that I could do lazy init of variables from within my views.
I see that the interceptor is correctly called, and a session is opened:
The main command object is initialized properly, however it has a couple one-to-many relationships that are lazy-init. I refer to these sets within the JSP itself, where I do a forEach loop through them.Code:2005-03-11 00:49:59 2005-03-11 00:49:59,506 DEBUG [org.springframework.web.servlet.DispatcherServlet] - <DispatcherServlet with name 'phatcast' received request for [/phatcast/challenge/1]> 2005-03-11 00:49:59 2005-03-11 00:49:59,506 DEBUG [org.springframework.orm.hibernate.support.OpenSessionInViewInterceptor] - <Opening single Hibernate session in OpenSessionInViewInterceptor> 2005-03-11 00:49:59 2005-03-11 00:49:59,516 DEBUG [org.springframework.orm.hibernate.SessionFactoryUtils] - <Opening Hibernate session> 2005-03-11 00:49:59 2005-03-11 00:49:59,776 DEBUG [net.sf.hibernate.impl.SessionImpl] - <opened session> 2005-03-11 00:49:59 2005-03-11 00:49:59,786 DEBUG [org.springframework.transaction.support.TransactionSynchronizationManager] - <Bound value [org.springframework.orm.hibernate.SessionHolder@12fcdf5] for key [net.sf.hibernate.impl.SessionFactoryImpl@1032bc9] to thread [http-80-Processor24]> 2005-03-11 00:49:59 2005-03-11 00:49:59,786 DEBUG [org.springframework.web.servlet.DispatcherServlet] - <Testing handler adapter [org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter@352d87]> 2005-03-11 00:49:59 2005-03-11 00:49:59,826 DEBUG [net.sf.hibernate.impl.SessionImpl] - <opened session>
However, I keep getting a LazyInitializationException (full error below). I notice that the reason is that right after it initializes the main command object, and before it hits the JSP, it closes all the sessions. This means that within the JSP, the forEach automatically causes the LazyInitializationException.
So two questions:Code:2005-03-11 00:50:03 2005-03-11 00:50:00,647 DEBUG [net.sf.hibernate.impl.SessionImpl] - <done materializing entity [org.phatcast.db.Challenge#1]> 2005-03-11 00:50:03 2005-03-11 00:50:00,647 DEBUG [net.sf.hibernate.impl.SessionImpl] - <initializing non-lazy collections> 2005-03-11 00:50:03 2005-03-11 00:50:00,687 DEBUG [net.sf.hibernate.impl.SessionImpl] - <closing session> 2005-03-11 00:50:03 2005-03-11 00:50:00,687 DEBUG [net.sf.hibernate.impl.SessionImpl] - <disconnecting session> 2005-03-11 00:50:03 2005-03-11 00:50:00,727 DEBUG [net.sf.hibernate.impl.SessionImpl] - <transaction completion> 2005-03-11 00:50:03 2005-03-11 00:50:00,727 DEBUG [org.springframework.transaction.support.TransactionSynchronizationManager] - <Retrieved value [org.springframework.orm.hibernate.SessionHolder@12fcdf5] for key [net.sf.hibernate.impl.SessionFactoryImpl@1032bc9] bound to thread [http-80-Processor24]> 2005-03-11 00:50:03 2005-03-11 00:50:00,727 DEBUG [org.springframework.orm.hibernate.support.OpenSessionInViewInterceptor] - <Flushing single Hibernate session in OpenSessionInViewInterceptor> 2005-03-11 00:50:03 2005-03-11 00:50:00,817 DEBUG [org.springframework.web.servlet.view.InternalResourceViewResolver] - <Cached view 'challenge-view'> 2005-03-11 00:50:03 2005-03-11 00:50:00,817 DEBUG [org.springframework.web.servlet.DispatcherServlet] - <Rendering view [org.springframework.web.servlet.view.JstlView: name 'challenge-view'; URL [/WEB-INF/jsp/challenge-view.jsp]] in DispatcherServlet with name 'phatcast'> 2005-03-11 00:50:03 2005-03-11 00:50:00,938 ERROR [net.sf.hibernate.LazyInitializationException] - <Failed to lazily initialize a collection - no session or session was closed> 2005-03-11 00:50:03 net.sf.hibernate.LazyInitializationException: Failed to lazily initialize a collection - no session or session was closed
1) How do I keep the session open long enough for the JSP to do whatever it calls it needs, from the web layer, and then close it at the end?
2) Is this expected behavior that the session closes before the lazy-init? Do I have to force the initialization in the Spring controller?
Thanks,
Andrew
Code:2005-03-11 00:50:03 2005-03-11 00:50:00,938 ERROR [net.sf.hibernate.LazyInitializationException] - <Failed to lazily initialize a collection - no session or session was closed> 2005-03-11 00:50:03 net.sf.hibernate.LazyInitializationException: Failed to lazily initialize a collection - no session or session was closed 2005-03-11 00:50:03 at net.sf.hibernate.collection.PersistentCollection.initialize(PersistentCollection.java:209) 2005-03-11 00:50:03 at net.sf.hibernate.collection.PersistentCollection.read(PersistentCollection.java:71) 2005-03-11 00:50:03 at net.sf.hibernate.collection.Set.toString(Set.java:217) 2005-03-11 00:50:03 at java.lang.String.valueOf(String.java:2131) 2005-03-11 00:50:03 at java.lang.StringBuffer.append(StringBuffer.java:370) 2005-03-11 00:50:03 at java.util.AbstractMap.toString(AbstractMap.java:589) 2005-03-11 00:50:03 at java.lang.String.valueOf(String.java:2131) 2005-03-11 00:50:03 at java.lang.StringBuffer.append(StringBuffer.java:370) 2005-03-11 00:50:03 at java.util.AbstractMap.toString(AbstractMap.java:589) 2005-03-11 00:50:03 at java.lang.String.valueOf(String.java:2131) 2005-03-11 00:50:04 at java.lang.StringBuffer.append(StringBuffer.java:370) 2005-03-11 00:50:04 at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:231) 2005-03-11 00:50:04 at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:839) 2005-03-11 00:50:04 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:616) 2005-03-11 00:50:04 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:543) 2005-03-11 00:50:04 at org.springframework.web.servlet.FrameworkServlet.serviceWrapper(FrameworkServlet.java:390) 2005-03-11 00:50:04 at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:341) 2005-03-11 00:50:04 at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) 2005-03-11 00:50:04 at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 2005-03-11 00:50:04 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) 2005-03-11 00:50:04 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 2005-03-11 00:50:04 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) 2005-03-11 00:50:04 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 2005-03-11 00:50:04 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 2005-03-11 00:50:04 at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) 2005-03-11 00:50:04 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) 2005-03-11 00:50:04 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 2005-03-11 00:50:04 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 2005-03-11 00:50:04 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) 2005-03-11 00:50:04 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 2005-03-11 00:50:04 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 2005-03-11 00:50:04 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) 2005-03-11 00:50:05 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 2005-03-11 00:50:05 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 2005-03-11 00:50:05 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 2005-03-11 00:50:05 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 2005-03-11 00:50:05 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) 2005-03-11 00:50:05 at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) 2005-03-11 00:50:05 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) 2005-03-11 00:50:05 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) 2005-03-11 00:50:05 at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) 2005-03-11 00:50:05 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) 2005-03-11 00:50:05 at java.lang.Thread.run(Thread.java:534) 2005-03-11 00:50:05 2005-03-11 00:50:01,018 DEBUG [org.springframework.transaction.support.TransactionSynchronizationManager] - <Removed value [org.springframework.orm.hibernate.SessionHolder@12fcdf5] for key [net.sf.hibernate.impl.SessionFactoryImpl@1032bc9] from thread [http-80-Processor24]> 2005-03-11 00:50:05 2005-03-11 00:50:01,018 DEBUG [org.springframework.orm.hibernate.support.OpenSessionInViewInterceptor] - <Closing single Hibernate session in OpenSessionInViewInterceptor> 2005-03-11 00:50:05 2005-03-11 00:50:01,018 DEBUG [org.springframework.orm.hibernate.SessionFactoryUtils] - <Closing Hibernate session> 2005-03-11 00:50:05 2005-03-11 00:50:01,018 DEBUG [net.sf.hibernate.impl.SessionImpl] - <closing session> 2005-03-11 00:50:05 2005-03-11 00:50:01,058 ERROR [org.springframework.web.servlet.DispatcherServlet] - <Could not complete request> 2005-03-11 00:50:05 net.sf.hibernate.LazyInitializationException: Failed to lazily initialize a collection - no session or session was closed 2005-03-11 00:50:05 at net.sf.hibernate.collection.PersistentCollection.initialize(PersistentCollection.java:209) 2005-03-11 00:50:05 at net.sf.hibernate.collection.PersistentCollection.read(PersistentCollection.java:71) 2005-03-11 00:50:05 at net.sf.hibernate.collection.Set.toString(Set.java:217) 2005-03-11 00:50:05 at java.lang.String.valueOf(String.java:2131) 2005-03-11 00:50:05 at java.lang.StringBuffer.append(StringBuffer.java:370) 2005-03-11 00:50:06 at java.util.AbstractMap.toString(AbstractMap.java:589) 2005-03-11 00:50:06 at java.lang.String.valueOf(String.java:2131) 2005-03-11 00:50:06 at java.lang.StringBuffer.append(StringBuffer.java:370) 2005-03-11 00:50:06 at java.util.AbstractMap.toString(AbstractMap.java:589) 2005-03-11 00:50:06 at java.lang.String.valueOf(String.java:2131) 2005-03-11 00:50:06 at java.lang.StringBuffer.append(StringBuffer.java:370) 2005-03-11 00:50:06 at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:231) 2005-03-11 00:50:06 at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:839) 2005-03-11 00:50:06 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:616) 2005-03-11 00:50:06 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:543) 2005-03-11 00:50:06 at org.springframework.web.servlet.FrameworkServlet.serviceWrapper(FrameworkServlet.java:390) 2005-03-11 00:50:06 at org.springframework.web.servlet.FrameworkServlet.serviceWrapper(FrameworkServlet.java:390) 2005-03-11 00:50:06 at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:341) 2005-03-11 00:50:06 at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) 2005-03-11 00:50:06 at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 2005-03-11 00:50:06 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) 2005-03-11 00:50:06 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 2005-03-11 00:50:06 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) 2005-03-11 00:50:06 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 2005-03-11 00:50:06 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 2005-03-11 00:50:06 at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) 2005-03-11 00:50:06 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) 2005-03-11 00:50:07 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 2005-03-11 00:50:07 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 2005-03-11 00:50:07 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) 2005-03-11 00:50:07 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 2005-03-11 00:50:07 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 2005-03-11 00:50:07 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) 2005-03-11 00:50:07 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 2005-03-11 00:50:07 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 2005-03-11 00:50:07 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 2005-03-11 00:50:07 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 2005-03-11 00:50:07 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) 2005-03-11 00:50:07 at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) 2005-03-11 00:50:07 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) 2005-03-11 00:50:07 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) 2005-03-11 00:50:07 at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) 2005-03-11 00:50:07 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) 2005-03-11 00:50:07 at java.lang.Thread.run(Thread.java:534) 2005-03-11 00:50:07 2005-03-11 00:50:01,138 DEBUG [org.springframework.web.context.support.XmlWebApplicationContext] - <Publishing event in context [WebApplicationContext for namespace 'phatcast-servlet']: RequestHandledEvent: url=[/phatcast/challenge/1]; time=[1552ms]; client=[127.0.0.1]; method=[GET]; servlet=[phatcast]; session=[25CA37765C84B40556B6B2C54255772D]; user=[null]; status=[failed: net.sf.hibernate.LazyInitializationException: Failed to lazily initialize a collection - no session or session was closed]> 2005-03-11 00:50:07 2005-03-11 00:50:04,703 DEBUG [net.sf.hibernate.impl.SessionImpl] - <running Session.finalize()> 2005-03-11 00:50:07 2005-03-11 00:50:04,703 DEBUG [net.sf.hibernate.impl.SessionImpl] - <running Session.finalize()>


Reply With Quote