|
From: March, A. <am...@so...> - 2005-01-29 18:55:18
|
Unfortunately, this is not the case here. We are using jmeter with unauthenticated requests and therefore put nothing in the httpsession. Additionally, your example should take place with as little as 2 requests: one fetching the object and sticking it into the HttpSession, the other trying to initialize its collections. In our case, we have to create a decent amount of load (~30 pages/sec) for the errors to occur. Any other ideas? =20 ________________________________ From: spr...@li... [mailto:spr...@li...] On Behalf Of Juergen Hoeller Sent: Saturday, January 29, 2005 2:44 AM To: spr...@li... Subject: RE: [Springframework-developer] Non Thread-safe hibernate session =20 Actually, this can happen without either Spring or the ThreadLocal mechanism breaking: One of your persistent objects might hold a lazy persistent collection, which holds a reference to the Session that originally loaded it. =20 If you put such a persistent object into the HttpSession, for example, the original request that loaded the object (in thread TPProcessor1) will have completed and thus the Hibernate Session have been closed. Now, if you take your persistent object out of the HttpSession again in a new request (in thread TPProcessor7) and try to access it lazy collection, it's gonna fail because the original Session has been closed. =20 So the "leak" where a Session reference got out of its original request/thread context is your persistent object in the HttpSession here. This is a well-known problem: To make lazy loading work here, you need to attach the persistent object to the new Hibernate Session (via lock or saveOrUpdate). =20 Juergen =20 =20 -----Original Message----- From: spr...@li... [mailto:spr...@li...]On Behalf Of March, Andres Sent: Friday, January 28, 2005 8:27 PM To: spr...@li... Subject: [Springframework-developer] Non Thread-safe hibernate session As you can see below, a thread, other than the one that had the session created for it, tries to access a session but it has been closed by the valid owner thread. This only occurs under decent load. There must be some thread safety issue in Spring or the whole ThreadLocal idea goes out the window. Does anybody have any idea how this could occur? I don't see how I could be misinterpreting this trace. =20 FATAL (SessionImpl.java:528) - Constructor for session: net.sf.hibernate.impl.SessionImpl@b72884 on thread : TP-Processor1 FATAL (SessionFactoryImpl.java:342) - Session : net.sf.hibernate.impl.SessionImpl@b72884 created for Thread : TP-Processor1 ...later on...=20 closing session : net.sf.hibernate.impl.SessionImpl@b72884 and conn: com.mchange.v2.c3p0.impl.NewProxyConnection@4ad009 on Thread : TP-Processor1 ...later on... net.sf.hibernate.HibernateException: Session is closed : net.sf.hibernate.impl.SessionImpl@b72884 on thread : TP-Processor7 at net.sf.hibernate.impl.SessionImpl.connection(SessionImpl.java:3313) at net.sf.hibernate.proxy.LazyInitializer.initialize(LazyInitializer.java:4 7) at net.sf.hibernate.proxy.LazyInitializer.initializeWrapExceptions(LazyInit ializer.java:60) at net.sf.hibernate.proxy.LazyInitializer.getImplementation(LazyInitializer .java:164) at net.sf.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializ er.java:108) at com.sony.soe.guilds.model.GameCharacter$$EnhancerByCGLIB$$25b6cd13.getBi oImage(<generated>) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav a:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor Impl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.apache.velocity.runtime.parser.node.PropertyExecutor.execute(Propert yExecutor.java:111) at org.apache.velocity.util.introspection.UberspectImpl$VelGetterImpl.invok e(UberspectImpl.java:300) at org.apache.velocity.runtime.parser.node.ASTIdentifier.execute(ASTIdentif ier.java:157) at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReferenc e.java:175) at org.apache.velocity.runtime.parser.node.ASTReference.evaluate(ASTReferen ce.java:307) at org.apache.velocity.runtime.parser.node.ASTNotNode.evaluate(ASTNotNode.j ava:47) at org.apache.velocity.runtime.parser.node.ASTExpression.evaluate(ASTExpres sion.java:46) at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfState ment.java:69) at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.jav a:231) at org.apache.velocity.runtime.directive.Parse.render(Parse.java:181) at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective .java:116) at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:56 ) at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfState ment.java:71) at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:56 ) at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfState ment.java:71) at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.jav a:231) at org.apache.velocity.runtime.directive.Parse.render(Parse.java:181) at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective .java:116) at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.jav a:231) at org.apache.velocity.Template.merge(Template.java:256) at com.sony.soe.web.mvc.VelocityView.go(VelocityView.java:181) at com.sony.soe.guilds.view.VelocityLayout.go(VelocityLayout.java:135) at org.infohazard.maverick.flow.CommandBase.go(CommandBase.java:79) at org.infohazard.maverick.Dispatcher.service(Dispatcher.java:345) at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica tionFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt erChain.java:157) at net.sf.acegisecurity.ui.AbstractIntegrationFilter.doFilter(AbstractInteg rationFilter.java:170) at com.sony.soe.guilds.controller.SecurityFilter.doFilter(SecurityFilter.ja va:118) at net.sf.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.j ava:88) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica tionFilterChain.java:186) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt erChain.java:157) at org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilt erInternal(OpenSessionInViewFilter.java:17 1) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequ estFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica tionFilterChain.java:186) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt erChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv e.java:214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo ntext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5 20) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardCon textValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv e.java:152) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo ntext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5 20) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java :137) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo ntext.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java :117) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo ntext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5 20) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve. java:109) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo ntext.java:104) at org.apache.catalina.valves.RequestDumperValve.invoke(RequestDumperValve. java:169) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo ntext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5 20) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:296) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:372) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:694) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java: 626) at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:807) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool .java:644) at java.lang.Thread.run(Thread.java:534) =20 ----------------------------------------- Andres March Platform - Apps Engineering Sony Online Entertainment desk: 858.577.3373 cell: 619.519.1519 =20 |