Google App Engineのセッションスコープ | sola's note

sola's note

日ごろのメモを書いていきます。何か新しいものを作るために。

GAEでHttpSessionを使う

やっとここまで辿り着いた。
Google App Engine for Java(以下GAE)でHttpSessionを使います。

前々回前回 と奮闘した件についてのまとめ。

GAEで一時的な記憶処理として

・セッション(HttpSession)

・キャッシュ(MemcacheService)

がある。

今回はセッションについて。
セッションを使用するには絶対条件があり

appengine-web.xml



<sessions-enabled>true</sessions-enabled>

の記述を追加します。
多分ここまでは調べれば簡単に出てきます。

また、エンティティのモデルとなるクラスにSerializableをimplementsしてシリアライズ化します。


次に複合条件のようなもので、

・データストアから取得したデータをセッションにセットして使う場合はそのまま使用しない

というのが大事、
実際にどういう事かというと、

データストアからデータを取得する際は

PersistenceManager pm = PMF.get().getPersistenceManager();
Query query = pm.newQuery(Hoge.class);
List<Hoge> hogeList = (List<Hoge>) query.execute();

とやると思う。
しかし、ここで取得したhogeListをそのまま使用すると問題があるみたい。
というのも、データストアから取得したエンティティは
取得した時に使用したPersistenceManagerがクローズすると、
エンティティのステータスが変わってしまい、データの読み込みに支障が出るようです。
これを防ぐため、

hogeListCopy = (List<Hoge>)pm.detachCopyAll(hogeList);

という処理を行うと、エンティティの情報をコピーして使用することが出来ます。
この処理に関して記述してある本を見つけたのでついでにプッシュしておきます。
Google App Engine for Java [実践]クラウドシステム構築 (WEB+.../(株)グルージェント
¥2,604
Amazon.co.jp
セッションに関しては以上の点を守れば使えると思われます。
万が一記述漏れがあったら追記していきます。