Остановка запроса к серверу - PullRequest
1 голос
/ 19 января 2012

У меня есть веб-приложение (java, tomcat), которое позволяет пользователям создавать отчеты с помощью отчетов Crystal.Проблема в том, что если пользователь запрашивает огромный отчет, который занимает несколько часов, все мое приложение останавливается.Есть ли способ остановить запрос, например, если через 5 минут он не был выполнен?Кроме оптимизации скорости и ограничения размеров отчетов, есть ли другие способы обхода?

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Я думаю, что вы не запускаете генерацию отчетов в другой теме.Лучше запустить генерацию отчета в другом потоке и отправить ссылку обратно пользователю, когда он будет готов.

Вы можете использовать ExecutorService из java и установить некоторое время ожидания для потока, и он истечет, если потребуется большечем время, выделенное для этого.

Поиск Java ExecutorService, Future, Callable tutorial

Пример кода:

 Callable<Integer> callable = new CallableImpl(2);
  ExecutorService executor = new ScheduledThreadPoolExecutor(5);
  Future<Integer> future = executor.submit(callable);
  Integer result = future.get(600,TimeUnit.seconds));
1 голос
/ 19 января 2012

Другой подход заключается в запуске генерации отчета в отдельном потоке (или, возможно, с использованием ExecutorService) и вызове Thread.interrupt(), когда время генерации превышает некоторый порог.Скорее всего, поток будет прерван, если в данный момент он блокирует ввод / вывод (сеть, база данных).

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