我在tomcat上有两个项目。两者都是Web应用程序。一个充当服务器,另一个充当客户端。客户端应用程序依赖于服务器应用程序来获取数据。它使数据请求服务器和服务器响应数据作为序列化的java对象。为了消毒,客户端提供了一个存根(从服务器流式传输的相同类)。
最近,该项目在一台测试服务器上更新。更新后,安排工作正常,但有一个问题。将应用程序保留在浏览器上10到15分钟后,一个特定的页面开始崩溃。在调查时我发现,对于该页面,客户端正在请求服务器获取某些数据,但服务器正在响应与客户端作为存根存在的同一类的旧版本。 在此10分钟超时之前不会发生此错误。服务器返回与客户端相同的类版本。我无法弄清楚tomcat在闲置时间之后从哪个版本获得该类的旧版本。 错误宝座是:
`java.io.InvalidClassException: com.ABC.XYZ; local class incompatible:stream classdesc serialVersionUID = 6683390643574875053, local class serialVersionUID = 100`
为了缩小错误,我明确定义了class 100L的serialVersionUID。
`serialVersionUID = 100L`
在超时之前,来自服务器和客户端的类XYZ打印相同的serialVersionUID = 100.但是在它崩溃的某个时间之后它显示serialVersionUID为6683390643574875053,这是旧版本的编译器生成的serialVersionUID。
有问题的TH服务器是cantos6.3上的tomcat6.0服务器。这种安排在生产以及过去几年的各种其他测试环境中都能成功运行,因此代码很好。
如有需要,我们会提供进一步的详情。任何想法可能导致这种情况。 提前致谢。
答案 0 :(得分:0)
这是由于Tomcat在生产上的腐败。清理并安装相同版本的tomcat解决了我们的问题。希望这为有类似问题的人节省时间。