2015-09-16 4 views
1

Представьте, что вы хотите иметь высокомодульное веб-приложение на Java. Компоненты уже используют Spring framework. Некоторые компоненты охватывают только чистую логику, а некоторые другие также имеют некоторые графические интерфейсы презентации в HTML. Приложение не совместимо с Portlet, но нам нужно иметь динамическое меню, которое продвигает список установленных модулей и ссылок на страницы или API REST. Так как это Java, используя OSGI рекомендуется, но я слишком путать с недавними признаками в OSGI (введено за последние несколько лет) и у меня есть несколько вопросов:Использование встроенного Felix в контейнере приложений или контейнере приложений в Karaf и является OSGi полным контейнером IoC?

  • Теперь OSGI не только Модуль системы управления, но и IoC Контейнер! Он почти содержит эквивалентные аннотации для многих функций Spring IoC. Итак, как мы можем использовать модули с поддержкой Spring внутри OSGI? Можем ли мы устранить Spring для наших новых проектов и полностью полагаться на OSGI? Или для зависимости Инъекции внутри модулей мы можем использовать Spring и для инъекций зависимостей над модулями, мы можем использовать OSGI?

  • Для реальных приложений большого масштаба у нас есть два варианта: использование встроенного Felix в приложении Container (например, Tomcat) или использование пакета OSGI приложения Container (Jetty или Tomcat) в KARAF. Какой подход лучше? Какой из них более масштабируемый?

ответ

0

OSGi не является контейнером IoC вообще. Однако существуют некоторые технологии поддержки инъекций, которые работают на OSGi. Наиболее важными являются декларативные услуги и план. Весна не поддерживается. Существует некоторая поддержка Spring DM, но этот код не поддерживается на протяжении веков.

Таким образом, вы должны использовать один из двух поддерживаемых контейнеров IoC выше. Для чертежа арий я написал поддержку аннотаций CDI, используя плагин maven-blueprint. Это может быть лучшим выбором для конвертации приложения. Я рекомендую сначала преобразовать приложение Spring для использования только аннотаций CDI и только затем начать миграцию OSGi. Такая миграция непростая. Удостоверьтесь, что вы хорошо тренируетесь и консультируетесь.

Встраиваемый Felix в контейнер сервлетов хорош, если большинство из ваших приложений не OSGi, и вы просто хотите использовать пакеты для очень маленькой части. Karaf лучше, если вы хотите написать все свое приложение для OSGi.

0

Исследование OSGi может запутаться, потому что есть 15 лет статей и примеров, многие из которых действительны, но могут быть устаревшими.

Вы можете рассмотреть возможность удаления Spring, если он использовался только как контейнер IoC. OSGi DS предоставляет @Component и @Reference аннотации (например, Spring Autowire), если DS включен в вашем контейнере OSGi. Новый проект OSGi enroute имеет около modern examples выполнения IoC и предоставления услуг REST.

Замена большего количества функций может быть более эффективной. Запуск последней Spring в OSGi может не работать из-за различий в загрузчиках классов в OSGi, а весенние проекты отходят от OSGi.