| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > паралельный запуск |
| Автор: sergioK1 13.9.2015, 15:12 | ||
Имеется sрring conroller
Задача запустить работу над этим обьектом в отдельном таске, поесть конторолер уже отработал а работа над обьектом еще может продолжаться , Я обдумываю вариант запустить отдельный процесс и ему через pipe передать этот обьект , Я не могу сообразить как создать поток чтобы он гарантированно продолжал работать , после окончания работы контролера , Какие есть варианты ? |
| Автор: CPlusPlusFAN 13.9.2015, 18:02 |
| Вернуть из контроллера Future? |
| Автор: Samotnik 13.9.2015, 20:27 |
| Как вариант: В контролере создавай новый поток или сколько тебе нужно. Передавай туда объекты и спокойно обрабатывай. Создай второй контроллер, который будет возвращать результат по некому "айди запроса" который ты сам можешь генерировать. Добавлено через 1 минуту и 36 секунд т.е. фактически первый контроллер возвращает айди запроса, он берет объекты на обработку, а некий веб сервис типо getResult будет тебе по айди запроса возвращать результат и статус. |
| Автор: d_k 14.9.2015, 08:14 |
| нехорошо на вебе порождать потоки самому. Через механизм очередей и фоновый обработчик было бы интереснее |
| Автор: Samotnik 14.9.2015, 08:42 |
| d_k, |
| Автор: d_k 14.9.2015, 10:18 |
| Судя по RequestMapping - используется спринг, спека EE не при чем. Хотя даже в ее рамках ИМХО, порождать потоки которые не управляются контейнером - не айс. Ранее сан еще предостерегал разработчиков от порождения потоков на уровне EJB, сейчас дали послабление через конкарренси апи, а толку то? попытка угнаться за тем же самым спрингом? я не настаиваю, но старый и хорошо зарекомендовавший подход возложить обработку на фоновый процесс через очереди, а веб оставить для хорошего респонс тайма кажется привлекательней. Да и ресурсы сервера не тратятся и управлять обработкой проще настроив пулы обработчиков. В решении в лоб (порождать экзекъюторы на вебе), можно гарантированно положить сервер примитивным ДДОСом, если операция обработки сообщения занимает приличное время память и цпу. ЗЫ: спека спекой, но под конкретную задачу - конкретный рецепт. панацеи нет))) ЗЗЫ: холиварить не собирался, просто высказал свое мнение |
| Автор: leniviy 14.9.2015, 11:24 |
| А нельзя использовать аякс? Пусть сервлет выполняется синхронно. Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/paralelny-zapusk-id55f568c9ae20155b408b4567#findElement_E7045_55f68439ae20157b1e7f5d57_0 |
| Автор: mailer 14.9.2015, 11:32 |
| http://spring-projects.ru/guides/async-method/ как это делается в Спринге Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/paralelny-zapusk-id55f568c9ae20155b408b4567#findElement_E7045_55f68610ae2015831e7f5e38_0 |
| Автор: CPlusPlusFAN 14.9.2015, 20:11 |
Ну я это с самого начала предложил. Спринг умеет это делать - пускай делает. |
| Автор: sergioK1 17.9.2015, 22:50 | ||||
Cпринг применяют там где есть аспекты, тут аспектов нет, ты делаешь так ?
или его разновидности ? d_k видимо имеет ввиду пользовать конфигурацию томката через JNDI. Я пока не могу найти пример как жто сделать . |
| Автор: sergioK1 16.4.2016, 15:38 | ||||
задача проста как три копейки Все что нужно это отсылать данные клиенту каждые пару секунд, Сервис с обращением к бд сделать в потоке не проблема проблема в том что есть контолер ,
нужно из него возвращать результат каждые 3-5секунд тоесть но response больше одного раза отправить нельзя , можно переделать на WebSockets но мне лень менять код клиента , как это переделать с минимумом лишних телодвижений ? |