Моя ситуация выглядит следующим образом:
У меня есть список сессий в моей таблице.
В моем коде я проверяю, есть ли место для последнего сеанса в хранилище данных для дополнительного игрока.
Если нет, создайте новый сеанс.
Это выглядит примерно так:
public Session getEligeableSession(){
Session session;
session = ds.getLastSession();
if(session.numPlayers > 3){
newSession();
session = ds.getLastSession();
}
return session;
}
Это работает безупречно на локальном компьютере, но не на AppSpot AppEngine.
В AppSpot я просто получаю заполненный сеанс обратно, из этого я должен сделать вывод, что мой код не ждет, пока новый сеанс полностью сохранится, и просто снова получает старый сеанс.
Правильно ли сделан мой вывод? если так, как бы я поступил так любезно.
Поиск этой «задержки» ничего не дал в Google / SO, что заставляет меня поверить, что такой вещи нет (иначе она синхронна), и в моем коде произошла другая ошибка (возможно, получение последнего объекта из списка работает иначе в AppEngine)
Любая помощь / совет очень ценится.
Резюме:
Сессия (Объект) имеет (Список) 4 игроков (Объект)
getLastSession () извлекает весь список из хранилища данных и получает последний ( size-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;
}
Код кажется «Разумным», никаких смешных вещей не происходит на самом деле.
Я использую опцию master-slave.