TaskQueueのコード修正
TaskQueueで500 Server Error - 理系のためのTIPS集に対していただいた指摘を踏まえ、一部修正。
private final int MAX_NUMBER_OF_TASKS = 100; @Override protected Navigation run() throws Exception { FileItem fileItem = requestScope("formFile"); InputStream in = new ByteArrayInputStream(fileItem.getData()); BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8")); String line; Queue q = QueueFactory.getDefaultQueue(); List<TaskOptions> tasks = Lists.newArrayList(); while ((line = reader.readLine()) != null) { tasks.add(TaskOptions.Builder.url("/task/put").param("line", line)); if (tasks.size() == MAX_NUMBER_OF_TASKS) { q.add(tasks); tasks.clear(); } } q.add(tasks); return null; }
- add(TaskOptions)をadd(Iterable
)に変更 - Queue#add(Iterable
)で一度に追加できるTaskの上限は100なので、100行ごとにリストに追加してadd。
Task Queue Java API Overview - Google App Engine - Google Code
- 今のロジックでは二重登録を許容している。冪等なロジックにする必要がある。