Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从持久性存储加载会话时出现异常_Java_Spring_Spring Mvc - Fatal编程技术网

Java 从持久性存储加载会话时出现异常

Java 从持久性存储加载会话时出现异常,java,spring,spring-mvc,Java,Spring,Spring Mvc,我已经对它做了很多改变。目前,在使用eclipse run as…run on server在tomcat server的新实例中启动应用程序时,我收到以下错误消息: SEVERE: Exception loading sessions from persistent storage 服务器和应用程序随后能够成功启动,但我希望修复导致错误消息的任何原因。有人能告诉我如何通过这个错误消息吗 堆栈跟踪没有列出应用程序中的任何文件,因此我不知道在应用程序代码中查找何处来修复该问题。您可以查看应用

我已经对它做了很多改变。目前,在使用eclipse run as…run on server在tomcat server的新实例中启动应用程序时,我收到以下错误消息:

SEVERE: Exception loading sessions from persistent storage  
服务器和应用程序随后能够成功启动,但我希望修复导致错误消息的任何原因。有人能告诉我如何通过这个错误消息吗

堆栈跟踪没有列出应用程序中的任何文件,因此我不知道在应用程序代码中查找何处来修复该问题。您可以查看应用程序的结构,如果这有助于您了解我应该在哪里查找问题的话。以下是堆栈跟踪:

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'  
INFO EhCacheManagerFactoryBean-初始化EhCache缓存管理器
INFO ContextLoader-根WebApplicationContext:初始化在4376毫秒内完成
2013年12月16日下午2:51:56 org.apache.catalina.session.StandardManager doLoad
严重:加载持久会话时发生IOException:java.io.EOFEException
java.io.EOFException
在java.io.ObjectInputStream$PeekInputStream.readFully处(ObjectInputStream.java:2280)
位于java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
位于java.io.ObjectInputStream。(ObjectInputStream.java:279)
位于org.apache.catalina.util.CustomObjectInputStream。(CustomObjectInputStream.java:58)
位于org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:246)
位于org.apache.catalina.session.StandardManager.load(StandardManager.java:204)
位于org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5443)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
位于org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
位于java.util.concurrent.FutureTask.run(FutureTask.java:138)
位于java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
运行(Thread.java:662)
2013年12月16日下午2:51:56 org.apache.catalina.session.StandardManager startInternal
严重:从持久性存储加载会话时出现异常
java.io.EOFException
在java.io.ObjectInputStream$PeekInputStream.readFully处(ObjectInputStream.java:2280)
位于java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
位于java.io.ObjectInputStream。(ObjectInputStream.java:279)
位于org.apache.catalina.util.CustomObjectInputStream。(CustomObjectInputStream.java:58)
位于org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:246)
位于org.apache.catalina.session.StandardManager.load(StandardManager.java:204)
位于org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5443)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
位于org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
位于java.util.concurrent.FutureTask.run(FutureTask.java:138)
位于java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
运行(Thread.java:662)
2013年12月16日下午2:51:56 org.apache.catalina.core.ApplicationContext日志
信息:正在初始化Spring FrameworkServlet“petclinic”

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

消除此错误的一种方法是禁用跨重启的会话持久性。您可以通过编辑文件
CATALINA_HOME/conf/context.xml
并将
路径名
属性设置为空字符串来完成此操作。这在Tomcat 7的文件中有很好的记录:

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

<Manager pathname="" />

您还应该在Tomcat关闭时从
CATALINA_HOME/work/CATALINA/localhost/
文件夹中删除任何旧的
session.ser
文件


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

我在eclipse中的一个项目中遇到了类似的错误。我通过以下步骤解决了这个问题:

  • 对该项目作出澄清
  • 在eclipse的服务器视图中删除Tomcat服务器
  • 使用向导在eclipse的服务器视图中定义一个新的Tomcat服务器
  • 将项目添加到新定义的Tomcat服务器
在那之后,运行这个新的Tomcat服务器一切都很好。

删除Tomcat的“工作”文件夹。重新启动tomcat服务器,希望它现在可以正常运行,不会出现任何异常或错误

这可以通过在Tomcat中选择服务器并选择“Clean Tomcat Work Directory”来实现


这仅仅是因为Persist类没有正确序列化,所以停止Apache。删除项目并清理项目和服务器

在这里重新部署就行了。好的,我
server.servlet.session.persistent=false