![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| VSergeyV |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 299 Регистрация: 9.5.2006 Где: Новосибирск Репутация: нет Всего: 3 |
ЗАДАЧА. Необходимо реализовать распределенную программу, предназначенную для внесения изменений в БД/несколько БД, необходимо
предусмотреть, что БД может быть удаленно недоступна (что реально бывает часто). Клиентский уровень необходимо реализовать с помощью Java Web Start, планируется что клиентский уровень общается с БД не на прямую а через какой-либо Java-сервер, на котором реализованы очереди и обработчик их - очередь поступивших заданий и очередь ответов клиенту о внесении изменений. На Java-сервере должнен быть некая "демоническая" составляющая, которая будет брать задание из очереди заданий и осуществлять попытку выполнить его, т.е. осуществить запрос к БД, в случае неудачи "демон" должен не убирать задание из очереди заданий, а в случае удачи убирать задание из очереди заданий и добавлять в очередь ответов клиенту необходимый ответ. Клиентское приложение общается с Java-сервер допустим через SOAP либо RMI. Вопрос 1. Как наиболее лучше реализовать очереди и обработчик очередей? Еще к вопросу 1. Можно использовать очереди JMS и допустим EJB компоненты управляемые сообщениями? Компоненты управляемые сообщениями вызывается тогда когда в очереди есть сообщения(объекты), более того насколько я помню, возможен вызов сразу нескольких обработчиков, каждый на одно сообщение, если в очереди более одного сообщения. При вызове обработчика - объекта EJB компонента управляемого сообщениями, происходит также автоматическое удаление объекта сообщения из очереди на которую он был "натравлен" для обработки. Если учеть, что допускается отсутствие соединения с БД, то необходимо будет сделать какую-нибудь задержку в EJB компоненте управляемом сообщениями... Оправдано ли сделать "тупенький" демон - зацикленный код с задержкой, который смотрит очередь запросов, пытается их выполнить, а также управляет очередями сообщений? Есть ли более совершенный способы реализации этих демонов, чем зацикленный код? Вопрос 2. Лучше использовать RMI или SOAP для взаимодействия клиентского приложения и приложения на сервере? Вопрос 3. А как бы Вы реализовали данную задачу? |
|||
|
||||
| tux |
|
||||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Собственно, саму очередь (добавление, удаление и выборку заданий) реализовать несложно. Что касается обработчика заданий... Кроме JMS можно использовать запуск заданий по расписанию, используя, например, Quartz. То есть запускаешь, скажем, каждые 10 минут задание, которое будет получать задания, пытаться выполнять запись в БД, ну и т.д.
Проще будет RMI, но у SOAP меньше проблем с вызовами в глобальных сетях, хотя и с RMI проблема решаема. Посмотри еще на протокол Hessian, он объединяет многие достоинства и того и другого. |
||||
|
|||||
| VSergeyV |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 299 Регистрация: 9.5.2006 Где: Новосибирск Репутация: нет Всего: 3 |
В общем случае, использование EJB компонентов и предусмотренного вызова их методов удаленными клиентами, позволяет вообще не использовать SOAP либо RMI? |
|||
|
||||
| VSergeyV |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 299 Регистрация: 9.5.2006 Где: Новосибирск Репутация: нет Всего: 3 |
А в J2EE 1.5 встроенного "пускателя" нет по расписнию? |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Позволяют. То есть в явном виде беспокиться о них не придется, но EJB-компоненты сами по себе работают через RMI-IIOP. В J2EE "пускателя" нет, есть в J2SE - класс java.util.Timer, но его возможности более ограничены. |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 7 Всего: 54 |
Таймер есть и в J2EE. -------------------- ![]() ![]() |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
||||
|
||||
| VSergeyV |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 299 Регистрация: 9.5.2006 Где: Новосибирск Репутация: нет Всего: 3 |
1) Я тоже за подробнеееее... 2) Пачему таймера в J2EE может не быть? Т.е. в чем проблема его отсутствия, в то время как в J2SE есть? Добавлено @ 10:50 И еще кто использовал Flux (http://www.fluxcorp.com/) или Quartz (http://www.opensymphony.com/quartz/)? Принципиально ли они нужны в решении данной задачи? Это сообщение отредактировал(а) VSergeyV - 24.7.2006, 14:45 |
||||
|
|||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 7 Всего: 54 |
Таймер появился в EJB 2.1 (J2EE 1.4). Вот, статейку нарыл: Using Timers in J2EE Applications.
В J2EE вообще (и в EJB в частности) не предусмотрено (и вряд ли будет предусмотрено) способов управления потоками. Для таймера же нужен выделенный поток. Это сообщение отредактировал(а) w1nd - 24.7.2006, 20:24 -------------------- ![]() ![]() |
|||
|
||||
![]()
|
| Правила форума "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. |