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

  • 今のロジックでは二重登録を許容している。冪等なロジックにする必要がある。