GWT 1.7 on SpringSource dm Server 2.0.0.M3 Part2

Previous background:

В этом посте я продолжу повествование о попытке запуска GWT приложения в виде OSGi бандла в dmServer-е. В предыдущем посте мы немного изменили структуру проекта, поправили сборку проекта с помошью Ant и запустили приложение в dmServer-е как обычный war-ник.

What next:

В данном посте мы попытаемся создать OSGi бандл из нашего war-ника и задеплоить его в dmServer, а также перевести сборку проекта с помошью Ant на Maven, что в будущем будет более эффективно и гибко. Let’s go)

Step 7: создаем бандлы зависимостей для нашего проекта

Чтобы использовать все прелести, предоставляемые OSGi-контейнером, jar-ники, находящиеся в репозитории контейнера, должны быть OSGi бандлами. На данный момент наш проект зависит от gwt-servlet.jar, который не является таковым. Для создания бандла из этого jar-ника я создам новый Maven-проект (в конечном итоге мы будем именно Maven использовать для сборки проекта) и назову его sw-bundle-provider, у этого проекта будет родительский (pom) Maven-проект – sw. Для трансформации jar-ников мы будем использовать Maven plugin com.springsource.bundlor.maven (далее Bundlor).

  • деплоим jar-ник gwt-servlet.jar в Maven репозиторий коммандой

mvn deploy:deploy-file -Durl=file://D:\src\repository -Dfile=D:\projects\gwt\gwt-dist\gwt-servlet.jar -DgroupId=com.google.gwt -DartifactId=gwt-servlet -Dversion=1.7 -Dpackaging=jar -DgeneratePom=true

в результате мы должны увидеть

Результат выполнения команды mvn deploy-file
  • после создания проектов (я не буду тут приводить содержание pom-файлов т.к. исходные коды можно будет скачать по ссылке в конце поста) структура должна выглядеть следующим образом
Структура Maven проектов
Структура Maven проектов

где sw-bundle-provider/src/main/templates – директория для шаблонов манифест файлов, которые будут использоваться Bundlor-ом для трансформации зависимостей в OSGi бандлы.

  • поправим файл gwt-servlet.mf в соответствии со следующим рисунком
gwt-servlet.mf
gwt-servlet.mf

пакет junit.framework будет исключен от импортирования OSGi контейнером для нашего бандла, а пакеты com.google.gwt.* и javax.servlet.* будут импортированы. Подобным способом создаем темплейты и настройки для еще 2-х зависимостей (устанавливаются в Maven репозиторий в Step 8). Данное занятие занимает относительное болшое время взависимости от зависимостей для конкретного бандла (созданные мной темплейты также будут доступны в архиве проектов).

Step 8: трансформируем наш stock-watcher war-проект в Maven-проект

  • для этого нужно скопировать проект в директрию sw Maven-pom-проекта
  • добавить модуль в pom.xml файл sw Maven-pom-проекта

<module>stock-watcher</module>

  • создать pom.xml файл для проекта stock-watcher
  • деплоим jar-ник gwt-user.jar в Maven репозиторий коммандой

mvn deploy:deploy-file -Durl=file://D:\src\repository -Dfile=D:\projects\gwt\gwt-dist\gwt-user.jar -DgroupId=com.google.gwt -DartifactId=gwt-user -Dversion=1.7 -Dpackaging=jar -DgeneratePom=true

  • деплоим jar-ник gwt-dev-windows.jar, который необходим для org.codehaus.mojo:gwt-maven-plugin, в Maven репозиторий коммандой

mvn deploy:deploy-file -Durl=file://D:\src\repository -Dfile=D:\projects\gwt\gwt-dist\gwt-dev-windows.jar  -DgroupId=com.google.gwt -DartifactId=gwt-dev -Dversion=1.7 -Dpackaging=jar  -DgeneratePom=true

mvn deploy:deploy-file -Durl=file://D:\src\repository -Dfile=D:\projects\gwt\gwt-dist\gwt-dev-windows.jar -Dclassifier=windows -DgroupId=com.google.gwt -DartifactId=gwt-dev -Dversion=1.7 -Dpackaging=jar  -DgeneratePom=true

mvn deploy:deploy-file -Durl=file://D:\src\repository -Dfile=D:\projects\gwt\gwt-dist\gwt-dev-windows.jar -Dclassifier=windows -DgroupId=com.google.gwt -DartifactId=gwt-dev -Dversion=1.7 -Dpackaging=zip  -DgeneratePom=true

mvn deploy:deploy-file -Durl=file://D:\src\repository -Dfile=D:\projects\gwt\gwt-dist\gwt-dev-windows.jar -Dclassifier=windows-libs -DgroupId=com.google.gwt -DartifactId=gwt-dev -Dversion=1.7 -Dpackaging=zip  -DgeneratePom=true

  • после добавления и настройки gwt-maven-plugin-а проверяем сборку коммандой

mvn clean install

  • и проверяем сборку скопировав полученный war файл в директорию pickup dmServer-а

Step 9: добавляем генерацию OSGi бандла для stock-watcher

  • добавляем настройку Bundlor в pom.xml файл
Настройка Bundlor - Maven плагина
Настройка Bundlor - Maven плагина
  • создаем файл MANIFEST.MF в директории “src/main/webapp/MANIFEST-INF”
  • создаем файл template.mf в корне проекта со следующим содержимым
template.mf для stock-watcher
template.mf для stock-watcher

где директивой Web-ContextPath мы говорим контейнеру создать web-context для приложения по такому пути (т.е. приложение будет доступно по адресу http://localhost:8080/stock-watcher/), и с помшью директивы Import-Template импортируем в бандл указанные пакеты.

Step 10: проверка

Теперь, после того как мы создали нужные бандлы и перевели способ сборки проекта на Maven, можно проверить результат работы.

  • сборка проекта

mvn clean install

  • копируем бандлы из ${target.dir}/dependencies в директорию dmServer-а repository/bundles/usr
  • копируем наш war-ник из директории ${target.dir}/stock-watcher в директорию dmServer-а pickup.
  • открываем в браузере URL http://localhost:8080/stock-watcher/

The end

Вот в принципе и все, далее есть желания:

  • попытаться запустить Hosted Mode, используя dmServer, это даст возможность в GWT приложении использовать Spring бины, получинные из OSGi Service Registry, как имплементацию RPC сервисов;
  • воспользоваться фичей gwt-maven-plugin для генерации *Async интерфейсов;
  • автоматически по имени запрашиваемого сервиса GWT модуля получать Spring бины из OSGi Service Registry.

Links

StockWatcher – архив с исходным кодом.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.