0

我在tomcat上有两个项目。两者都是网络应用程序。一个充当服务器,另一个充当客户端。客户端应用程序依赖于服务器应用程序来获取数据。它向服务器发出数据请求,服务器以序列化 java 对象的形式响应数据。为了对客户端进行消毒,提供了一个存根(从服务器流式传输的相同类)。

最近,该项目在一台测试服务器上进行了更新。更新安排后工作正常,但有一个问题。将应用程序在浏览器上保持 10 到 15 分钟后,一个特定页面开始崩溃。在调查中,我发现对于该页面,客户端正在向服务器请求一些数据,但服务器正在响应与客户端存在的相同类的旧版本作为存根。在此 10 分钟超时之前不会发生此错误。服务器返回与客户端相同的类版本。在空闲超时后,我无法弄清楚tomcat从哪里获得该类的旧版本。错误宝座是:

   `java.io.InvalidClassException: com.ABC.XYZ; local class incompatible:stream classdesc serialVersionUID = 6683390643574875053, local class serialVersionUID = 100`

为了缩小错误范围,我明确定义了 100L 类的 serialVersionUID。

   `serialVersionUID = 100L`

在超时之前,来自服务器和客户端的类 XYZ 打印相同的 serialVersionUID = 100。但是在它崩溃后的某个时间,它显示 serialVersionUID 为 6683390643574875053,这是编译器为旧版本生成的 serialVersionUID。

有问题的 TH 服务器是 cantos6.3 上的 tomcat6.0 服务器。在过去的几年里,这种安排在生产以及各种其他测试环境中都成功地工作,所以代码很好。

如果需要,将提供更多详细信息。知道是什么原因造成的。提前致谢。

4

1 回答 1

0

这是由于生产中损坏的 Tomcat。清理并安装相同版本的tomcat 解决了我们的问题。希望这可以为有类似问题的人节省时间。

于 2015-05-25T13:48:46.397 回答