繁体   English   中英

从Tomcat 6 JDK 1.6迁移到Tomcat 7 JDK 1.7会话问题

[英]Migrating from Tomcat 6 JDK 1.6 to Tomcat 7 JDK 1.7 Session Issues

我们将在JDK 1.6的Tomcat 6中正常运行的应用程序迁移到Tomcat 7 JDK 1.7。 部署到Tomcat 6的WAR在Tomcat 7中可以正常工作。但是,在JDK 1.7下编译的WAR导致,如果单击UI中的任何链接,它将立即报告会话超时。 我们正在将MyFaces 2.0.7与Trinidad 2.0.0一起使用。 单击一个链接将提供一个ViewExpiredException。

问题可能与下面的堆栈跟踪相关,该堆栈跟踪在Tomcat 7服务器启动期间出现。

2014年3月11日,下午5:31:26 org.apache.catalina.session.StandardManager doLoad严重:IO加载持久会话时:IOException:java.io.InvalidObjectException:枚举常量resourceDependencyUniqueIdCounter在类javax.faces.component.UIViewRoot $中不存在。 PropertyKeys java.io.InvalidObjectException:枚举常量resourceDependencyUniqueIdCounter在java.io.ObjectInputStream.readEnum(ObjectInputStream.java:1741)的java.io.ObjectInputStream.readEnum(ObjectInputStream.java:1741)的类javax.faces.component.UIViewRoot $ PropertyKeys中不存在。的java.io.ObjectInputStream.readArray(ObjectInputStream.java:1704)处的java:1345)的java.io.ObjectInputStream.readArray(ObjectInputStream.java:1704)处的java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1342)处的java.io.ObjectInputStream.readArray(ObjectInputStream.java:1704) java.io.ObjectInputStream.readArray(ObjectInputStream.java:1342)在java.io.ObjectInputStream.readArray(ObjectInputStream.java:1704)在java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1342)在java.io.ObjectInp utStream.readObject(ObjectInputStream.java:370)at java.util.HashMap.readObject(HashMap.java:1155)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 57)位于java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)位于java.lang.reflect.Method.invoke(Method.java:606)位于sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)上的java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)在java.io.ObjectInputStream上的java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348) java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1342)处的.readArray(ObjectInputStream.java:1704)java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1989)在java.io.ObjectInputStream.readSerialData(ObjectInputStream。 java:1913),位于java.io.ObjectInputStream.readO org.apache.catalina.session.StandardSession.readObject上的java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)上的rdinaryObject(ObjectInputStream.java:1348)在java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)上(StandardSession.java:1595),位于org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1060),位于org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:282),位于org.apache。 org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:489)上的catalina.session.StandardManager.load(StandardManager.java:202)org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java: 150)在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)在org.apache.catalina.core.ContainerBase org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)的.addChildInternal(ContainerBase.java:901) org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1073)上的.catalina.core.StandardHost.addChild(StandardHost.java:632)在org.apache.catalina.startup.HostConfig $ DeployWar.run(HostConfig) .java:1857),位于java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:471),位于java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:334),位于java.util.concurrent。 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)的FutureTask.run(FutureTask.java:166)在java.lang的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615) .Thread.run(Thread.java:724)原因:java.lang.IllegalArgumentException:在java.lang.Enum.valueOf(Enum.java:236)处没有枚举常量javax.faces.component.UIViewRoot.PropertyKeys.resourceDependencyUniqueIdCounter java.io.ObjectInputStream.readEnum(ObjectInputStream.java:1739)...还有43个

2014年3月11日,下午5:31:26 org.apache.catalina.session.StandardManager startInternal严重:从持久性存储java.io.InvalidObjectException中加载会话的异常:类javax.faces.component.UIViewRoot $中不存在枚举常量resourceDependencyUniqueIdCounter。 java.io的java.io.ObjectInputStream.readEnum(ObjectInputStream.java:1741)上的PropertyKeys java.io.ObjectInputStream.readArray(ObjectInputStream.java:1345)上的java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1345) java.io.ObjectInputStream.readArray(ObjectInputStream.java:1704)处的java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1342)处的java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1342) java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1342)的ObjectInputStream.java:1704)java.util.HashMap.readObject(HashMap.java:1155)的java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) )在sun.reflect.NativeMethodAccessorImpl sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)上的.invoke0(Native方法)in java.lang.reflect.Method.invoke(Method.java :606),位于java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017),位于java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891),位于java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796),位于Java java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)位于java.io.ObjectInputStream.readArray(ObjectInputStream.java:1704)位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1342)在java.io.ObjectInputStream中。 java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913)的defaultReadFields(ObjectInputStream.java:1989)java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)的java.io.ObjectInputStream.readObject0(ObjectInputStream.java) :1348),位于java.io.ObjectInputStr org上org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1595)的eam.readObject(ObjectInputStream.java:370)org上org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1060)的eam.readObject(ObjectInputStream.java:10) org.apache.catalina.session.StandardManager.load(StandardManager.java:202)处的.apache.catalina.session.StandardManager.doLoad(StandardManager.java:282)在org.apache.catalina.session.StandardManager.startInternal(StandardManager .java:489)位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150),位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5476),位于org.apache.catalina。 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)的util.LifecycleBase.start(LifecycleBase.java:150)在org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)在org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1073)在org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)在 rg.apache.catalina.startup.HostConfig $ DeployWar.run(HostConfig.java:1857)在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:471)在java.util.concurrent.FutureTask $ Sync。在Java.util.concurrent.FutureTask.run(FutureTask.java:166)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)处的innerRun(FutureTask.java:166)在java.util.concurrent.ThreadPoolExecutor处java.lang.Thread.run(Thread.java:724)处的$ Worker.run(ThreadPoolExecutor.java:615)原因:java.lang.IllegalArgumentException:没有枚举常量javax.faces.component.UIViewRoot.PropertyKeys.resourceDependencyUniqueIdCounter java.io.ObjectInputStream.readEnum(ObjectInputStream.java:1739)的java.lang.Enum.valueOf(Enum.java:236)...还有43个

2014年3月11日,下午5:31:26 org.apache.catalina.startup.HostConfig deployWAR

Tomcat尝试对现有会话进行反序列化,但不能这样做,因为序列化字节流引用了它找不到的枚举(resourceDependencyUniqueIdCounter)。

我猜您要么就地更新了Tomcat(保留了旧的序列化会话),要么您仍在更改类,而无需更改类中的序列号。

这时最简单的解决方案很可能是清除现有的序列化会话文件,然后重试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM