我的情況如下:
我有我的表中的會話列表。
在我的代碼中,我會檢查數據存儲區中的最後一個會話是否有空間存在於一個aditional播放器中。
如果不創建新的會話。AppEngine持久對象延遲?
它去有點像這樣:
public Session getEligeableSession(){
Session session;
session = ds.getLastSession();
if(session.numPlayers > 3){
newSession();
session = ds.getLastSession();
}
return session;
}
這完美的作品在當地,但它不會AppEngine上的appspot。
在AppSpot上,我剛剛收到一個填滿的會話,我必須從中得出結論,我的代碼不會等待新會話完全持續,只是再次獲得舊會話。
我的結論是正確的嗎?如果是這樣,我將如何去解決這個恩惠。
尋找這個'延遲'導致谷歌/ SO上沒有任何東西,這讓我相信沒有這樣的事情(又名它是同步的),並且在我的代碼中有一個不同的失敗(也許從列表中獲取最後一個對象在AppEngine上的工作方式不同)
任何和所有幫助/建議非常感謝。
摘要:
會議(對象)有(列表)4個播放器(對象)
getLastSession()檢索來自數據存儲的整個列表,並獲得了最後一個(大小-1)。
newSession()創建一個新的Session對象並保存它。每個請求
編輯:
public List<Session> getAll(){
pm = PMF.get().getPersistenceManager();
String query = "select from " + Session.class.getName();
@SuppressWarnings("unchecked")
List<Session> sessions = (List<Session>) pm.newQuery(query).execute();
return sessions;
}
public Session getLastSession(){
List<Session> sessions = getAll();
Session session = sessions.get(sessions.size()-1);
session.activeGame = session.numPlayers == 4 ? true : false;
pm.close();
return session;
}
public int insert(Session session){
pm = PMF.get().getPersistenceManager();
int status = 0;
try {
pm.makePersistent(session);
} finally {
pm.close();
}
return status;
}
代碼似乎 '合理的',沒有有趣的東西發生AFAIK。 我正在使用主從選項。
什麼newsession的實施和getLastSession?實際的代碼在這裏很重要!而且,您是否使用高複製數據存儲? – 2011-05-09 18:50:55
@Nick Johnson 我已根據要求更新了我的帖子。忘記:NewSession只是插入(新會話); – Rohan 2011-05-09 19:02:17
您是否試過將單個持久性管理器傳遞給所有函數,而不是在每個函數中創建一個新的? – 2011-05-09 19:04:02