1

セッションで保持されているオブジェクトを更新する正しい方法は何ですか? setAttribute()セッションから取得された、状態が変更されたオブジェクトを常に呼び出す必要がありますか? ここでは、すでに作成されてセッションに保存されているセッション属性のみを参照しています。新しい属性ではありません。

Personセッションにオブジェクトが保存されていて、各リクエストが行うとしましょう:

Person p = (Person) session.getAttribute("person");

次に、「p」によって参照されるオブジェクトは、常にリクエスト全体で返される同じオブジェクトになります。コンテナー (少なくとも Tomcat) は、毎回新しいコピーを提供するわけではありません。ここでのポイントは、後で をp.setName("Joe the Plumber")呼び出して呼び出さなくてsetAttribute("person", p)も、セッションに保持されているオブジェクトは引き続き更新され、リクエスト間で更新が表示されるということです。

ただし、クラスタリングとセッション レプリケーションが開始されるとsetAttribute()、更新されたセッション オブジェクトを配布するタイミングをクラスタリング コードが認識できるように、通常は常に呼び出す必要があります。一部のコンテナには、を呼び出さずにこれを達成するための他のメカニズムがあることを認識していますsetAttribute()

これはサーブレット仕様の灰色の領域ですか?

4

2 に答える 2

1

はい、グレーゾーンです。一般に、J2EE 仕様では、クラスタリングを使用する場合の予期される動作については説明されていません。

サーブレット仕様に対して開かれている拡張要求があります: https://java.net/jira/browse/SERVLET_SPEC-1

その号の仕様に何を追加する必要があるかについて、自由に意見を追加してください。

于 2013-10-10T22:05:27.347 に答える