Какие преимущества дает вам система компонентов OSGi?
Что ж, вот и целый список:
Пониженная сложность - Разработка с использованием технологии OSGi означает разработку пакетов: компонентов OSGi. Связки - это модули. Они скрывают свои внутренние компоненты от других пакетов и общаются через четко определенные службы. Скрытие внутренних компонентов означает больше свободы для внесения изменений в дальнейшем. Это не только уменьшает количество ошибок, но и упрощает разработку пакетов, поскольку пакеты правильного размера реализуют часть функциональности через четко определенные интерфейсы. Есть интересный блог, в котором описывается, что технология OSGi сделала для процесса их разработки.
Повторное использование - модель компонентов OSGi позволяет очень легко использовать многие сторонние компоненты в приложении. Все большее количество проектов с открытым исходным кодом предоставляют свои JAR-файлы, готовые для OSGi. Однако коммерческие библиотеки также становятся доступными в виде готовых пакетов.
Реальный мир. Структура OSGi динамична. Он может обновлять пакеты на лету, а услуги могут приходить и уходить. Разработчики, привыкшие к более традиционной Java, видят в этом очень проблематичную функцию и не видят преимуществ. Однако оказывается, что реальный мир очень динамичен, и наличие динамических сервисов, которые могут приходить и уходить, делает эти сервисы идеальным вариантом для многих сценариев реального мира. Например, служба может моделировать устройство в сети. Если устройство обнаружено, услуга регистрируется. Если устройство уходит, значит услуга отменяется. Существует удивительное количество реальных сценариев, которые соответствуют этой динамической модели обслуживания. Таким образом, приложения могут повторно использовать мощные примитивы реестра служб (регистрация, получение, список с помощью выразительного языка фильтров и ожидание появления и исчезновения служб) в своем собственном домене. Это не только экономит время на написание кода, но и обеспечивает глобальную видимость, инструменты отладки и большую функциональность, чем было бы реализовано для специального решения. Написание кода в такой динамической среде звучит как кошмар, но, к счастью, существуют классы поддержки и фреймворки, которые снимают большую часть, если не всю, боль.
Простое развертывание. Технология OSGi - это не просто стандарт для компонентов. Он также определяет, как компоненты устанавливаются и управляются. Этот API использовался многими пакетами для предоставления агента управления. Этот агент управления может быть таким же простым, как командная оболочка, драйвер протокола управления TR-69, драйвер протокола OMA DM, интерфейс облачных вычислений для Amazon EC2 или система управления IBM Tivoli. Стандартизированный API управления позволяет очень легко интегрировать технологию OSGi в существующие и будущие системы.
Динамические обновления. Модель компонентов OSGi - это динамическая модель. Пакеты можно устанавливать, запускать, останавливать, обновлять и удалять без остановки всей системы. Многие разработчики Java не верят, что это можно сделать надежно, и поэтому изначально не используют это в производственной среде. Однако, после использования этого в течение некоторого времени в разработке, большинство начинает понимать, что это действительно работает и значительно сокращает время развертывания.
Адаптивная - модель компонентов OSGi разработана с нуля, чтобы позволить смешивать и согласовывать компоненты. Для этого необходимо указать зависимости компонентов, а также необходимо, чтобы компоненты находились в среде, в которой их дополнительные зависимости не всегда доступны. Реестр служб OSGi - это динамический реестр, в котором пакеты могут регистрировать, получать и прослушивать службы. Эта динамическая модель обслуживания позволяет пакетам узнавать, какие возможности доступны в системе, и адаптировать функциональность, которую они могут предоставить. Это делает код более гибким и устойчивым к изменениям.
Прозрачность. Пакеты и услуги - это первоклассные продукты в среде OSGi. API управления предоставляет доступ к внутреннему состоянию пакета, а также к тому, как он связан с другими пакетами. Например, большинство фреймворков предоставляют командную оболочку, которая показывает это внутреннее состояние. Части приложений могут быть остановлены для отладки определенной проблемы или могут быть добавлены диагностические пакеты. Вместо того, чтобы смотреть на миллионы строк выходных данных журнала и длительное время перезагрузки, приложения OSGi часто можно отлаживать с помощью живой командной оболочки.
Управление версиями - технология OSGi решает проблему JAR. JAR, черт возьми, проблема в том, что библиотека A работает с библиотекой B; версия = 2, но библиотека C может работать только с B; версия = 3. В стандартной Java вам не повезло. В среде OSGi все пакеты тщательно контролируются версиями, и только пакеты, которые могут взаимодействовать, связаны вместе в одном пространстве классов. Это позволяет пакетам A и C работать с собственной библиотекой. Хотя не рекомендуется разрабатывать системы с этой проблемой управления версиями, в некоторых случаях это может спасти жизнь.
Просто. OSGi API на удивление прост. Ядро API - это всего лишь один пакет и менее 30 классов / интерфейсов. Этого основного API достаточно для написания пакетов, их установки, запуска, остановки, обновления и удаления, и он включает все классы прослушивателя и безопасности. Очень мало API-интерфейсов, которые предоставляют столько функций для такого небольшого API.
Маленький - OSGi Release 4 Framework может быть реализован в файле JAR размером около 300 КБ. Это небольшие накладные расходы по сравнению с объемом функций, которые добавляются к приложению за счет включения OSGi. Таким образом, OSGi работает на большом количестве устройств: от очень маленьких до мэйнфреймов. Он запрашивает только минимальную виртуальную машину Java для запуска и очень мало добавляет к ней.
Быстро. Одна из основных задач платформы OSGi - загрузка классов из пакетов. В традиционной Java JAR полностью видны и помещаются в линейный список. Поиск класса требует поиска в этом (часто очень длинном, 150 - не редкость) списке. Напротив, OSGi предварительно связывает пакеты и точно знает для каждого пакета, какой пакет предоставляет класс. Отсутствие поиска - существенный фактор ускорения при запуске.
Ленивый - Ленивый в программном обеспечении - это хорошо, и технология OSGi имеет множество механизмов, позволяющих выполнять действия только тогда, когда они действительно необходимы. Например, пакеты можно запускать быстро, но их также можно настроить так, чтобы они запускались только тогда, когда их используют другие пакеты. Услуги могут быть зарегистрированы, но созданы только тогда, когда они используются. Спецификации были оптимизированы несколько раз, чтобы учесть такие ленивые сценарии, которые могут сэкономить огромные затраты времени выполнения.
Безопасность - Java имеет очень мощную детализированную модель безопасности в нижней части, но оказалось, что ее очень сложно настроить на практике. В результате большинство безопасных приложений Java работают с двоичным выбором: отсутствие безопасности или очень ограниченные возможности. Модель безопасности OSGi использует детализированную модель безопасности, но повышает удобство использования (а также укрепляет исходную модель) за счет того, что разработчик пакета указывает запрошенные детали безопасности в легко проверяемой форме, в то время как оператор среды остается полностью ответственным. В целом, OSGi, вероятно, предоставляет одну из самых безопасных сред приложений, которую можно использовать, если не считать аппаратно защищенных вычислительных платформ.
Без вмешательства. Приложения (пакеты) в среде OSGi предоставлены сами себе. Они могут использовать практически любые средства виртуальной машины без ограничения OSGi. Лучшая практика в OSGi - писать простые старые объекты Java, и по этой причине для служб OSGi не требуется специального интерфейса, даже объект Java String может действовать как служба OSGi. Эта стратегия упрощает перенос кода приложения в другую среду.
Работает везде - Это зависит от многого. Первоначальной целью Java было запускать где угодно. Очевидно, что невозможно запустить весь код везде, потому что возможности виртуальных машин Java различаются. Виртуальная машина в мобильном телефоне, скорее всего, не будет поддерживать те же библиотеки, что и мэйнфрейм IBM, на котором запущено банковское приложение. Есть две проблемы, о которых нужно позаботиться. Во-первых, API OSGi не должны использовать классы, которые доступны не во всех средах. Во-вторых, пакет не должен запускаться, если он содержит код, недоступный в среде выполнения. Обе эти проблемы учтены в спецификациях OSGi.
Источник: www.osgi.org/Technology/WhyOSGi.
person
Community
schedule
26.07.2013