Tomcat には 2 つのプロジェクトがあります。どちらもウェブアプリケーションです。1 つはサーバーとして機能し、もう 1 つはクライアントとして機能します。クライアント アプリケーションは、データをサーバー アプリケーションに依存します。サーバーへのデータ要求を行い、サーバーはシリアル化された Java オブジェクトとしてデータで応答します。滅菌解除のために、クライアントにはスタブ (サーバーからストリーミングされるのと同じクラス) が提供されます。
最近、プロジェクトは 1 つのテスト サーバーで更新されました。アレンジメントを更新した後、問題なく動作しましたが、1 つの問題がありました。アプリケーションをブラウザで 10 ~ 15 分間維持すると、特定の 1 つのページがクラッシュし始めます。調査したところ、そのページのクライアントはサーバーにデータを要求しているが、サーバーはクライアントにスタブとして存在する同じクラスの古いバージョンで応答していることがわかりました。このエラーは、この 10 分間のタイムアウト前には発生しません。サーバーは、クライアントと同じクラス バージョンを返します。tat アイドル タイムアウトの後、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 サーバーです。この配置は、過去数年間、本番環境だけでなく他のさまざまなテスト環境でもうまく機能しているため、コードは問題ありません。
詳細は、必要に応じて提供されます。これを引き起こしている可能性のある考え。前もって感謝します。