現在、Apache Ignite をアプリケーションに統合して、クラスター内でセッションを共有しています。
この時点で、2 つのローカル Tomcat インスタンス間でセッションを正常に共有できますが、まだ機能していないユース ケースが 1 つあります。
まったく同じコードで 2 つのローカル インスタンスを実行すると、すべてうまく機能します。しかし、Ignite ロジックが本番クラスターに統合されると、次のユース ケースが発生します。
- Node 1およびNode 2、バージョン 1のアプリケーションを実行
- この時点で、アプリケーションのバージョン 2をデプロイします。
- Tomcat はノード 1で停止され、バージョン 2がデプロイされ、デプロイの最後にノード 1の Tomcatが再び開始されます。
- ノード 1にはバージョン2のコードがあり、ノード 2にはまだバージョン 1があります。
- Tomcat はノード 2で停止され、バージョン 2が展開され、展開の最後にノード 2の Tomcatが再び開始されます。
- ノード 1にはバージョン2のコードがあり、ノード 2にはバージョン 2があります。
- デプロイが完了しました
このユース ケースを同じグリッド内の 2 つの tomcat インスタンスでローカルに再現すると、Ignite Web セッション クラスタリングが失敗します。私がテストしたのは、ユーザー セッションに存在するクラス (プロファイル) の 1 つの「文字列プロパティ」を削除することでした。この変更されたクラスでノード 1を開始すると、次の例外が発生します。
Caused by: java.lang.ClassNotFoundException:
Optimized stream class checksum mismatch
(is same version of marshalled class present on all nodes?) [expected=4981, actual=-27920, cls=class nl.package.profile.Profile]
これは、展開の一般的/通常の使用例です。私の質問は、このユースケースをどのように処理するのですか? Ignite でこの種の問題を解決/回避する方法はありますか?