Синхронизация остальных веб-сервисов - PullRequest
0 голосов
/ 06 января 2012

Я новичок в веб-сервисах. Я написал веб-сервис отдыха, который создает и возвращает файл PDF. Мой код выглядит следующим образом

@Path("/hello")
public class Hello {

@GET
    @Path("/createpdf")
    @Produces("application/pdf")
    public Response getpdf() {
        synchronized(this){

         try {
                OutputStream file = new FileOutputStream(new File("c:/temp/FirstPdf5.pdf"));

                Document document = new Document();
                PdfWriter.getInstance(document, file);
                document.open();
                document.add(new Paragraph("Hello Kiran"));
                document.add(new Paragraph(new Date().toString()));

                document.close();
                file.close();

            } catch (Exception e) {

                e.printStackTrace();
            }

        File file1 = new File("c:/temp/FirstPdf5.pdf");

        ResponseBuilder response = Response.ok((Object) file1);
        response.header("Content-Disposition",
                "attachment; filename=new-android-book.pdf");
        return response.build();
        }
    }

}

Если несколько клиентов пытаются одновременно вызвать веб-сервис, влияет ли это на мой код? Я имею в виду, что если клиент A использует веб-сервис и в то же время клиент B пытается использовать веб-сервис, файл PDF перезаписывается.

Если мой вопрос не правильный, пожалуйста, дайте мне знать

Спасибо

1 Ответ

0 голосов
/ 06 января 2012

Когда вы записываете файл на жесткий диск, несколько обращений к службе приведут к перезаписи файла или к исключениям, если файл уже используется.

Если файл одинаков для всех пользователей, вам нужно будет только прочитать файл, а не записывать его каждый раз.

Однако, если файл отличается для каждого пользователя, вы можете попробовать один из 2 следующих вариантов:

Вы можете создать файл в памяти, а затем записать двоичный ответ непосредственно в поток ответов.

В качестве альтернативы вы можете создать файл, используя уникальное имя, это может быть GUID или случайное число, которое гарантирует, что вы никогда не столкнетесь с несколькими вызовами, поступающими на сервер.

Я бы также позаботился о том, чтобы вы удалили файлы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...