Что является хорошим способом обеспечить закрытие основных потоков для StreamingOutput из Джерси?

Я работаю над REST API и использую для этого Джерси. Одна из конечных точек возвращает файлы, и я использую StreamingOut за это.

final InputStream is = getInputStreamFor(fileHandle);           
StreamingOutput so = new StreamingOutput() {
  @Override
  public void write(OutputStream os) throws IOException, WebApplicationException {
    try {
      IOUtils.copy(is, os);    
      os.flush();
    } catch (Exception e) {
      throw e;
    } finally {
      is.close();
    }
  }
}

return Response
.ok(rs)
.build();

Насколько я понял; что происходит здесь, я возвращаю Response от моего метода, и оттуда Джерси начинает писать InputStream к OutputStream вызывая write(OutputStream os) метод. Это write(OutputStream os) вызывается после моего метода.

Теперь, что, если что-то пойдет не так, прежде чем Джерси дойдет до точки вызова write(OutputStream os)? InputStream никогда не будет закрыт.

Должен ли я отслеживать все InputStream случаи, которые я передаю Responseи попытаться закрыть их, скажем, через 5 минут, чтобы быть уверенным, что все хорошо вычищено?

Мне не нравится мысль раздавать InputStream случаи, когда Джерси, кстати, не может знать, как закрыться, и не может быть уверен, что все вычищено.

0 ответов

Другие вопросы по тегам