![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Andrey1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Я так понимаю, что чтобы создать процесс, который бы постоянно жил на сервере нужно использовать EJB?
-------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
| ekr |
|
|||
![]() ...и это пройдет... ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 6.5.2007 Где: Moscow, RU Репутация: 12 Всего: 19 |
Оптимальный вариант - настроить таймер и дергать по нему MDB EJB.
Можно при старте сервера пустить фоновой поток, но это не очень красивое решение. Все зависит от задачи. Может, проясните задачу? |
|||
|
||||
| Andrey1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Задач несколько
1) Есть некий сервер вычислений, которому нужно посылать запросы на вычисления (сейчас реализовано - через сокеты), после чего результаты вычислений сохранить в базе и отображать их пользователю (чтобы пользователь не ждал, пока вычисления закончатся). Я так понимаю, что нужно либо поднимать клиента к серверу в сессии, или использовать EJB... В первом случае, нада наследоваться от AbstractSessionBean, инициализтроваться в init() и передавать данные для JavaBean страницек через getter"ы и setter"ы ?... 2) DataSource к базе, я так понял, можно тоже через сессию поднимать... 3) Есть сканер данных, который щас живет своей жизнью в java-библиотеке и должен быть запущен построянно. Пока нет особых причин помещать его на application server, но может когда-нибудь и придется... -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
| ekr |
|
||||||
![]() ...и это пройдет... ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 6.5.2007 Где: Moscow, RU Репутация: 12 Всего: 19 |
Если вычисления сравнительно быстрые, то стоит использовать Session EJB. Там ничего не надо делать с сокетами - контейнер все сделает. Вызов их - синхронный, т.е. клиент заблокирован на время отработки метода.
Если вычисления медленные - стоит использовать MDB (Message-driven). В этом случае посылается JMS-сообщение (это быстрый процесс), и оно будет обрабатываться MDB, а клиент будет заниматься своими делами. То есть запуск логики - асинхронный.
Нет. Контейнер постоянно слушает сокеты и сам запустит метод бина. Руками ничего не нужно б бине слушать.
Нет.
DS поддерживается контейнером, надо только единожды сконфигурировать. Пусть живет как живет ) |
||||||
|
|||||||
| Andrey1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
С сокетами уже все сделано, сервер вычислений общается через некоторый сокетный протокол Я имел ввиду, что может вообще не юзать EJB, а юзать обычный JSF AbstractSessionBean... Это сообщение отредактировал(а) Andrey1 - 9.4.2008, 17:14 -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
| mbasil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Если результаты вычислений лежат в одной таблице базы данных и получение их - замкнутая задача, нет смысла использовать EJB, проще написать JSP (или сервлет). JSP обращается к объекту, реализующему шаблон DAO, который получает из пула подключение и делает запрос в базу, передавая данные обратно JSP, которая собственно и форматирует данные.
Все это при условии, что упомянутый вами процесс "запихивает" результаты расчетов в базу с некоторым периодом, работая независимо от сервера приложений и клиентов, получающих результаты. Сваять это просто, если Вы знаете - как работают все составные компоненты. И похоже, что для такой задачи, управляемые сообщениями компоненты не подойдут, так как асинхронная работа однозначно замедлит время отклика, а пользователю, как я понял - не терпится. Впрочем, если надо, чтобы клиент работал не через HTTP протокол, а непременно через RMI/IIOP, тогда, видимо сеансовый компонент без сохранения состояния, а он к компоненту сущности, смотрящему в базу ... Это сообщение отредактировал(а) mbasil - 9.4.2008, 16:16 |
|||
|
||||
| Andrey1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Надо как-то создать Thread для клиента, независимый от страницы, который подождет данные от сервера, применит несложную логику и переложит пришедшие данные в таблицы для просмотра... Типа... клиент заходит на страницу, жмет кнопку "вычислить" и идет дальше гуляет... а когда вычислилось, данные отображаются на этой же странице. Это сообщение отредактировал(а) Andrey1 - 9.4.2008, 17:22 -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
| mindflyer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.10.2004 Где: Smolensk, Russia Репутация: 3 Всего: 4 |
А почему это не красивое решение? Из идеологических соображений? Тот же JBoss построен на сервисах в виде MBean'ов и многие внутренние сервисы стартуют как фоновые потоки. Мы по аналогии сделали так же - куча сервисов работает в фоновых потоках, просыпаясь по расписанию, MDB вообще не используем. Чем это можеть быть плохо? Я не ради спора спрашиваю, а чтобы понять, может быть мы что-то упустили. |
|||
|
||||
| mbasil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
to Andrey1
Вы же сами пишете "чтобы пользователь не ждал". То есть, чтобы клиент не ждал вы делаете предварительные вычисления и укладываете их в базу. А потом предлагаете использовать медленный асинхронный способ их получения (компоненты управляемые сообщениями). Эти компоненты для того и созданы, чтобы обслуживать медленные процессы. Что у вас за клиент, через какой протокол он работает? Если это HTTP и клиент работает через браузер, это одно дело. Если клиент Java приложение, которое должно работать устойчиво через RMI - другое. И уж до полноты картины клиент может работать через web службы. КАЖДОЕ ИЗ ЭТИХ ТЕХНИЧЕСКИХ РЕШЕНИЙ ДИКТУЕТ СВОЙ ПОДХОД и свои решения. |
|||
|
||||
| Andrey1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Конкретное вычисление должен запускать пользователь, нажав на соответствующую кнопку. -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
| mbasil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Все равно, наилучшее решение зависит от множества факторов, связанных с механизмом работы клиента.
Например, если клиент работает через HTTP протокол с сервером приложения (возможно, в браузере) можно через запрос инициировать вычисления и продолжать работать. А потом результаты получить через динамический JavaScript (Ajax). Конечно это при условии возможности получения клиентом результатов в форме HTL или XML. Если объем данных результатов вычислений невелик и не требуется сохранять их надолго, возможно дучшим решением будет сохранять их в рамках сеанса и выбрасывать в мусор после получения клиентом. EJB MDB тоже неплохо, но только в том случае, если не для одной этой задачи, а при работе существенной части бизнес логики приложения через EJB. |
|||
|
||||
| ekr |
|
|||
![]() ...и это пройдет... ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 6.5.2007 Где: Moscow, RU Репутация: 12 Всего: 19 |
Если фоновой поток реализует логику, не используя инфраструктуру J2EE, то все неплохо. Но если нужно в нем использовать j2ee-шные сервисы безопасности и распределенных транзакций, то все плёхо ( |
|||
|
||||
| Andrey1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Хотя, пока можно таки обойтись без EJB: можно создать очередь вычислений, куда клиент будет помещать задачи. А независимый процесс (даже быть может вне application server"а) будет брать задачи, вычислять их и складывать результаты, которые можно будет просматривать через интерфейс...
Это сообщение отредактировал(а) Andrey1 - 11.4.2008, 10:28 -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |