Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Параллельный процесс - только через EJB? 
:(
    Опции темы
Andrey1
Дата 9.4.2008, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 27.2.2004
Где: Moscow

Репутация: 2
Всего: 5



Я так понимаю, что чтобы создать процесс, который бы постоянно жил на сервере нужно использовать EJB? 


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
ekr
Дата 9.4.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



Оптимальный вариант - настроить таймер и дергать по нему MDB EJB.
Можно при старте сервера пустить фоновой поток, но это не очень красивое решение. Все зависит от задачи.

Может, проясните задачу?


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Andrey1
Дата 9.4.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 27.2.2004
Где: Moscow

Репутация: 2
Всего: 5



Задач несколько smile :
1) Есть некий сервер вычислений, которому нужно посылать запросы на вычисления (сейчас реализовано - через сокеты), после чего результаты вычислений сохранить в базе и отображать их пользователю (чтобы пользователь не ждал, пока вычисления закончатся). Я так понимаю, что нужно либо поднимать клиента к серверу в сессии, или использовать EJB...
В первом случае, нада наследоваться от AbstractSessionBean, инициализтроваться в init() и передавать данные для JavaBean страницек через getter"ы и setter"ы ?...
2) DataSource к базе, я так понял, можно тоже через сессию поднимать...
3) Есть сканер данных, который щас живет своей жизнью в java-библиотеке и должен быть запущен построянно. Пока нет особых причин помещать его на application server, но может когда-нибудь и придется...


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
ekr
Дата 9.4.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



Если вычисления сравнительно быстрые, то стоит использовать Session EJB. Там ничего не надо делать с сокетами - контейнер все сделает. Вызов их - синхронный, т.е. клиент заблокирован на время отработки метода.
Если вычисления медленные - стоит использовать MDB (Message-driven). В этом случае посылается JMS-сообщение (это быстрый процесс), и оно будет обрабатываться MDB, а клиент будет заниматься своими делами. То есть запуск логики - асинхронный.

Цитата(Andrey1 @  9.4.2008,  15:10 Найти цитируемый пост)
Я так понимаю, что нужно либо поднимать клиента к серверу в сессии, или использовать EJB

Нет. Контейнер постоянно слушает сокеты и сам запустит метод бина. Руками ничего не нужно б бине слушать.

Цитата(Andrey1 @  9.4.2008,  15:10 Найти цитируемый пост)
В первом случае, нада наследоваться от AbstractSessionBean, инициализтроваться в init() и передавать данные для JavaBean страницек через getter"ы и setter"ы ?...

Нет.

Цитата(Andrey1 @  9.4.2008,  15:10 Найти цитируемый пост)
DataSource к базе, я так понял, можно тоже через сессию поднимать...

DS поддерживается контейнером, надо только единожды сконфигурировать.


Цитата(Andrey1 @  9.4.2008,  15:10 Найти цитируемый пост)
Есть сканер данных, который щас живет своей жизнью в java-библиотеке и должен быть запущен построянно. Пока нет особых причин помещать его на application server, но может когда-нибудь и придется...

Пусть живет как живет )



--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Andrey1
Дата 9.4.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 27.2.2004
Где: Moscow

Репутация: 2
Всего: 5



Цитата(ekr @  9.4.2008,  15:23 Найти цитируемый пост)
Там ничего не надо делать с сокетами - контейнер все сделает. 

С сокетами уже все сделано, сервер вычислений общается через некоторый сокетный протокол smile.
Цитата(ekr @  9.4.2008,  15:23 Найти цитируемый пост)
Нет.

Я имел ввиду, что может вообще не юзать EJB, а юзать обычный JSF AbstractSessionBean...



Это сообщение отредактировал(а) Andrey1 - 9.4.2008, 17:14


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
mbasil
Дата 9.4.2008, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



Если результаты вычислений лежат в одной таблице базы данных и получение их - замкнутая задача, нет смысла использовать EJB, проще написать JSP (или сервлет). JSP  обращается к объекту, реализующему шаблон DAO, который получает из пула подключение и делает запрос в базу, передавая данные обратно JSP, которая собственно и форматирует данные. 
Все это при условии, что упомянутый вами процесс "запихивает" результаты расчетов в базу с некоторым периодом, работая независимо от сервера приложений и клиентов, получающих результаты.
Сваять это просто, если Вы знаете - как работают все составные компоненты.
 
И похоже, что для такой задачи, управляемые сообщениями компоненты не подойдут, так как асинхронная работа однозначно замедлит время отклика, а пользователю, как я понял - не терпится.
Впрочем, если надо, чтобы клиент работал не через HTTP протокол, а непременно через RMI/IIOP, тогда, видимо сеансовый компонент без сохранения состояния, а он к компоненту сущности, смотрящему в базу ...

