Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring mvc async task / 8 сообщений из 8, страница 1 из 1
04.08.2015, 09:49
    #39022291
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring mvc async task
Всем привет. Есть метод контроллера, который запускает выполнение долгой задачи:
Код: java
1.
2.
3.
4.
5.
6.
7.
@RequestMapping(value="/asyncStart", method=RequestMethod.GET)
    @ResponseBody
    public String asyncStart(HttpSession session) {
        Future<Report> report = commonService.longTask();
        session.setAttribute("report", report);
          return "startAsync";
    }


Сервисный метод:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Async
    public Future<Report> longTask() {
        int count = 0;
        Report report = new Report();
        report.setDescription("Task start!");
        try {
              while(count!=100){
                  count++;
                  Thread.sleep(1000);
                  report.setDescription("Task complete "+count);
              }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return new AsyncResult(report);
    }


Код: java
1.
2.
3.
4.
public class Report {
    private String description;
    ...
    set/get


Теперь я хочу смотреть ход выполнения моей задачи, делаю следующее:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
@RequestMapping(value = "/asyncResult", method=RequestMethod.GET)
    @ResponseBody
    public String reportStatus(HttpSession session) {
        Future<Report> report = (Future<Report>)session.getAttribute("report");
        try {
        Report result = report.get();
            if(report.isDone()) {
                return "COMPLETE";
            } else {
                return "STILL WORKING: " + result.getDescription();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
            return "---";
    }


Весь процесс естественно "залипает" на строчке report.get();, т.е. по сути я не вижу реальный ход выполнения моей задачи. Как сделать так, чтобы при каждом вызове /asyncResult выводилось: STILL WORKING: Task complete 27 и т.д.
Спасибо
...
Рейтинг: 0 / 0
04.08.2015, 10:22
    #39022311
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring mvc async task
JulT,

JavaDoc почитать не вариант?
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html
...
Рейтинг: 0 / 0
04.08.2015, 10:24
    #39022314
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring mvc async task
На счет того чтобы обновлять прогресс, то в Java Future нужного метода нет. Велосипед надо педалить самому. Прогресс надо передавать через Future, а не через результат работы (Report). В Guava, вроде, есть ListenableFuture
...
Рейтинг: 0 / 0
04.08.2015, 10:40
    #39022323
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring mvc async task
BlazkowiczНа счет того чтобы обновлять прогресс, то в Java Future нужного метода нет. Велосипед надо педалить самому. Прогресс надо передавать через Future, а не через результат работы (Report). В Guava, вроде, есть ListenableFuture
Спасибо!
...
Рейтинг: 0 / 0
04.08.2015, 10:46
    #39022329
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring mvc async task
...
Рейтинг: 0 / 0
04.08.2015, 10:53
    #39022336
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring mvc async task
BlazkowiczJulT,

http://stackoverflow.com/questions/10899635/spring-mvc-how-to-get-progress-of-running-async-task
Спасибо. А если в:
Код: java
1.
2.
while(count!=100){
                  count++;


добавить что-то типа:
Код: java
1.
session.setAttribute("count", count);

и после при вызове /asyncResult доставать оттуда этот count и показывать пользователю?
или это тупо? если да, почему?
...
Рейтинг: 0 / 0
04.08.2015, 10:58
    #39022339
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring mvc async task
...
Рейтинг: 0 / 0
04.08.2015, 11:08
    #39022348
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring mvc async task
JulTили это тупо? если да, почему?
разработчики контейнера вдруг решили, что отныне сам программист будет следить за потокобезопасностью.
Если лень что писать, 1) сохраняй проценты в БД и показывай.
2)Для десктопа синхронизируй с основным потоком ГУИ.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring mvc async task / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]