2010-11-30 50 views
0

我想要一個GAE應用程序,它所做的就是註冊用戶並將聯繫人與他們關聯,並返回他們的在線狀態。如果在線返回他們的IP。所以我有一個JPA實體與用戶ID和聯繫人列表,以及一個瞬時IP字段。每次用戶登錄時,我都會將其保存在地圖中。什麼時候gae中的servlet靜態變量?

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

現在令人驚訝的是,似乎在一段時間後地圖被清空,並且會忘記用戶。我不知道爲什麼會發生這種情況,如何驗證它(除了觀察行爲),還有替代方法,除了將IP存儲在數據存儲中。

回答

2

App Engine可隨時啓動和關閉應用程序的實例,以響應不斷變化的流量模式。這裏有兩個問題:首先,你的應用程序將運行多個不同的實例,在多臺機器上,每臺機器都有獨立的狀態(包括你的靜態變量)。其次,實例可以隨時關閉並啓動,清除靜態變量。

如果您需要全局一致的數據,則需要使用memcache和/或數據存儲。

+0

http://code.google.com/appengine/docs/java/memcache/usingjcache.html – simpatico 2010-11-30 02:56:01