Какая польза от преобразования jar-файлов в пакеты в WAB(OSGI)?
Изучив среду OSGi, я разработал образец веб-приложения. Пакет веб-приложений (.war или.jar) упакован в eba. Файл war содержит кучу встроенных файлов jar WEB-INF/lib
каталог. Эти файлы были преобразованы в пакеты OSGi(using maven-bundle-plugin
) с необходимыми пакетами экспорта и импорта согласно соотношению между банками. Теперь я должен даже упомянуть все эти банки(WEB-INF/lib)
в пучке классов Вышеприведенное работает, потому что комплект (wab также является комплектом) может включать в себя один или несколько jar-файлов и использовать запись Bundle-Classpath manifest.mf для указания на них.
Incase я не включаю банки в bundle-classpath я получаю ClassNotFoundException
,
Вопрос в том, что нет смысла конвертировать банки в пакеты osgi. Очевидно, что все банки в WEB-INF/lib
загружаются одним и тем же загрузчиком классов (то есть загрузчиком классов wab), поэтому мы не пожинаем основных преимуществ OSGi, который в основном является концепцией загрузчика классов для каждого пакета?
1 ответ
Размещение jar-файлов внутри WEB-INF/lib - это старый способ обработки зависимостей в обычном java-стиле, а вывод их за пределы войны - это новый способ OSGi-управления ими.
Упаковывая зависимости вашей войны в WEB-INF/lib, вы рассматриваете их как обычные файлы jar (помните, что пакет также является файлом jar). Так что в этом случае вы правы, что не было особого смысла в использовании комплектов.
Одним из преимуществ использования вабов вместо войн является уход от страшной монолитной войны 100 Мб. Вместо того, чтобы упаковывать пакеты в WEB-INF/lib, попробуйте импортировать необходимые пакеты с помощью Import-Package: и упаковать зависимости внутри eba. (Если вы не помните, чтобы программа war импортировала нужные ей пакеты, вы получите исключение класса, в котором вы не обнаружили, поскольку контейнер OSGi не будет знать, что ваши пакеты нуждаются в вашей войне.)