Постановка задачи -
Я разработал веб-приложение, которое создает набор задач на основе пользовательского ввода и выполняет их на удаленном компьютере.
сервер (linux) в последовательном порядке один за другим. Каждое задание занимает около 10 минут. Обычно пользователь отправляет 5 задач в одном запросе, что означает, что веб-приложению требуется около 50 минут, чтобы отобразить сообщение об успехе / неудаче на экране пользователя после
подача задания. Я не хочу, чтобы пользователь продолжал ждать 50 минут, чтобы показать результат вывода, вместо этого я хочу отобразить на странице сообщения и ожидаю, что метод должен продолжить обработку переданных данных.
Текущая реализация -
Контроллер получит все необходимые данные для подготовки задачи от пользователя и перейдет к классу обслуживания, который создаст список задач - Список и запуск
выполнение их, как показано ниже, путем вызова метода executeTask. После того, как завершенное задание выполнено, только я могу показать окончательное сообщение об успехе / неудаче пользователю на данный момент. Но я
хотите выйти после вызова executeTask (), передавая taskList и ожидая ниже результата -
1) метод executeTask () должен продолжить обработку отправленных данных даже после выхода из метода.
2) Я отправлю пользователя на страницу успеха с сообщением - Ваш запрос был успешно отправлен. После завершения выполнения задачи вы получите уведомление.
public List<String> executeTask(List<Task> taskList){
List<String> executionStatusList = new ArrayList<String>();
Process process = null;
for( Task task : taskList) {
try {
process = Runtime.getRuntime().exec(task );
if (process.waitFor() == 0) {
int exitVal = process.exitValue();
executionStatusList.add("SUCCESS");
} else {
executionStatusList.add("ERROR");
break; //Since error occured while processing the task , exiting without processing other task with error status.
}
} catch (IOException ioException) {
//LOGS
} catch (InterruptedException intrruptdExcptn) {
//LOGS
} finally {
if (null != process) {
process.destroy();
executionStatusList.add("SUCCESS");
} else {
executionStatusList.add("ERROR");
break; //Since error occured while processing the task , exiting without processing other task with error status.
}
}
}
return executionStatusList;
}