Статьи

Развертывание приложения Scala Lift в контейнере OSGi


Мой текущий проект включает создание
веб-приложения
Lift и его развертывание в нашем контейнере приложений OSGi. Я работал со
Scala в течение некоторого времени, и меня всегда интересовал Lift. С выпуском Scala 2.8 и Lift 2.0 я решил, что пришло время реально попробовать Lift в моем текущем проекте. 

Самый простой способ развернуть WAR-файл — использовать War Extender от Pax Web.
, Это позволяет вам просто развернуть файл WAR с обновленным файлом MANFIEST.MF (что делает его OSGi Bundle) в том же контейнере, что и Pax Web. В моем примере я создам WAR-файл как стандартный плагин OSGi и создаю его с помощью Eclipse, но вы также можете создать обычный WAR-файл с помощью Maven или SBT, добавить атрибуты OSGi в файл MANIFEST.MF и развернуть его с помощью Pax Web. ,

Предполагаются следующие шаги:

  • Затмение является IDE
  • Scala-IDE (плагин Scala) установлен.
  • Scala 2.8
  • Lift 2.0 (нужен снимок Scala 2.8 от Scala-Tools )

Первым шагом было создание стандартного проекта плагина OSGi. Затем отредактируйте файл проекта, добавив команду сборки Scala:

<buildcommand> 
<name>ch.epfl.lamp.sdt.core.scalabuilder</name>
</buildcommand>

построить buildSpec и удалить Java Builder

Затем добавьте Scala Nature

<nature>ch.epfl.lamp.sdt.core.scalanature</nature>

к природам. Я добавил оба к верхней части соответствующих разделов.

Затем вам нужно будет перезагрузить проект (закрыть / открыть), и он должен быть с поддержкой Scala.

Затем я объединил проект
Lift Template с моим проектом Eclipse. Я скопировал каталог src / main / scala в свой каталог src, а src / main / webapp — в корневой каталог проекта.

На этом этапе Eclipse должен увидеть исходные файлы Scala, но они не будут компилироваться, поскольку библиотеки Lift еще не находятся в пути к классам.

Я загрузил необходимые зависимости из различных репозиториев Maven и добавил их в каталог WEB-INF / lib. Для моего первоначального проекта мне понадобилось:

  • Joda времени
  • лифт-актер
  • подъемный общий
  • подъемная JSON
  • лифт-Util
  • лифт-WebKit
  • paranamer-генератор
  • SLF4J
  • org.apache.commons.fileupload

Помните, если вы используете Scala 2.8 для загрузки версии 2.8.0 библиотек лифта (которые в настоящее время находятся под снимками вместо выпусков). Когда у вас есть все зависимости, пример кода Lift должен скомпилироваться.

Теперь вы можете работать над развертыванием пакета.

Вам понадобится комплект Pax Web WAR Extender и все его зависимости. Их можно найти в этом
репозитории Maven , и они описаны
здесь для версии 0.7.1 .

После развертывания веб-пакетов Pax вы сможете развернуть свой пакет. Pax Web WAR Extender просканирует все пакеты на наличие файла web.xml и попытается развернуть их, если найдет один.

По умолчанию он использует символическое имя пакета (Bundle-SymbolicName: xxx) в качестве корневого контекста, но вы можете указать свое собственное, добавив следующую строку в ваш файл MANIFEST.MF:

Webapp-Context: /

развернуть как корневой контекст или

Webapp-Context: mycontext

развернуть как / mycontext

Это было все, что нужно для запуска и запуска примера приложения Lift. Теперь я могу использовать контейнер OSGi для ссылки на другие зависимости и продолжить сборку приложения в Eclipse.

Пара замечаний:

Вы можете развернуть библиотеки и зависимости Lift в виде OSGi-пакетов, а не в каталоге WEB-INF / lib этого пакета. На момент написания этой статьи Lift OSGi Bundles еще не были доступны для 2.8, но все, что им нужно, это обновленный файл MANIFEST.MF.

Как я уже отмечал в начале, вы можете просто отредактировать файл MANIFEST.MF любого WAR и развернуть его таким образом. Если ваше приложение Lift не зависит от других пакетов OSGi, это может быть самым простым подходом.