GWT: Gotcha's - PullRequest
       11

GWT: Gotcha's

9 голосов
/ 12 мая 2009

Моя команда начинает свой первый проект GWT. Мы довольно сильны в приложениях Swing, и почти вся наша работа связана со значительными графическими интерфейсами Swing.

Однако, это наш самый первый выход из рабочего стола и в Интернет, и проект требует от нас использования GWT. Сам проект довольно прост, единственное, что нам неизвестно - это замена интерфейса Swing на интерфейс GWT.

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

Ответы [ 8 ]

11 голосов
/ 12 мая 2009

Я могу думать о нескольких:

  • Все асинхронно. Ну, во всяком случае, что-нибудь сервис-ориентированное. В то время как Swing иногда действует таким образом через SwingWorkers и тому подобное, Swing принципиально синхронен через EDT (поток диспетчеризации событий). Это может занять некоторое время, чтобы привыкнуть;
  • Вас ждет мир больно, известный как CSS и кросс-браузерная совместимость. Хотя GWT маскирует многие различия между браузерами, он, конечно, не маскирует их все, и вы можете часами искать источник строки пикселей в GWT так же, как и на обычном веб-сайте;
  • Для Swing ресурсов гораздо меньше, чем для GWT;
  • Вы можете использовать только определенные классы на стороне клиента. Тот, который всегда вызывал у меня проблемы, был BigDecimal;
  • Ваш выбор виджетов гораздо более ограничен. Что бы вы ни делали, избегайте ExtGWT, как чумы. Дэрилс похож на Джеффри Дамера из дженериков;
  • Убедитесь, что вы используете GWT 1.6;
  • Время компиляции на GWT просто ужасно;
  • Если вы просто вносите изменения в клиент (т.е. вы не меняете какие-либо интерфейсы служб), вам не нужно перестраивать, чтобы увидеть эти изменения. Просто обновите в размещенном браузере;
  • Для изменений в серверном коде, который не меняет интерфейсы, убедитесь, что у вас есть задача Ant или Maven для перестроения и повторного развертывания ваших классов без перестройки GWT;
  • Вы можете указать размещенный браузер на что-то кроме размещенного сервера и выполнить отладку с его помощью; и
  • Убедитесь, что на вашей машине много оперативной памяти. Моя IDE в некоторых приложениях выходила бы из-за ошибок памяти, если бы ей было выделено менее одного гигабайта оперативной памяти, и это были не огромные приложения. Я бы порекомендовал абсолютный минимум оперативной памяти 2 гигабайта, желательно 3 или более.
7 голосов
/ 12 мая 2009

Не используется GIN и Guice . Внедрение зависимостей очень и очень полезно. GIN (Guice for GWT) не очень хорошо задокументирован, но стоит потраченного времени, потраченного на то, чтобы заставить его работать.

3 голосов
/ 12 мая 2009

Чтобы расширить сказанное Cletus об «определенных классах», у вас нет полной JRE на стороне клиента GWT. (Помните, клиентский код GWT Java переведен на JavaScript.) Это означает, что сторонние API Java часто не работают на стороне клиента. Их нужно перенести на GWT. Так много для того, чтобы написать один раз, бежать везде. См. здесь для получения дополнительной информации об этом ограничении.

2 голосов
/ 12 мая 2009

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

Создание элементов DOM может быть очень медленным в некоторых браузерах. Если у вас часто меняются таблицы большого размера (десятки строк), браузер может перестать отвечать, если вы просто удалите все строки и создадите их заново. Нам пришлось написать алгоритм сравнения, чтобы эффективно обновлять таблицы при получении нового содержимого с сервера.

1 голос
/ 13 мая 2009

Один важный момент, о котором следует помнить, это тестирование. Тестирование свинг-приложения с помощью Junit в основном простое, но для того, чтобы получить такой уровень покрытия в gwt-приложении, вам нужно расширить свой арсенал.

  1. Straight junit - подходит для классов / утилит моделей, которые не ссылаются ни на одну из сред выполнения gwt. Просто напишите и запустите ваши тесты как обычный junit, просто убедитесь, что gwt не пытается скомпилировать ваш тестовый код в ваш модуль. Вы не можете всегда учитывать ваши классы, чтобы получить такое освещение, но когда вы можете сделать это здорово и быстро.
  2. GWTTestCase / junit - это специальный подкласс TestCase (в стиле junit3), который загрузит некоторое время выполнения gwt для тестового запуска. По моему опыту, слишком сложно получить хорошее освещение и слишком медленно, чтобы быть полезным. Прочитайте это для получения дополнительной информации по этому вопросу.
  3. Selenium - Это обеспечит вам охват в браузере (и лично мой любимый подход). Если вы используете java selenium-rc и комбинируете его с jetty для обслуживания тестируемого приложения, вы можете даже смоделировать вызовы rpc, чтобы полностью протестировать ваш пользовательский интерфейс. У вас также есть возможность запускать тесты во всех основных браузерах.
1 голос
/ 13 мая 2009

Большинство из них по-прежнему на 100% соответствуют тому, что вы хотите сделать:

Самые большие ловушки GWT?

Чтобы конкретно обратиться к переходу Swing -> GWT, есть одно простое правило:

  • GWT - это не Swing, и чтобы создать хорошее приложение, вы всегда должны знать на каком-то уровне, какой тип HTML будут создаваться созданными вами виджетами, и время от времени вам придется ломать голову и изменять некоторые поведения или даже код некоторых пользовательских частей в JavaScript или HTML.
0 голосов
/ 05 августа 2009

Даже с 4 гигабайтами оперативной памяти у вас могут возникнуть проблемы при компиляции приложения (на GWT 1.6 и более ранних версиях). Я не могу скомпилировать наше (довольно большое) приложение на работе, используя Maven / что угодно. Хостинговый режим работает нормально, но никакие настройки (увеличение памяти vm до 2 гигабайт и т. Д.), Похоже, не решают эту проблему.

0 голосов
/ 12 мая 2009

Я столкнулся с проблемой, когда попытка заполнения таблиц через вложенную коллекцию не сработала, предположительно из-за того, что компилятор этого не понимал (проблема @ GWT list ). Обратите внимание, что это было около года назад, поэтому, возможно, это уже не так.

Вторая проблема (опять же, год назад, а может и не так) заключалась в том, что компиляция на 64-битном компьютере с 64-битной JVM не поддерживалась, поэтому мне понадобился отдельный 32-битный jvm и завершение задачи муравья, которая специально ссылается на это для настройки компиляции GWT.

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