簡體   English   中英

在Tomcat集群環境中獲取ClassNotFoundException反序列化會話屬性

[英]Getting ClassNotFoundException deserializing session attributes in tomcat clustered environment

我有一個安裝了Liferay 6.2的tomcat集群環境。 每個tomcat都部署了許多基於Spring的portlet應用程序。 我的問題是,當會話復制過程正在運行時,我得到與Portlet的定制類相關的ClassNotFoundException。 研究此問題后,我發現這是由在Tomcat核心Classloader中運行的會話復制過程引起的,並且將保存在session中的自定義類加載到自定義portlet類加載器中。

2016年10月7日1:42:08 PM org.apache.catalina.session.StoreBase進程到期
嚴重:會話:EA336308A2FDB389CA636EDFC537BEB6.lfrtc1; java.lang.ClassNotFoundException:com.pullmantur.portal.cruise.web.result.model.vo.CruiseSearchForm位於org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)位於org.apache.catalina.loader .WebappClassLoader.loadClass(WebappClassLoader.java:1571)(位於java.lang.Class.forName0(本地方法),位於java.lang.Class.forName(Class.java:278),位於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)在java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)在org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1619)在java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) ),位於org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1084) org.apache.catalina.session.StoreBase.processExpires(StoreBase.java:157)上的.apache.catalina.session.JDBCStore.load(JDBCStore.java:657)org.apache.catalina.session.PersistentManagerBase.processExpires(PersistentManagerBase .java:449),位於org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1352),位於org.apache.catalina.session.ManagerBase.backgroundProcess(ManagerBase.java:566)。 org.apache.catalina.core.ContainerBase $ ContainerBackgroundProcessor.processChildren(ContainerBase.java:1556)處的core.ContainerBase $ ContainerBackgroundProcessor.processChildren(ContainerBase.java:1546)在org.apache.catalina.core.ContainerBase $ ContainerBackgroundProcessor.process org.apache.catalina.core.ContainerBase $ ContainerBackgroundProcessor.run(ContainerBase.java:1524)處的ContainerBase.java:1556)java.lang.Thread.run(Thread.java:745)處的ContainerBase.java:1556)

有人可以幫我解決這個問題嗎?

如果是這種情況,並且會話復制與您的應用程序類路徑完全分開,則需要將您的類(Tomcat無法找到的類)添加到Tomcat的Common類加載器( 在此進行說明 )。

最好僅使用POJO將這些類分隔到單獨的jar中。

否則,您可以將對象存儲為更通用的對象(例如HashMap )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM