Идеи для определения архитектуры Java для приложения Swing-JavaFX / RMI / EJB3.0 - PullRequest
0 голосов
/ 09 декабря 2010

Проблема

Мы участвуем в новом проекте по разработке приложения с несколькими ПК, которые будут выполнять роль компьютеров общего назначения. Есть также компьютер, который будет время от времени выступать в роли главной машины, чтобы получить контроль над всеми процессами клиентов. Этот компьютер должен отправить сообщение всем остальным через серверный компьютер с просьбой, например, зарегистрировать помощь. В это время процесс, запущенный на клиентских компьютерах, должен получить контроль над компьютером и действовать как подчиненный компьютер, на котором запущено это приложение, только до тех пор, пока с главного компьютера не будет отправлено новое сообщение об их освобождении. После этого клиентские машины снова действуют как компьютеры общего назначения.

Следующая схема пытается объяснить, что происходит после того, как CM (Control Machine) получает доступ к SM (ведомым машинам) через сервер (SRVR)

  1. Управляющая машина CM отправляет сообщение для регистрации помощи на сервер 2 SRVR принимает сообщение, регистрирует некоторую информацию и передает сообщение помощи регистрации в SM
  2. Работающий процесс SM, который ожидал сообщения, получает полный контроль над каждым SM
  3. Пользователь выбирает действие через представление в SM, и машина отправляет ответ на SRVR
  4. SRVR получает ответ и передает его всем машинам, включая машину результатов (RM), чтобы обновить представления с новым состоянием на сервере (SRVR)
  5. КМ отправляет сообщение о завершении регистрации в SRVR.
  6. SRVR передает сообщение всем SM, представление приложения закрывается и приложение снова переходит в состояние прослушивания.

Заявлено, что:

  • Все должно быть сделано в какой-то технологии Java
  • Все машины работают под управлением GNU / Linux / Gnome (Ubuntu)
  • JPA обязательна для регистрации и сохранения
  • JavaFX изменится в соответствии с Oracle, потому что они думают отказаться от языка сценариев

Вопросы:

  1. Какую смесь Java-технологий вы бы использовали для просмотра? Мое мнение - использовать Swing и, возможно, внедрить его в FX через SwingComponent.wrap (loginPanel), чтобы помочь графическим дизайнерам лучше визуально работать (обязательно в этом приложении). Пожалуйста, рассмотрите варианты привязки JSR-295 (сейчас, как я вижу, мертв) или какую-то адекватную альтернативу.

  2. Как бы вы поддерживали обновленный клиент приложения, моё мнение - через Java Web Start и служащий им как апплет.

  3. Это нормально, если SRVR использует Java EE с EJB 3.0 для доступа к удаленным объектам? Если так, как бы вы интегрировали / model / EJB с RMI. У меня нет большого опыта интеграции RMI / EJB, и я не уверен, что это правильно. Тем более, что спецификация EJB уже доверяет RMI. Но тогда как транслировать сообщения от сессионного компонента (с сохранением состояния, как я вижу), чтобы обновить представление?

  4. Любая опция, выбранная в SM, должна просматриваться во всех видах (другие SM, RM и CM), зарегистрированных в качестве наблюдателей. Вы бы предложили модель / архитектуру / продукты для этого.

  5. Какой правильный способ заставить приложение SM получить полный контроль после пробуждения его процесса? -помните, это Linux-

  6. Как шаблон наблюдателя должен применяться в распределенном контексте?

  7. Правильно ли установлено HW для этого приложения?

Я знаю, что это много вопросов, и я не пытаюсь начать обсуждение по этому поводу, я знаю, что может быть много разных мнений, и мне интересно услышать все из них, включая детали реализации. Жду ваших отзывов, ребята, ваше мнение будет высоко оценено. Заранее спасибо!

1 Ответ

0 голосов
/ 09 июня 2011

Ну, вот как я решил это.

1.Какую смесь Java-технологий вы бы использовали для представления?Мое мнение - использовать Swing и, возможно, внедрить его в FX через SwingComponent.wrap (loginPanel), чтобы помочь графическим дизайнерам лучше визуально работать (обязательно в этом приложении).Пожалуйста, рассмотрите варианты привязки JSR-295 (сейчас, как я вижу, мертвый) или некоторую адекватную альтернативу.

В этом случае использовался Swing, из соображений, что это была наиболее стабильная технология, и если послевся JavaFX будет библиотекой, которую можно использовать после, чтобы придать лучшую сторону приложению, на данный момент представление было настроено с использованием Swing LAF

2.Как бы вы поддерживали обновленный клиент приложения, я думаю, что это через Java Web Start и его использование в качестве апплета.

Требование было предоставлено через сценарии оболочки и ssh.После некоторого обновления клиентское приложение повторно развертывается на клиентском компьютере

3.Это нормально, если SRVR использует JEE с EJB 3.0 для доступа к удаленным объектам?Если так, как бы вы интегрировали / model / EJB с RMI.У меня нет большого опыта интеграции RMI / EJB, и я не уверен, что это правильно.Тем более, что спецификация EJB уже доверяет RMI.Но тогда как транслировать сообщения от сессионного компонента (с сохранением состояния, как я вижу) для обновления представления?

Архитектура RMI проста.В этом случае приложение JBoss AS было клиентом сервера RMI, развернутого на каждом клиентском компьютере через rmiregistry.Когда клиентское приложение запускается, заглушка RMI, которая является единственным разделяемым классом между сервером и клиентом, этот интерфейс позволяет вызывать методы клиента.Будьте осторожны, чтобы ваши классы моделей JPA были сериализуемыми.

4.Любая опция, выбранная в SM, должна просматриваться во всех представлениях (другие SM, RM и CM), зарегистрированных в качестве наблюдателей.Не могли бы вы предложить модель / архитектуру / продукты для этого.

Это достигается так же, как указано в предыдущем пункте, но важное примечание заключается в том, что RMI не поддерживает многоадресные сообщения, поэтому будьте осторожныесли вам требуется обмен сообщениями со многими зарегистрированными клиентами, потому что если у вас есть 100 машин, которые передают сообщения друг другу, это означает, что сообщения 100x100 отправляются по сети.

5.Какой правильный способ заставить приложение SM получить полный контроль после пробуждения его процесса?-помните, это Linux-

Ну, в JFrame Java Swing есть способ поддерживать окно ALWAYS_ON_TOP.Если вы объедините это с UNDECORATED_FRAME, другие приложения останутся работающими, но они никогда не достигнут фокуса.

6.Как шаблон наблюдателя должен применяться в распределенном контексте?

Он применяется точно так же, мы просто должны быть осторожны, когда регистрировать наблюдателей и когда их отменять.

7.Правильно ли установлено HW для этого приложения?

Аппаратное обеспечение было развернуто так, как показано на рисунке, включенном в вопрос.

Благодаря всему, что хотя бы проверило вопрос,

...