Я пытаюсь сохранить примерно 28 000 «строк» в одной сущности, например СОТРУДНИК
По сути, моя цель состоит в том, чтобы избежать прерывания / тайм-аута с использованием значений PUT, превышающих 30 секунд - что может случиться, если я просто выполню 28 000 PUT, вызвав запрос doPost (), отправленный сервлету.
Так что я думаю об использовании задач, описанных в документации Google App Engine.
По сути, я хотел бы загрузить CSV-файл в каталог war с 28 000 "сотрудников". Затем создайте задачу, которая будет асинхронно ПРОВЕРИТЬ эти 28 000 строк сотрудников в объект EMPLOYEE.
В1: Это жизнеспособное решение или есть лучший способ? Опять же, цель состоит в том, чтобы выполнить PUT, чтобы избежать прерывания из-за 30-секундного ограничения.
Q2: Кроме того, какие конфигурации queue.xml я должен использовать, чтобы обеспечить максимально быстрое выполнение этих PUT?
Q3: Теперь я попробовал это, подобно записи в блоге: http://gaejexperiments.wordpress.com/2009/11/24/episode-10-using-the-task-queue-service/, но примерно через 23 секунды я получаю следующую ошибку:
SEVERE: Job default.task1 threw an unhandled Exception:
com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 5: http method POST against URL http://127.0.0.1:8888/dotaskservlet timed out.
at com.google.appengine.api.urlfetch.dev.LocalURLFetchService.fetch(LocalURLFetchService.java:236)
at com.google.appengine.api.taskqueue.dev.LocalTaskQueue$UrlFetchServiceLocalTaskQueueCallback.execute(LocalTaskQueue.java:471)
at com.google.appengine.api.taskqueue.dev.UrlFetchJob.execute(UrlFetchJob.java:77)
at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
16/02/2011 12:12:55 PM org.quartz.core.ErrorLogger schedulerError
SEVERE: Job (default.task1 threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 5: http method POST against URL http://127.0.0.1:8888/dotaskservlet timed out.]
at org.quartz.core.JobRunShell.run(JobRunShell.java:214)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
* Nested Exception (Underlying Cause) ---------------
com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 5: http method POST against URL http://127.0.0.1:8888/dotaskservlet timed out.
at com.google.appengine.api.urlfetch.dev.LocalURLFetchService.fetch(LocalURLFetchService.java:236)
at com.google.appengine.api.taskqueue.dev.LocalTaskQueue$UrlFetchServiceLocalTaskQueueCallback.execute(LocalTaskQueue.java:471)
at com.google.appengine.api.taskqueue.dev.UrlFetchJob.execute(UrlFetchJob.java:77)
at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
Q4: я также проверил средство просмотра хранилища данных на http://localhost:8888/_ah/admin, и, похоже, в этом объекте было создано только 1000 результатов. 1000 лимит?
Q5: Как мне избавиться от этой ошибки?
В6: Можно ли подтвердить, что максимально допустимое время составляет 10 минут для задачи? или это все еще 30 секунд? Я наткнулся на это: http://code.google.com/appengine/docs/java/taskqueue/overview.html#Task_Execution