Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring: можно ли создать Thread?


Автор: Andrey1 26.8.2009, 16:39
Возник вопрос, если ли в Spring культурная поддержка Thread?

Мне нужно, чтобы при создании сессии создавался Thread, который будет работать все время, пока сессия жива (например, это может быть сканер, который складывает новые данные в базу и информирует клиента, что есть новые данные).

ЗЫ: Хотя, щас понимаю, что эти Thread"ы можно создавать поверх веб-фреймворка: в моем случае ZK-фреймворк что-то такое предлагает: http://docs.zkoss.org/wiki/Simple_and_Intuitive_Server_Push_with_a_Chat_Room_Example

Автор: MisterCleric 26.8.2009, 17:09
Для таких задач есть стандарт: JMS. А в Spring есть такой модуль http://www.springsource.org/spring-integration, который базируется на ESB. Все, что тебе надо это выполнять асинхронные задачи по какому-то событию.

Автор: Andrey1 26.8.2009, 17:57
Да, только события должны генерироваться внутри Thread"а...

Автор: MisterCleric 26.8.2009, 18:07
В каком-то посте я тебе рассказывал о sessionScope-бинах, в методе инициализации которых ты можешь запустить какой-нибудь таймед-таск, который будет с какой-то периодичностью повторяться. Или Quarz-триггер. А тот уже будет ложить в какую-то очередь сообщение что бы ложить нужные тебе объекты в базу и в другую очередь складировать сообщения о том, что что-то новое появилось. 
Потом смотришь в сторону 
http://www.google.com.ua/search?q=comet+ajax
и без участия пользователя показываешь изменения на странице. Задача интересная и, думаю, посильная. Будет очень красиво.
Почему ты привязался к этим Thread"ам - не понятно...

Автор: MisterCleric 27.8.2009, 11:12
Да, еще вспомнил такое. Есть у Spring такой классик AsyncTaskExecutor, типа удобный способ запустить задачу в отдельном потоке. Как-будто похоже на то, что ты спрашиваешь. Но где-то я читал, что не рекомендуется в J2EE-окружении запускать таким образом неконтролируемые контейнером потоки, и предлагается для решения асинхронных задач использовать JMS.

Автор: Andrey1 27.8.2009, 17:00
Цитата(MisterCleric @  27.8.2009,  11:12 Найти цитируемый пост)
Да, еще вспомнил такое. Есть у Spring такой классик AsyncTaskExecutor, типа удобный способ запустить задачу в отдельном потоке. Как-будто похоже на то, что ты спрашиваешь. 

Да, интересно, нужно будет посмотреть. 
Но пока я решил обойтись штатным средством для создания потоков в ZK.

Цитата
...предлагается для решения асинхронных задач использовать JMS

Да, но все равно где-то должен жить поток, который будет обсуживать JMS сообщения.

Автор: MisterCleric 27.8.2009, 17:54
Цитата

Да, но все равно где-то должен жить поток, который будет обсуживать JMS сообщения.


Это уже проблемы контейнера. Даже тот таймер, который, че-то делает с определенной периодичностью живет в отдельном потоке, но его обслуживает контейнер.
И еще такой интересный момент наблюдали с помощью JProfiler, что каждый HTTP-запрос порождает два потока, которые ложатся в пул. Вот и думай на своими потоками....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)