Hi Folks, I found the cause of the problem. Nothing related to Wicket session persistence.
When session persistence is configured in tomcat context.xml files the persisted session will be deserialized in a Classloader where the WEB-INF/lib or WEB-INF/classes are not available, only if you put the necessary jars in the tomcat shared-libs folder or if the instances stored in the web session are from java core, like the wrappers (java.lang etc). Since Wicket makes use of web session putting in it specific classes of the framework, which are only available at WEB-INF/lib, the ClassNotFoundException happens. The solution is configure the session manager in the application specific context.xml file. Only like this you have the guarantee that the classes in WEB-INF/lib and WEB-INF/classes are available. cheers, Joselito. 2011/8/29 Joselito Lobo <[email protected]> > Hello guys, > > I'm running a wicket application with Tomcat 6 and I'm having problems with > Tomcat session persistence across restarts. > > More specifically, apparently the session is persisted normally but just 1 > minute later, > when the server is trying to deserialize the session persisted, I got the > following exception: > > java.lang.ClassNotFoundException: > org.apache.wicket.protocol.http.SecondLevelCacheSessionStore$SecondLevelCachePageMap > at > org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645) > at > org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) > at java.lang.Class.forName0(Native Method) > at java.lang.Class.forName(Class.java:247) > at > org.apache.catalina.util.CustomObjectInputStream.resolveClass(CustomObjectInputStream.java:75) > at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574) > at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731) > at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) > at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) > at > org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1475) > at > org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:977) > at org.apache.catalina.session.FileStore.load(FileStore.java:296) > at org.apache.catalina.session.StoreBase.processExpires(StoreBase.java:195) > at > org.apache.catalina.session.PersistentManagerBase.processExpires(PersistentManagerBase.java:563) > at > org.apache.catalina.session.ManagerBase.backgroundProcess(ManagerBase.java:685) > at > org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1316) > at > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601) > at > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610) > at > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610) > at > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590) > at java.lang.Thread.run(Thread.java:662) > > > Here is the configuration of the Tomcat session persistence, I'm using > FileStore. > > <Manager className='org.apache.catalina.session.PersistentManager' > saveOnRestart='true' > maxActiveSessions='-1' > minIdleSwap='0' > maxIdleSwap='60' > maxIdleBackup='0'> > <Store className='org.apache.catalina.session.FileStore' > directory='/home/tomcat/persistence' /> > </Manager> > > > The two solutions I have found googling this I cant use: > > - Disabling tomcat persistence : I can't because of my deployment > environment, tomcat under loadbalancers (pound) > - Put wicket libs in the shared-libs of Tomcat: it's not a solution > > > Has anyone dealed with a problem like this? > > cheers, > > Joselito. >
