java-从持久性存储中加载会话的异常

我对春季诊所的应用程序进行了许多更改。 目前,当我使用eclipse as as ...在服务器上运行时,在tomcat服务器的新实例中启动应用程序时,收到以下错误消息:

SEVERE: Exception loading sessions from persistent storage  

服务器和应用程序随后可以成功启动,但是我想修复导致错误消息的所有内容。 谁能告诉我如何克服此错误消息?

堆栈跟踪不会列出应用程序中的任何文件,因此我不知道在应用程序代码中可以查找该位置的问题。 您可以查看github上的petclinic代码,以查看应用程序的结构,如果这有助于您了解应该在哪里找到问题的话。 这是堆栈跟踪:

INFO  EhCacheManagerFactoryBean - Initializing EhCache CacheManager
INFO  ContextLoader - Root WebApplicationContext: initialization completed in 4376 ms
Dec 16, 2013 2:51:56 PM org.apache.catalina.session.StandardManager doLoad
SEVERE: IOException while loading persisted sessions: java.io.EOFException  
java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
    at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58)
    at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:246)
    at org.apache.catalina.session.StandardManager.load(StandardManager.java:204)
    at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Dec 16, 2013 2:51:56 PM org.apache.catalina.session.StandardManager startInternal
SEVERE: Exception loading sessions from persistent storage  
java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
    at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58)
    at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:246)
    at org.apache.catalina.session.StandardManager.load(StandardManager.java:204)
    at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Dec 16, 2013 2:51:56 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'petclinic'  
CodeMed asked 2020-08-09T02:04:59Z
6个解决方案
94 votes

这与Tomcat无法加载先前关闭时保存的先前序列化的Web会话有关。 这可能是因为Tomcat无法完全关闭,因此会话对象在序列化过程中被损坏了。

使该错误消失的一种方法是禁用重新启动之间的会话持久性。 您可以通过编辑文件session.ser并将<Manager>CATALINA_HOME/work/Catalina/localhost/<appName>属性设置为空字符串来实现。 Tomcat 7的文件中对此进行了很好的记录:

<!-- Uncomment this to disable session persistence across Tomcat restarts -->

<Manager pathname="" />

在关闭Tomcat的同时,还应该从CATALINA_HOME/work/Catalina/localhost/<appName>文件夹中删除所有旧的session.ser文件。

如果需要跨重新启动的会话持久性,这在您的情况下可能是不可接受的。 在这种情况下,有必要对该问题进行进一步的调试。

Will Keeling answered 2020-08-09T02:05:19Z
32 votes

删除tomcat的“工作”文件夹。 重启tomcat服务器,希望它现在可以正常运行!

这可以通过选择Tomcat中的服务器并选择“清理Tomcat工作目录”来完成。

enter image description here

M.Nethaji answered 2020-08-09T02:05:43Z
5 votes

只需清理Tomcat工作目录即可。

Manbumihu Manavan answered 2020-08-09T02:06:04Z
3 votes

仅仅是因为Persist类未正确序列化,只是停止了Apache。 删除项目并清理项目和服务器。

并在此重新部署。 祝好运。

Krishna answered 2020-08-09T02:06:28Z
1 votes

我在Eclipse项目中也遇到类似的错误。 我通过以下步骤解决了它:

  • 清理项目
  • 在Eclipse服务器视图中删除Tomcat服务器
  • 使用向导在eclipse的服务器视图上定义新的Tomcat服务器
  • 将项目添加到新定义的Tomcat服务器

之后,运行此新的Tomcat服务器都可以正常工作。

agugar answered 2020-08-09T02:07:10Z
1 votes

-该类应使用serialVersionUID实现Serializable接口。-进行干净的构建并重新启动服务器

user2664008 answered 2020-08-09T02:07:30Z
translate from https://stackoverflow.com:/questions/20622746/exception-loading-sessions-from-persistent-storage