Это сообщение отредактировал(а) mbasil - 9.4.2008, 16:16
PM MAIL   Вверх
Andrey1
Дата 9.4.2008, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 27.2.2004
Где: Moscow

Репутация: 2
Всего: 5



Цитата(mbasil @  9.4.2008,  16:10 Найти цитируемый пост)
...нет смысла использовать EJB, проще написать JSP (или сервлет)...

Надо как-то создать Thread для клиента, независимый от страницы, который подождет данные от сервера, применит несложную логику и  переложит пришедшие данные в таблицы для просмотра...
Типа... клиент заходит на страницу, жмет кнопку "вычислить" и идет дальше гуляет... а когда вычислилось, данные отображаются на этой  же странице.

Это сообщение отредактировал(а) Andrey1 - 9.4.2008, 17:22


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
mindflyer
Дата 9.4.2008, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.10.2004
Где: Smolensk, Russia

Репутация: 3
Всего: 4



Цитата(ekr @  9.4.2008,  13:25 Найти цитируемый пост)
Оптимальный вариант - настроить таймер и дергать по нему MDB EJB.
Можно при старте сервера пустить фоновой поток, но это не очень красивое решение. Все зависит от задачи.

А почему это не красивое решение? Из идеологических соображений? Тот же JBoss построен на сервисах в виде MBean'ов и многие внутренние сервисы стартуют как фоновые потоки. Мы по аналогии сделали так же - куча сервисов работает в фоновых потоках, просыпаясь по расписанию, MDB вообще не используем. Чем это можеть быть плохо? Я не ради спора спрашиваю, а чтобы понять, может быть мы что-то упустили.
PM MAIL ICQ   Вверх
mbasil
Дата 9.4.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



to Andrey1
Вы же сами пишете "чтобы пользователь не ждал". То есть, чтобы клиент не ждал вы делаете предварительные вычисления и укладываете их в базу. А потом предлагаете использовать медленный асинхронный способ их получения (компоненты управляемые сообщениями). Эти компоненты для того и созданы, чтобы обслуживать медленные процессы.
Что у вас за клиент, через какой протокол он работает?
Если это HTTP и клиент работает через браузер, это одно дело.
Если клиент Java приложение, которое должно работать устойчиво через RMI - другое.
И уж до полноты картины клиент может работать через web службы.
КАЖДОЕ ИЗ ЭТИХ ТЕХНИЧЕСКИХ РЕШЕНИЙ ДИКТУЕТ СВОЙ ПОДХОД и свои решения.
PM MAIL   Вверх
Andrey1
Дата 10.4.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 27.2.2004
Где: Moscow

Репутация: 2
Всего: 5



Цитата(mbasil @  9.4.2008,  18:17 Найти цитируемый пост)
То есть, чтобы клиент не ждал вы делаете предварительные вычисления и укладываете их в базу.

Конкретное вычисление должен запускать пользователь, нажав на соответствующую кнопку.


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
mbasil
Дата 10.4.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



Все равно, наилучшее решение зависит от множества факторов, связанных с механизмом работы клиента.

Например, если клиент работает через HTTP протокол с сервером приложения (возможно, в браузере) можно через запрос инициировать вычисления и продолжать работать. А потом результаты получить через динамический JavaScript (Ajax). Конечно это при условии возможности получения клиентом результатов в форме HTL или XML.

Если объем данных результатов вычислений невелик и не требуется сохранять их надолго, возможно дучшим решением будет сохранять их в рамках сеанса и выбрасывать в мусор после получения клиентом.

EJB MDB тоже неплохо, но только в том случае, если не для одной этой задачи, а при работе существенной части бизнес логики приложения через EJB.
PM MAIL   Вверх
ekr
Дата 10.4.2008, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



Цитата(mindflyer @  9.4.2008,  17:52 Найти цитируемый пост)
А почему это не красивое решение? Из идеологических соображений? Тот же JBoss построен на сервисах в виде MBean'ов и многие внутренние сервисы стартуют как фоновые потоки. Мы по аналогии сделали так же - куча сервисов работает в фоновых потоках, просыпаясь по расписанию, MDB вообще не используем. Чем это можеть быть плохо? Я не ради спора спрашиваю, а чтобы понять, может быть мы что-то упустили. 

Если фоновой поток реализует логику, не используя инфраструктуру J2EE, то все неплохо.
Но если нужно в нем использовать j2ee-шные сервисы безопасности и распределенных транзакций, то все плёхо (


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Andrey1
Дата 11.4.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 27.2.2004
Где: Moscow

Репутация: 2
Всего: 5



Хотя, пока можно таки обойтись без EJB: можно создать очередь вычислений, куда клиент будет помещать задачи. А независимый процесс (даже быть может вне application server"а) будет брать задачи, вычислять их и складывать результаты, которые можно будет просматривать через интерфейс...

Это сообщение отредактировал(а) Andrey1 - 11.4.2008, 10:28


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0806 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.