2010-11-30 8 views
0

私はGAEアプリケーションを作成しようとしているのは、ユーザーを登録して連絡先を連絡してオンライン状態に戻すことだけです。オンラインの場合はIPを返します。だから、私はJPAエンティティを持っているユーザーIDと連絡先リスト、および一時的なIPフィールド。ユーザーがログインするたびに、私はそれをマップに保存します。サーブレットの静的変数がgaeでgcedされるのはいつですか?

private static final Map<String, SSUser> connectedRegisteredUsers = new HashMap<String, SSUser>(); 

ここで驚いたことに、地図が空になっているように見えてユーザーを忘れてしまいます。なぜそれが起こっているのか、それを検証する方法(動作を観察することのほかに)、代替方法が存在するのかどうか、IPをデータストアに保存することはできません。

答えて

2

App Engineは、トラフィックパターンの変更に応じて、いつでもアプリのインスタンスを起動して終了できます。ここでは2つの問題があります:まず、複数のマシン上で複数の異なるインスタンスが実行されます。複数のマシンにはそれぞれ独立した状態(静的変数を含む)があります。次に、インスタンスをシャットダウンしていつでも起動することができ、静的変数をクリアします。

グローバルに一貫性のあるデータが必要な場合は、memcacheおよび/またはデータストアを使用する必要があります。

+0

http://code.google.com/appengine/docs/java/memcache/usingjcache.html – simpatico

+0

私の場合、データストアが必要です。 – simpatico

関連する問題