【发布时间】:2017-09-02 00:34:15
【问题描述】:
我正在尝试让 Tomcat 在关闭时保留我的会话。我已经处理了我存储在会话中的所有内容都是可序列化的要求,并且当我在 Eclipse 下运行 Tomcat 时,这工作正常:当代码更改迫使 Eclipse 重新加载 webapp 时,会话现在仍然存在。
但是,当我尝试在独立的 Tomcat 中做同样的事情时,我遇到了问题。
我已取消注释 ${catalina.base}/conf/context.xml 中的 Manager 元素并将路径名属性设置为 ${catalina.base}/SESSIONS.ser,然后在关闭时,我看到了 SESSIONS。 ser 文件出现。到目前为止,一切顺利。
但是当我重启 Tomcat 时,出现在 catalina.out 中:
[...]
06-Apr-2017 13:39:52.570 SEVERE [localhost-startStop-1] org.apache.catalina.session.StandardManager.startInternal Exception loading sessions from persistent storage
java.lang.ClassNotFoundException: com.mycompany.wtt.util.LogoutLogger
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285)
[...]
06-Apr-2017 13:39:54.158 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /data/tokken/apache-tomcat-8.5.12/webapps/wtt.war has finished in 1,134 ms
[...]
com.mycompany.wtt.util.LogoutLogger 类是 wtt.war webapp 的一部分,显然,Tomcat 在加载 webapp 之前尝试反序列化 webapp 的会话。看起来这意味着我不能在我的会话中放置特定于应用程序的类,这是一个大问题,因为我的一些逻辑依赖于能够做到这一点,并通过实现 javax.servlet.http 创建自定义行为.HttpSessionActivationListener。
有没有办法让 Tomcat 在加载 webapps 后反序列化会话?
版本:Tomcat 8.5.12、Java 1.8.0_121。
【问题讨论】:
标签: tomcat