Here is the reason.

One Spring session bean has reference to another Spring bean for which declarative transaction management is applied. In fact this reference is reference to Spring AOP proxy which drives transactions. As described in Spring issue SPR-4662 this proxy cannot be serialized when HibernateTransactionManager is used.
This issue was fixed in Spring 3.0 RC1.
In earlier versions the simplest solutions is to eliminate serialization of Spring transactional beans. To solve this problem we just replaced the Spring session bean with alternative implementation.
Original exception thrown:
ERROR [org.jboss.web.tomcat.tc5.session.JBossCacheService] externalizeSession(): exception occurred externalizing session SessionBasedClusteredSession[...]
java.io.NotSerializableException: org.springframework.beans.factory.support.DefaultListableBeanFactory
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
at org.springframework.transaction.interceptor.TransactionInterceptor.writeObject(TransactionInterceptor.java:186)
...
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
at java.util.Hashtable.writeObject(Hashtable.java:813)
...
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
at org.jboss.web.tomcat.tc5.session.SessionBasedClusteredSession.writeExternal(SessionBasedClusteredSession.java:175)
at org.jboss.web.tomcat.tc5.session.JBossCacheService.externalizeSession(JBossCacheService.java:1023)
at org.jboss.web.tomcat.tc5.session.JBossCacheService.putSession(JBossCacheService.java:312)
at org.jboss.web.tomcat.tc5.session.JBossCacheClusteredSession.processSessionRepl(JBossCacheClusteredSession.java:121)
at org.jboss.web.tomcat.tc5.session.JBossCacheManager.processSessionRepl(JBossCacheManager.java:1093)
at org.jboss.web.tomcat.tc5.session.JBossCacheManager.storeSession(JBossCacheManager.java:648)
...
0 comments:
Post a Comment