Hi Mattias, Thanks for the help. That did it.
It is unfortunate that Hessian serialization does this because a lot Web development is based on hibernate. We'd have to create non-hibernate clones of our persistent objects for storing in the session. Keith On 03/28/2011 02:30 AM, Mattias Jiderhamn wrote: > By default Resin 4 uses Hessian for serialization of session data. > Hessian tries to traverse uninitialized Hibernate associations by > reflection, causing LazyInitializationException when serializing. > For that reason, we are using Java serialization instead of Hessian > for session data. > > Here is how to configure: > > <session-config> > ... > <serialization-type>java</serialization-type> > </session-config> > > > </Mattias> > > Keith Fetterman wrote (2011-03-25 23:42): >> We have a custom Authenticator that extends resin's >> com.caucho.server.security.AbstractAuthenticator. In our custom >> authenticator, I am storing a Hibernate object that contains a HashSet >> of other Hibernate objects in my HTTP session. When I restart Resin >> (Resin 4.0.16), I am getting the following stack trace that is caused by >> a "org.hibernate.LazyInitializationException" when I access the first >> Web page after the server is started. >> >> It looks like resin is deserializing the Hibernate object from resin's >> session persistence and then trying to populate the Set of associated >> Hibernate objects, but the Set object that originally contained the >> associated Hibernate objects does not exist. I am guessing that is the >> problem because I see the following cause: >>> [11-03-25 14:56:04.683] {http://*:8082-1} >>> com.caucho.hessian.io.HessianFieldException: >>> com.marinersupply.common.authentication.ApplicationUser.roles: >>> java.util.Set cannot be assigned from null >> I am using the java.util.HashSet to contain the associated Hibernate >> objects. If this is the problem, why isn't resin also serializing the >> HashSet? >> >> Doesn't Resin's session serialization serialize objects associated with >> objects that are in the HTTP session? >> >> Does resin's session persistence mechanism invoke the methods on the >> objects stored in the session when it serializes or unserializes the >> objects from the session store? >> >> The reason that I ask this problem is that I get the following >> Exception: >>> Caused by: org.hibernate.LazyInitializationException: failed to >>> lazily initialize a collection, no session or session was closed >> Why is resin invoking Hibernate to perform a lazy load of associated >> objects on my hibernate object? I've seen cause the error above when it >> tried to persist the hibernate object at the end of processing an HTTP >> request. We use a servlet filter to close the Hibernate session. It >> looks like the act of persisting the session is occurring after resin >> has returned from this filter because the Hibernate session was closed. >> My question again is "why is resin invoking the methods on the object >> that in turn makes a request to hibernate to lazy load the associated >> objects?" >> >> Is resin using Hibernate as a part of its default session persistence >> implementation? >> >> We didn't see any of these errors when we were running Resin 3.0.28. >> But, in Resin 3.0.28, we were using Resin's MySQL session persistence. >> In resin 4.0.16, we are using Resin's default session persistence store. >> >> I would appreciate any ideas on what might be going so I can track down >> the problem. >> >> Thanks, >> Keith >>> [11-03-25 14:56:04.680] {http://*:8082-1} >>> com.caucho.hessian.io.HessianFieldException: >>> com.marinersupply.common.authentication.ApplicationUser.roles: >>> java.util.Set cannot be assigned from null >>> at >>> com.caucho.hessian.io.UnsafeDeserializer.logDeserializeError(UnsafeDeserializer.java:790) >>> >>> >>> at >>> com.caucho.hessian.io.UnsafeDeserializer$ObjectFieldDeserializer.deserialize(UnsafeDeserializer.java:421) >>> >>> >>> at >>> com.caucho.hessian.io.UnsafeDeserializer.readObject(UnsafeDeserializer.java:239) >>> >>> >>> at >>> com.caucho.hessian.io.UnsafeDeserializer.readObject(UnsafeDeserializer.java:150) >>> >>> >>> at >>> com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2212) >>> >>> >>> at >>> com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1719) >>> at >>> com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1703) >>> at >>> com.caucho.hessian.io.UnsafeDeserializer$ObjectFieldDeserializer.deserialize(UnsafeDeserializer.java:417) >>> >>> >>> at >>> com.caucho.hessian.io.UnsafeDeserializer.readObject(UnsafeDeserializer.java:239) >>> >>> >>> at >>> com.caucho.hessian.io.UnsafeDeserializer.readObject(UnsafeDeserializer.java:150) >>> >>> >>> at >>> com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2212) >>> >>> >>> at >>> com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2133) >>> at >>> com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2117) >>> at >>> com.caucho.server.session.HessianSessionDeserializer.readObject(HessianSessionDeserializer.java:79) >>> >>> >>> at >>> com.caucho.server.session.SessionImpl.load(SessionImpl.java:686) >>> at >>> com.caucho.server.session.SessionImpl.load(SessionImpl.java:642) >>> at >>> com.caucho.server.session.SessionManager.createSession(SessionManager.java:1332) >>> >>> >>> at >>> com.caucho.server.http.AbstractCauchoRequest.createSession(AbstractCauchoRequest.java:255) >>> >>> >>> at >>> com.caucho.server.http.AbstractCauchoRequest.getSession(AbstractCauchoRequest.java:198) >>> >>> >>> at >>> com.caucho.security.AbstractLogin.findSavedUser(AbstractLogin.java:352) >>> at >>> com.caucho.security.AbstractLogin.getUserPrincipal(AbstractLogin.java:251) >>> >>> at >>> com.caucho.server.http.AbstractCauchoRequest.getUserPrincipal(AbstractCauchoRequest.java:502) >>> >>> >>> at >>> com.caucho.server.security.RoleConstraint.isAuthorized(RoleConstraint.java:73) >>> >>> >>> at >>> com.caucho.server.security.SecurityFilterChain.doFilter(SecurityFilterChain.java:103) >>> >>> >>> at >>> com.caucho.server.cache.ProxyCacheFilterChain.doRequestCacheable(ProxyCacheFilterChain.java:245) >>> >>> >>> at >>> com.caucho.server.cache.ProxyCacheFilterChain.doFilter(ProxyCacheFilterChain.java:188) >>> >>> >>> at >>> com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:156) >>> >>> >>> at >>> com.caucho.server.webapp.AccessLogFilterChain.doFilter(AccessLogFilterChain.java:95) >>> >>> >>> at >>> com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:287) >>> >>> >>> at >>> com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:792) >>> at >>> com.caucho.network.listen.TcpSocketLink.dispatchRequest(TcpSocketLink.java:730) >>> >>> >>> at >>> com.caucho.network.listen.TcpSocketLink.handleRequest(TcpSocketLink.java:689) >>> >>> >>> at >>> com.caucho.network.listen.TcpSocketLink.handleRequestsImpl(TcpSocketLink.java:669) >>> >>> >>> at >>> com.caucho.network.listen.TcpSocketLink.handleRequests(TcpSocketLink.java:617) >>> >>> >>> at >>> com.caucho.network.listen.AcceptTask.doTask(AcceptTask.java:104) >>> at >>> com.caucho.network.listen.ConnectionReadTask.runThread(ConnectionReadTask.java:98) >>> >>> >>> at >>> com.caucho.network.listen.ConnectionReadTask.run(ConnectionReadTask.java:81) >>> >>> >>> at >>> com.caucho.network.listen.AcceptTask.run(AcceptTask.java:67) >>> at >>> com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:164) >>> at >>> com.caucho.env.thread.ResinThread.run(ResinThread.java:130) >>> Caused by: >>> org.hibernate.LazyInitializationException: failed to lazily initialize >>> a collection, no session or session was closed >>> at >>> org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358) >>> >>> >>> at >>> org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350) >>> >>> >>> at >>> org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343) >>> >>> >>> at >>> org.hibernate.collection.PersistentSet.add(PersistentSet.java:189) >>> at >>> com.caucho.hessian.io.CollectionDeserializer.readLengthList(CollectionDeserializer.java:93) >>> >>> >>> at >>> com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1770) >>> at >>> com.caucho.hessian.io.UnsafeDeserializer$ObjectFieldDeserializer.deserialize(UnsafeDeserializer.java:417) >>> >>> >>> ... 38 more >>> [11-03-25 14:56:04.683] {http://*:8082-1} >>> com.caucho.hessian.io.HessianFieldException: >>> com.marinersupply.common.authentication.ApplicationUser.roles: >>> java.util.Set cannot be assigned from null >>> at >>> com.caucho.hessian.io.UnsafeDeserializer.logDeserializeError(UnsafeDeserializer.java:790) >>> >>> >>> at >>> com.caucho.hessian.io.UnsafeDeserializer$ObjectFieldDeserializer.deserialize(UnsafeDeserializer.java:421) >>> >>> >>> at >>> com.caucho.hessian.io.UnsafeDeserializer.readObject(UnsafeDeserializer.java:239) >>> >>> >>> at >>> com.caucho.hessian.io.UnsafeDeserializer.readObject(UnsafeDeserializer.java:150) >>> >>> >>> at >>> com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2212) >>> >>> >>> at >>> com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1719) >>> at >>> com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1703) >>> at >>> com.caucho.hessian.io.UnsafeDeserializer$ObjectFieldDeserializer.deserialize(UnsafeDeserializer.java:417) >>> >>> >>> at >>> com.caucho.hessian.io.UnsafeDeserializer.readObject(UnsafeDeserializer.java:239) >>> >>> >>> at >>> com.caucho.hessian.io.UnsafeDeserializer.readObject(UnsafeDeserializer.java:150) >>> >>> >>> at >>> com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2212) >>> >>> >>> at >>> com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2133) >>> at >>> com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2117) >>> at >>> com.caucho.server.session.HessianSessionDeserializer.readObject(HessianSessionDeserializer.java:79) >>> >>> >>> at >>> com.caucho.server.session.SessionImpl.load(SessionImpl.java:686) >>> at >>> com.caucho.server.session.SessionImpl.load(SessionImpl.java:642) >>> at >>> com.caucho.server.session.SessionManager.createSession(SessionManager.java:1332) >>> >>> >>> at >>> com.caucho.server.http.AbstractCauchoRequest.createSession(AbstractCauchoRequest.java:255) >>> >>> >>> at >>> com.caucho.server.http.AbstractCauchoRequest.getSession(AbstractCauchoRequest.java:198) >>> >>> >>> at >>> com.caucho.server.http.AbstractCauchoRequest.getSession(AbstractCauchoRequest.java:176) >>> >>> >>> at >>> com.marinersupply.common.authentication.ApplicationUserAuthenticator.getUserPrincipal(ApplicationUserAuthenticator.java:103) >>> >>> >>> at >>> com.caucho.server.security.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:77) >>> >>> >>> at >>> com.caucho.security.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:218) >>> >>> >>> at >>> com.caucho.security.BasicLogin.getUserPrincipalImpl(BasicLogin.java:124) >>> >>> at >>> com.caucho.security.AbstractLogin.getUserPrincipal(AbstractLogin.java:261) >>> >>> at >>> com.caucho.server.http.AbstractCauchoRequest.getUserPrincipal(AbstractCauchoRequest.java:502) >>> >>> >>> at >>> com.caucho.server.security.RoleConstraint.isAuthorized(RoleConstraint.java:73) >>> >>> >>> at >>> com.caucho.server.security.SecurityFilterChain.doFilter(SecurityFilterChain.java:103) >>> >>> >>> at >>> com.caucho.server.cache.ProxyCacheFilterChain.doRequestCacheable(ProxyCacheFilterChain.java:245) >>> >>> >>> at >>> com.caucho.server.cache.ProxyCacheFilterChain.doFilter(ProxyCacheFilterChain.java:188) >>> >>> >>> at >>> com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:156) >>> >>> >>> at >>> com.caucho.server.webapp.AccessLogFilterChain.doFilter(AccessLogFilterChain.java:95) >>> >>> >>> at >>> com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:287) >>> >>> >>> at >>> com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:792) >>> at >>> com.caucho.network.listen.TcpSocketLink.dispatchRequest(TcpSocketLink.java:730) >>> >>> >>> at >>> com.caucho.network.listen.TcpSocketLink.handleRequest(TcpSocketLink.java:689) >>> >>> >>> at >>> com.caucho.network.listen.TcpSocketLink.handleRequestsImpl(TcpSocketLink.java:669) >>> >>> >>> at >>> com.caucho.network.listen.TcpSocketLink.handleRequests(TcpSocketLink.java:617) >>> >>> >>> at >>> com.caucho.network.listen.AcceptTask.doTask(AcceptTask.java:104) >>> at >>> com.caucho.network.listen.ConnectionReadTask.runThread(ConnectionReadTask.java:98) >>> >>> >>> at >>> com.caucho.network.listen.ConnectionReadTask.run(ConnectionReadTask.java:81) >>> >>> >>> at >>> com.caucho.network.listen.AcceptTask.run(AcceptTask.java:67) >>> at >>> com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:164) >>> at >>> com.caucho.env.thread.ResinThread.run(ResinThread.java:130) >>> Caused by: >>> org.hibernate.LazyInitializationException: failed to lazily initialize >>> a collection, no session or session was closed >>> at >>> org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358) >>> >>> >>> at >>> org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350) >>> >>> >>> at >>> org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343) >>> >>> >>> at >>> org.hibernate.collection.PersistentSet.add(PersistentSet.java:189) >>> at >>> com.caucho.hessian.io.CollectionDeserializer.readLengthList(CollectionDeserializer.java:93) >>> >>> >>> at >>> com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1770) >>> at >>> com.caucho.hessian.io.UnsafeDeserializer$ObjectFieldDeserializer.deserialize(UnsafeDeserializer.java:417) >>> >>> >>> ... 42 more > > -- ----------------------------------------------------------------- Keith Fetterman Direct: 206-319-9434 Mariner Supply, Inc. 206-780-5670 http://www.go2marine.com kfetter...@go2marine.com http://www.boatersline.com _______________________________________________ resin-interest mailing list resin-interest@caucho.com http://maillist.caucho.com/mailman/listinfo/resin-interest