0

I have a tomcat clustered environment with a Liferay 6.2 installation. Each tomcat have many Spring based portlet applications deployed. My problem is when the session replication proccess is running I get ClassNotFoundException related to custom classes of my portlets. Investigating this problem I found that it would be caused by the session replication proccess run in Tomcat core Classloader and my custom classes saved in session are loaded in custom portlets classloaders.

Oct 07, 2016 1:42:08 PM org.apache.catalina.session.StoreBase processExpires
SEVERE: Session: EA336308A2FDB389CA636EDFC537BEB6.lfrtc1; java.lang.ClassNotFoundException: com.pullmantur.portal.cruise.web.result.model.vo.CruiseSearchForm at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:278) at org.apache.catalina.util.CustomObjectInputStream.resolveClass(CustomObjectInputStream.java:74) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1612) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1619) at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1084) at org.apache.catalina.session.JDBCStore.load(JDBCStore.java:657) at org.apache.catalina.session.StoreBase.processExpires(StoreBase.java:157) at org.apache.catalina.session.PersistentManagerBase.processExpires(PersistentManagerBase.java:449) at org.apache.catalina.session.ManagerBase.backgroundProcess(ManagerBase.java:566) at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1352) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1546) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1556) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1556) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1524) at java.lang.Thread.run(Thread.java:745)

Can someone help me to fix this, please?

atrujillofalcon
  • 1,042
  • 1
  • 11
  • 17

1 Answers1

0

If that's the case and session-replication is totally separated from your application classpath you would need to add your classes (those which couldn't be found by Tomcat) to Tomcat's Common classloader (explained here).

It's better to separate those classes into separate jars just with POJOs.

Otherwise, you could store you're objects as something more general (like a HashMap).

bashnesnos
  • 816
  • 6
  • 16