0

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

2016 年 10 月 7 日下午 1:42:08 org.apache.catalina.session.StoreBase processExpires
严重:会话: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) 在 java.lang.Class.forName0(Native Method) 在 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.

有人可以帮我解决这个问题吗?

4

1 回答 1

0

如果是这种情况,并且会话复制与您的应用程序类路径完全分离,您需要将您的类(Tomcat 找不到的类)添加到 Tomcat 的 Common 类加载器(在此处解释)。

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

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

于 2016-10-10T12:52:52.530 回答