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 [email protected]
http://www.boatersline.com
_______________________________________________
resin-interest mailing list
[email protected]
http://maillist.caucho.com/mailman/listinfo/resin-interest