Как разработать модульное корпоративное приложение, используя только GWT - PullRequest
2 голосов
/ 21 октября 2010

Привет, я хочу спроектировать и разработать крупное корпоративное приложение, используя только GWT на стороне клиента.Я хочу разбить это корпоративное приложение на части, и я называю каждое из них модулем (или пакетом, или портлетом, или чем-то еще!).Эти модули могут иметь отношение друг к другу и могут вызывать некоторые службы, которые существуют в других модулях (как на стороне клиента, так и на стороне сервера).

Проблема заключается в том, что эти модули должны быть предназначены , Разработано , Скомпилировано и Развернуто независимо и Динамически , и они будут размещены и показаны вместе в одном контексте на клиенте и зависимости между модулямидолжно быть управляемым (как на стороне клиента, так и на стороне сервера).

Что я могу сделать?Какие технологии я могу использовать для создания такого корпоративного приложения?

Когда вы разрабатываете приложение, которое не разделено на части (как я уже говорил), вы можете легко развернуть ваше приложение после создания проекта, но когда вы изменяете только одну форму в своем приложении, вы должны создатьснова все приложение и разверните все приложение.

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

Конечно, я искал способ решить мою проблему !!!Я обнаружил, что могу использовать OSGI на стороне сервера, потому что он обеспечивает модульность на уровне разработки программного обеспечения и помогает мне управлять жизненным циклом модулей и многими другими известными вам преимуществами!И я обнаружил, что могу использовать гаджеты на стороне клиента.

Как вы думаете?Это хороший выбор?

Если это хороший выбор, как я могу начать?Я знаю, что у нас есть разные реализации OSGi, такие как Apache Felix, Eclipse Equinox и Knopflerfish.Какой из них хорош для этого выбора?

Как можно интегрировать GWT и OSGi?Как они могут взаимодействовать друг с другом?

Ответы [ 3 ]

4 голосов
/ 23 октября 2010

К сожалению, то, что вы хотите сделать, не полностью возможно с GWT.

OSGi - это модульное решение для Java или, точнее, JVM.Клиентское приложение GWT не запускается на JVM, оно запускается в браузере в среде JavaScript.Поэтому OSGi нельзя использовать для создания собранных во время выполнения модульных приложений GWT.

Приложение GWT может быть модульным на уровне источника, но модули должны быть собраны в приложение во время сборки.Результирующая среда выполнения монолитна.

Однако вполне возможно использовать OSGi для размещения сервлетов GWT, и вы можете использовать всю мощь модульности среды выполнения OSGi на стороне сервера.

КакВ качестве альтернативы вы можете посмотреть на Ваадина.Это веб-инфраструктура, которая использует GWT для предоставления виджетов, но логика приложения работает на сервере.В результате он поддерживает полную модульность во время выполнения через пакеты OSGi.Однако такой подход обходится дорого: ваше веб-приложение довольно болтливое, и между браузером и сервером происходит гораздо больше общения, чем в GWT или в традиционном веб-приложении.Вполне возможно, что этот подход не будет масштабироваться для очень большого числа пользователей.

Что касается использования Equinox, Felix или Knopflerfish ... это действительно не имеет значения.Придерживайтесь спецификации, и вы можете легко переключаться между реализациями.

2 голосов
/ 12 марта 2014

Я сделал это два года назад: OSGi и GWT, чтобы не было простоев развертывания модулей проекта.

Вердикт: не делайте этого, если вам действительно не нужно.

Короче говоря, OSGi - зверь, и модернизация существующего приложения для него далеко не тривиальна . Вы больше не создаете файлы .war (.ear сейчас) и не можете использовать стандартные jars и репозитории Maven, которые вы использовали ранее. Теперь все должно быть в комплекте. Проблема в том, что многие вещи (GWT, Spring, тонны библиотек) не являются связками! И вам нужно будет найти их в репозитории корпоративных пакетов или, что еще интереснее, начать самостоятельно перебирать сторонние источники. Еще лучше сказать другим разработчикам переписать все, что использует их любимую библиотеку, потому что связывание было бы слишком сложным.

Партия GWT не заняла так много работы . То, как контексты для модулей обрабатывались в gwt-servlet, пришлось изменить, чтобы каждый модуль мог найти свой контекст на сервере. Нам также пришлось предоставить большинству служб GWT возможность регистрироваться / отменять регистрацию при загрузке и службу обнаружения, чтобы они могли знать, кто еще там был.

Теперь другая боль: проектный взрыв .

Допустим, у вас было 20 модулей, которые вы хотели развернуть независимо. Ну, во-первых, они, вероятно, более связаны, чем вы хотели бы, поэтому лучше потратить несколько недель, разбивая их на независимые проекты Maven и добавляя общие части в проект lib. Но теперь у вас есть куча зависимостей, которые нужно отслеживать. Когда кто-то настраивает ваш проект lib, вам нужно обновить каждый проект или только 7 из них? В классическом остановке мирового развертывания у вас была только одна версия всего вашего кода. Теперь вам нужно решить, потребует ли эта обновленная форма забытого пароля обновлять модуль страницы индекса. У вас будет тонна номеров версий, чтобы составить и отслеживать. В нашем случае на нашем CI-сервере мы все время строили 55 проектов Maven. Это означало, что некоторые проверки могут вызвать 55 сборок. Ик.

Наконец, JSON-интерфейсы .

Мы использовали GWT RPC. Это волшебно. Напишите интерфейс и все просто работает. Он также сериализован и разархивирован по проводам. Потрясающие. Но политики сериализации зависят от таблиц поиска объектов и строк, которые создаются во время компиляции для каждого модуля. Таким образом, проект A не может RPC для проекта B. Boo. Мы решили использовать JSON из-за постепенной деградации, которая не перестает работать, когда в объектах присутствуют новые нераспознанные свойства. Это означает, что вам снова понадобится способ сохранить все вызовы бэкэнд-сервиса согласованными с версиями JSON, которые они ожидают и могут обрабатывать. Лучше смоделируйте это живое обновление также заранее.

Итак, последнее слово: возможно, но почему? Нужно ли вам OSGi для горячего развертывания модулей , потому что вы работаете с критически важным для бизнеса приложением, работающим на 1000%? Или ваш босс / архитектор просто отказывается признать, что 99,999% - это достаточно хорошо? Вероятно, вам не нужно это время безотказной работы, и вы можете достичь почти 100% времени безотказной работы с хорошим прокси-сервером, чтобы вы могли получать экземпляры в / из пула балансировщика. Кроме того, не забывайте, что даже если вы можете обновить свои проекты в прямом эфире, я надеюсь, у вас есть способ обновить базу данных на лету, не прерывая ни одной транзакции.

1 голос
/ 25 октября 2010

Я думаю, что у вас больше головной боли, чем стоит.
Я бы пошел с развертыванием всего этого на поп. Если нет, вы получите несоответствующие части приложения, которые не синхронизированы друг с другом. GWT имеет компоненты как клиента, так и сервера, и их необходимо развертывать вместе. Если у вас политика нулевого времени простоя, возможно, у вас есть балансировка нагрузки.
Я бы использовал программное обеспечение для балансировки нагрузки для развертывания новой версии приложения. Выключите одну сторону (переместив весь трафик на другую сторону), разверните на ней, проведите быстрый тест на дым, переключите весь трафик на новую сторону и повторите со старой стороной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...