Tomcat のようなサーブレット エンジン/コンテナに支えられた Web アプリケーションがあるとします。ユーザーがログインします。そのユーザーのデータベース レコード (クラス User のインスタンスで表されるとしましょう) が読み込まれ、これをキー「currentUser」を持つセッション属性として保存し、一度設定して使用することができます。後続のリクエストを処理します。さらに、セッション属性にさらにオブジェクトを配置します。かなり基本的なもの。
ここで、いくつかの新しいコードをデプロイして Tomcat を再起動する必要がある場合...インスタンスがユーザーに格納されているクラスを変更しない限り、ユーザー セッションは再起動後もそのままです (ディスク/データベースから復元されます) 。セッション。しかし、これは大きな問題です。ユーザーが新しいコードのリリースでセッションを失ってほしくありません。
この問題を回避するために、セッション オブジェクトには、変更されないと想定されるクラスのインスタンスのみを格納できると思います (ログイン ユーザーの ID を User クラスのインスタンスではなく Integer として格納するなど)。その後、再起動時にセッション オブジェクトを逆シリアル化できないという問題に遭遇することはありませんでした。しかし、ID を使用してデータベースなどから実際のオブジェクトをロードする必要があるため、少し複雑になります (キャッシュを使用すると、パフォーマンスへの影響は実際には問題になりません)。
これは、この問題を回避するために通常行われていることですか?