Возможно, уже слишком поздно отвечать ...
Обычное время запроса составляет около одной минуты, если "getMovie (m.getId ());" запрос информации с какого-либо другого сервера может занять много времени и пройти через вашу минуту.
Задача GAE имеет больше времени для запуска заданий, поэтому лучше использовать cron для постановки в очередь нового задания и позволить appengine выполнять свою работу в фоновом режиме.
Task t = new Task();
t.setUrl(URL_SERVLET_TO_UPDATE_MOVIES);
//submit task
TaskReference tr = queue.add(t);
Этот сервлет выполняет задачу обновления фильмов.
Даже если вам нужно больше времени (допустим, у вас там много фильмов), вы можете получить только несколько фильмов за запрос, реализовать их, получить курсор (работает как диапазон) и поставить новую задачу с этим курсором в качестве параметра к сервлету.
Это новое задание начнется со следующего фильма, который вы должны реализовать (благодаря курсору), и у вас будет достаточно времени, чтобы выполнить свою работу. Вы можете связать задачу, пока ваша работа не будет завершена.
В вашем сервлете ищите курсор как параметр:
String encodedCursor = req.getParameter(CURSOR_PARAM);
if ( encodedCursor != null){
oldCursor = Cursor.fromWebSafeString(encodedCursor);
}
Вы можете использовать этот курсор для запроса из последнего запрошенного вами фильма.
Получите новый курсор из нового запроса и добавьте его в качестве параметра к новой задаче.
Task t = new Task();
t.setUrl(PROCESSOR_SERVLET);
//add cursor as parameter
t.addParameter(CURSOR_PARAM, cursor.toWebSafeString());
//submit task
TaskReference tr = queue.add(t);
Используя Task и курсоры, вы будете выполнять свою работу в фоновом режиме, избегая временных ограничений.
Конечно, там есть квоты ...
Док о курсорах:
https://developers.google.com/appengine/docs/java/datastore/queries#Query_Cursors