Здравейте, OSGi, Част 1: Пакети за начинаещи

Open Services Gateway Initiative (OSGi) определя архитектура за разработване и внедряване на модулни приложения и библиотеки. В тази първа статия в три части въведение към OSGi, Sunil Patil ви дава начало с концепциите за разработка на OSGi и ви показва как да създадете просто приложение Hello World, използвайки внедряването на контейнера Eclipse OSGi, Equinox. Той също така засяга накратко изграждането на ориентирани към услуги приложения с помощта на OSGi и представя OSGi ServiceFactoryи ServiceTrackerкласове.

Инициативата за шлюз за отворени услуги (OSGi), известна също като динамична модулна система за Java, определя архитектура за разработване на модулни приложения. Реализациите на OSGi контейнери като Knopflerfish, Equinox и Apache Felix ви позволяват да разчлените приложението си на множество модули и по този начин по-лесно да управлявате взаимните зависимости между тях.

OSGi, Equinox и Project Jigsaw

Получете реална представа, изучавайки уроци, научени по време на интеграцията на OSGi / Equinox в най-големия научен проект в Обединеното кралство, след което разберете какво можете да очаквате от Project Jigsaw в Java 9.

Подобно на спецификациите Java Servlet и EJB, спецификацията OSGi дефинира две неща: набор от услуги, които контейнерът на OSGi трябва да изпълни, и договор между контейнера и вашето приложение. Разработването на платформата OSGi означава първо да създадете приложението си с помощта на API на OSGi, след което да го внедрите в OSGi контейнер. От гледна точка на разработчика, OSGi предлага следните предимства:

  • Можете да инсталирате, деинсталирате, стартирате и спирате динамично различни модули на вашето приложение, без да рестартирате контейнера.
  • Вашето приложение може да има повече от една версия на определен модул, работещ едновременно.
  • OSGi осигурява много добра инфраструктура за разработване на ориентирани към услуги приложения, както и вградени, мобилни и богати интернет приложения.

Като се има предвид, че използвате контейнери за сървлети за изграждане на уеб приложения и контейнери EJB за изграждане на транзакционни приложения, може би се чудите защо имате нужда от още един тип контейнер. Краткият отговор е, че OSGi контейнерите са предназначени специално за разработване на сложни Java приложения, които искате да разделите на модули. Ще разширя този кратък отговор в тази поредица.

Здравейте, OSGi: Прочетете поредицата

  • Част 1: Пакети за начинаещи
  • Част 2: Представяне на пролетни динамични модули
  • Част 3: Занесете го на страната на сървъра

OSGi в корпоративни приложения

Работата по спецификацията OSGi стартира от OSGi Alliance през март 1999 г. Основната й цел беше да създаде отворена спецификация за предоставяне на управлявани услуги на локални мрежи и устройства. Основната идея е, че след като добавите OSGi Service Platform към мрежово устройство (вградено, както и сървъри), трябва да можете да управлявате жизнения цикъл на софтуерните компоненти в това устройство от всяко място в мрежата. Софтуерните компоненти могат да бъдат инсталирани, актуализирани или премахнати в движение, без никога да се налага да нарушават работата на устройството.

От години технологията OSGi процъфтява на пазара за вградени системи и мрежови устройства. Сега, отчасти благодарение на Eclipse, OSGi се очертава като жизнеспособна и ценна технология за развитие на предприятието.

Нарастваща подкрепа за OSGi

През 2003 г. екипът за разработка на Eclipse започна да търси начини да направи Eclipse по-динамична и богата клиентска платформа и да увеличи модулността на инструментариума. В крайна сметка екипът се спря на използването на рамката OSGi като модел за изпълнение на компонента. Eclipse 3.0, пусната през юни 2004 г., беше първата версия на Eclipse, базирана на OSGi.

Почти всички корпоративни сървъри за приложения поддържат или планират да поддържат OSGi. Структурата Spring също така поддържа OSGi, чрез проекта Spring Dynamic Modules for OSGi Service Platforms, който осигурява инфраструктурен слой, за да улесни използването на OSGi при разработването на Java Enterprise Enterprise приложения.

OSGi контейнери с отворен код

От гледна точка на корпоративния разработчик, контейнерът OSGi има толкова малък отпечатък, че можете лесно да го вградите в корпоративно приложение. Да приемем например, че разработвате сложно уеб приложение. Искате да разбиете приложението на множество модули: един модул за изгледния слой, друг за слоя DAO и трети модул за слоя за достъп до данни. Използването на вграден OSGi контейнер за управление на взаимните зависимости на тези модули ще ви позволи да актуализирате вашия DAO слой (да речем от бавен DAO към бърз DAO), без да рестартирате приложението си.

Докато вашето приложение е съвместимо със спецификацията OSGi, то трябва да може да работи във всеки контейнер, съвместим с OSGi. В момента има три популярни OSGi контейнера с отворен код:

  • Equinox е референтната реализация за рамковата част на OSGi Service Platform Release 4. Това е модулното изпълнение на Java в основата на Eclipse IDE и изпълнява всички задължителни и повечето незадължителни функции на спецификацията OSGi R4.
  • Knopflerfish е изпълнение с отворен код на спецификациите OSGi R3 и OSGi R4. Knopflerfish 2 изпълнява всички задължителни функции и някои от незадължителните функции, определени в спецификацията R4.
  • Apache Felix е OSGi контейнер с отворен код от Apache Software Foundation. По време на писането този контейнер не е напълно съвместим със спецификацията OSGI R4.

В тази статия ще използваме Equinox като наш OSGi контейнер. Вижте раздела Ресурси за повече информация относно Apache Felix и Knopflerfish.