アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるプロジェクトのWebアプリを引き継ぐことになりそのソースを見ていたところ
あるメソッドで次のようにしてセッションに格納した値をやりくりしている部分があり????
と思ったので質問させてください。

//ログイン情報を取得
A aObj = (A)session.getAttribute("LOGIN_INFO");

//セッションンにフラグを格納
aObj.setFlag = true;



そして別のメソッドで下記のように再度ログイン情報を取得し上記メソッドでセットしたフラグを取得


//ログイン情報を取得
A aObj = (A)session.getAttribute("LOGIN_INFO");

if(aObj.getFlag) {
System.out.println("hello");
}

ここで疑問なのですが最初に
aObj.setFlag = true;
とやった後に
session.setAttribute("LOGIN_INFO", aObj);
と明示的に記述してあげなくてもセッションの中のaObjの
flagプロパティにはtrueに書き換えられるのでしょうか。
というかデバッグしてみたらtrueに書き換えがされていました。
(恐らく、オブジェクトの参照渡しのため)
こういう書き方でセッションの中のオブジェクトが持つプロパティを書き換えるのって
一般的な書き方でしょうか。最初、パッと見たとき、セッションから取得したaObjにsetterで
プロパティを書き換えているだけでセッションが保持するオブジェクトのプロパティを
書き換えているようには見えませんでした。
setterを実行することでセッションの保持するオブジェクトのプロパティを書き換えるという
コードに違和感を感じたものでして・・・

A 回答 (1件)

多分たまたま使っている実装では大丈夫なんでしょうが、クラスタサーバなどの場合、


セッションステートを複数のサーバで共有するために、setAttribute による
同期のトリガが必須です。

なので、後々のことを考えると、setAttribute しないとセッションステートが
更新されない可能性があるとしてまめにsetAttributeするようにプログラムするのが
正しいと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
そんな落とし穴が考えられるのですね。
大変参考になりました。

お礼日時:2013/04/30 19:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!