在tomcat集群环境中反序列化会话属性获取ClassNotFoundException



我有一个tomcat集群环境,安装了Liferay 6.2。每个tomcat都部署了许多基于Spring的portlet应用程序。我的问题是,当会话复制过程运行时,我得到与portlet的自定义类相关的ClassNotFoundException。在调查这个问题时,我发现它是由在Tomcat核心Classloader中运行的会话复制过程引起的,而保存在会话中的自定义类是在自定义portlet类加载器中加载的。

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.CruiseSearchFormorg.apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.java: 1720)org.apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.java: 1571). lang . class。forName0(本地方法)java.lang.Class.forName (Class.java: 278)org.apache.catalina.util.CustomObjectInputStream.resolveClass (CustomObjectInputStream.java: 74)java.io.ObjectInputStream.readNonProxyDesc (ObjectInputStream.java: 1612)java.io.ObjectInputStream.readClassDesc (ObjectInputStream.java: 1517)java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java: 1771)java.io.ObjectInputStream.readObject0 (ObjectInputStream.java: 1350)java.io.ObjectInputStream.readObject (ObjectInputStream.java: 370)org.apache.catalina.session.StandardSession.readObject (StandardSession.java: 1619)org.apache.catalina.session.StandardSession.readObjectData (StandardSession.java: 1084)org.apache.catalina.session.JDBCStore.load (JDBCStore.java: 657)org.apache.catalina.session.StoreBase.processExpires (StoreBase.java: 157)org.apache.catalina.session.PersistentManagerBase.processExpires (PersistentManagerBase.java: 449)org.apache.catalina.session.ManagerBase.backgroundProcess (ManagerBase.java: 566)org.apache.catalina.core.ContainerBase.backgroundProcess (ContainerBase.java: 1352)org.apache.catalina.core.ContainerBase ContainerBackgroundProcessor.processChildren美元(ContainerBase.java: 1546)org.apache.catalina.core.ContainerBase ContainerBackgroundProcessor.processChildren美元(ContainerBase.java: 1556)org.apache.catalina.core.ContainerBase ContainerBackgroundProcessor.processChildren美元(ContainerBase.java: 1556)org.apache.catalina.core.ContainerBase ContainerBackgroundProcessor.run美元(ContainerBase.java: 1524)java.lang.Thread.run (Thread.java: 745)

有人能帮我修一下这个吗?

如果是这种情况,并且会话复制与应用程序类路径完全分离,则需要将您的类(Tomcat无法找到的那些类)添加到Tomcat的公共类加载器中(在这里解释)。

最好只使用pojo将这些类分离到单独的jar中。

否则,您可以将您的对象存储为更通用的东西(如HashMap)。

最新更新