Как остановить обработку сервлета со страницы jsp нажатием кнопки - PullRequest
0 голосов
/ 05 ноября 2019

Я создал страницу JSP, которая вызывает сервлет. И общее время обработки этого сервлета составляет минимум 5 минут. Перед полным завершением процесса этого сервлета я хочу остановить процесс и снова вызвать его с другим параметром.

Я хочу нажать кнопку на моей странице JSP, которая остановит весь процесс сервлета.

1 Ответ

0 голосов
/ 06 ноября 2019

Вы можете сделать это с помощью Java Executor Framework.

  1. Создать пул потоков
ExecutorService executorService = Executors.newFixedThreadPool(10);
Поместите вашу тяжелую задачу в новый поток и отправьте ее в executorService, которая обработает и вернет вам задание Feature. И сохраните эту функцию в сеансе
Future<String> startedTask = executorService.submit(() -> {
    System.out.println(Thread.currentThread().getName() + " started!");
    try {
        Thread.sleep(2 * 60 * 1000);//TODO: here goes your heavy task which tooks long to process
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "completed at " + System.currentTimeMillis();//here you can return your results if you need any
});
session.setAttribute(ATTRIBUTE_NAME_WORKING_TASK, startedTask);

В качестве дополнительного, если вы хотите заблокировать свой пользовательский интерфейс во время процессов сервлета, вы можете вызвать метод ниже после строк выше (я не думаю, что кто-то хочет сделатьэто)

String result = startedTask.get();
Когда вы вызываете stop url через кнопку, вы можете найти задачу из сеанса и отменить ее
Object task = session.getAttribute(ATTRIBUTE_NAME_WORKING_TASK);
if (task == null)
   return "Task doesnt exists";
if (task instanceof Future)
   ((Future<String>) session.getAttribute(ATTRIBUTE_NAME_WORKING_TASK)).cancel(true);

Это отменит вашу задачу, и даже если вы заблокировали пользовательский интерфейс, который ожидал процесс сервлета, будетбыть разблокированным

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