在Eclipse中运行Tomcat并获得"Exception loading sessions from persistent storage"



我使用Eclipse Kepler开发了一个基于Sprig/HHibernate/PostgreSQL的应用程序。该应用程序在Tomcat中运行,Tomcat由Eclipse管理。一般来说,这很好用。

在修改并保存任何jsp大约10次后,我得到以下异常:

2014年1月17日上午9:53:33 org.apache.catalina.core.StandardContext重载信息:已开始重新加载名为[/app]的上下文2014年1月17日上午9:53:33 org.apache.catalina.core.ApplicationContext日志信息:正在销毁Spring FrameworkServlet"dispatcherServlet"2014年1月17日上午9:53:33 org.apache.catalina.core.ApplicationContext日志信息:关闭Spring根WebApplicationContext[DEBUG][ContainerBackgroundProcessor[StandardEngine[Catalina]]17.01.14 09:53:33](Utils.java:logSystemState:365)系统信息:活动会话:1,可用处理器:8,最大内存:1754 MB,总内存:658 MB,空闲内存:110 MB,负载平均值:0.11[DEBUG][ContainerBackgroundProcessor[StandardEngine[Catalina]]17.01.14 09:53:33](LifeCycle.java:destroy:89)APP 1.1.4(构建于2014年1月17日星期五09:55),在/APP上销毁,在目标环境"dev"上运行。正常运行时间:1小时4分7秒314毫秒。春季:3.2.6.RELEASE,休眠:4.2.8.Final2014年1月17日上午9:53:33 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc严重:web应用程序[/app]注册了JDBC驱动程序[org.postgresql.driver],但在web应用程序停止时未能注销。为了防止内存泄漏,JDBC驱动程序已被强制注销。2014年1月17日上午9:53:36 org.apache.catalina.core.ApplicationContext日志信息:在类路径上未检测到Spring WebApplicationInitializer类型2014年1月17日上午9:53:36 org.apache.catalina.core.ApplicationContext日志信息:正在初始化Spring根WebApplicationContext。。。2014年1月17日上午9:53:37 org.apache.catalina.session.StandardManager启动内部严重:从永久存储加载会话时出现异常java.lang.ClassNotFoundException:com.mycompany.app.spring.AuthenticationWrapper网址:org.apache.catalina.loarder.WebappClassLoader.loadClass(WebappClassLoader.java:1714)网址:org.apache.catalina.loarder.WebappClassLoader.loadClass(WebappClassLoader.java:1559)位于java.lang.Class.forName0(本机方法)位于java.lang.Class.forName(Class.java:270)网址:org.apache.catalina.util.CustomObjectInputStream.resolveClass(CustomObjectInputStream.java:76)位于java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1610)位于java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515)位于java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)位于java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1989)位于java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913)位于java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)位于java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)网址:org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1595)网址:org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1060)网址:org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:284)网址: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.StandardContext.reload(StandardContext.java:3954)网址:org.apache.catalina.loarder.WebappLoader.backgroundProcess(WebappLoader.java:426)网址:org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345)网址:org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530)网址:org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)网址:org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)网址:org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519)位于java.lang.Thread.run(Thread.java:724)2014年1月17日上午9:53:37 org.apache.catalina.core.StandardContext startInternal严重:由于以前的错误,上下文[/app]启动失败2014年1月17日上午9:53:37 org.apache.catalina.core.ApplicationContext日志信息:关闭Spring根WebApplicationContext2014年1月17日上午9:53:37 org.apache.catalina.core.StandardContext重载信息:重新加载名为[/app]的上下文已完成

唯一的解决方案是停止Tomcat,执行Project->Clean,然后重新启动Tomcat。当然,会话丢失了,我必须再次登录应用程序。

这个问题严重影响了我的开发工作流程,到目前为止我还没有找到解决方案。

由于怀疑存在文件系统问题,我尝试在tmpfs中创建一个文件夹,并将其用作Tomcat的服务器路径(在Eclipse中设置),但它没有改变任何内容。

请注意,这只发生在我的笔记本电脑上(Kubuntu 13.10)一位同事使用相同操作系统的同一台笔记本电脑,但没有发现问题

问题似乎是会话在文件系统上被破坏,Tomcat因此而窒息。为什么会这样?

消除此错误的一种方法是在重新启动时禁用会话持久性。您可以通过编辑文件CATALINA_HOME/conf/context.xml并将<Manager>的路径名属性设置为空字符串来完成此操作。

您还应该从CATALINA_HOME/work/CATALINA/localhost/<appName>文件夹,而Tomcat处于关闭状态。

发生这种情况可能是因为Tomcat没有干净地关闭,所以会话对象在序列化过程中被损坏。

最新更新