Witaj, OSGi, Część 1: Pakiety dla początkujących

Open Services Gateway Initiative (OSGi) definiuje architekturę do tworzenia i wdrażania modułowych aplikacji i bibliotek. W tym pierwszym artykule w trzyczęściowym wprowadzeniu do OSGi, Sunil Patil przedstawia koncepcje programistyczne OSGi i pokazuje, jak zbudować prostą aplikację Hello World przy użyciu implementacji kontenera Eclipse OSGi, Equinox. Porusza również pokrótce tworzenie aplikacji zorientowanych na usługi przy użyciu OSGi oraz przedstawia OSGi ServiceFactoryi ServiceTrackerklasy.

Open Services Gateway Initiative (OSGi), znana również jako Dynamic Module System for Java, definiuje architekturę do tworzenia aplikacji modułowych. Implementacje kontenerów OSGi, takie jak Knopflerfish, Equinox i Apache Felix, umożliwiają podzielenie aplikacji na wiele modułów, a tym samym łatwiejsze zarządzanie wzajemnymi zależnościami między nimi.

OSGi, Equinox i Project Jigsaw

Uzyskaj prawdziwy obraz świata, studiując lekcje wyciągnięte podczas integracji OSGi / Equinox podczas największego projektu naukowego w Wielkiej Brytanii, a następnie dowiedz się, czego możesz oczekiwać od Project Jigsaw w Javie 9.

Podobnie jak w specyfikacji Java Servlet i EJB, specyfikacja OSGi definiuje dwie rzeczy: zestaw usług, które musi zaimplementować kontener OSGi oraz kontrakt między kontenerem a aplikacją. Programowanie na platformie OSGi oznacza najpierw zbudowanie aplikacji przy użyciu API OSGi, a następnie wdrożenie jej w kontenerze OSGi. Z punktu widzenia programisty OSGi oferuje następujące korzyści:

  • Możesz dynamicznie instalować, odinstalowywać, uruchamiać i zatrzymywać różne moduły aplikacji bez ponownego uruchamiania kontenera.
  • Twoja aplikacja może mieć jednocześnie uruchomioną więcej niż jedną wersję określonego modułu.
  • OSGi zapewnia bardzo dobrą infrastrukturę do tworzenia aplikacji usługowych, a także wbudowanych, mobilnych i bogatych aplikacji internetowych.

Biorąc pod uwagę, że używasz kontenerów serwletów do tworzenia aplikacji internetowych i kontenerów EJB do tworzenia aplikacji transakcyjnych, możesz się zastanawiać, dlaczego potrzebujesz jeszcze innego typu kontenera. Krótka odpowiedź jest taka, że ​​kontenery OSGi są przeznaczone specjalnie do tworzenia złożonych aplikacji Java, które chcesz podzielić na moduły. Rozszerzę tę krótką odpowiedź w całej tej serii.

Witaj, OSGi: Przeczytaj serię

  • Część 1: Pakiety dla początkujących
  • Część 2: Wprowadzenie sprężynowych modułów dynamicznych
  • Część 3: Przenieś to na serwer

OSGi w aplikacjach korporacyjnych

Prace nad specyfikacją OSGi zostały rozpoczęte przez OSGi Alliance w marcu 1999 roku. Głównym celem było stworzenie otwartej specyfikacji dostarczania usług zarządzanych do lokalnych sieci i urządzeń. Podstawową ideą jest to, że po dodaniu platformy usługowej OSGi do urządzenia sieciowego (zarówno wbudowanego, jak i serwerów), powinieneś być w stanie zarządzać cyklem życia komponentów oprogramowania w tym urządzeniu z dowolnego miejsca w sieci. Składniki oprogramowania można instalować, aktualizować lub usuwać w locie, bez konieczności zakłócania działania urządzenia.

Technologia OSGi od lat kwitnie na rynku systemów wbudowanych i urządzeń sieciowych. Teraz, częściowo dzięki Eclipse, OSGi staje się realną i cenną technologią dla rozwoju przedsiębiorstw.

Rosnące wsparcie dla OSGi

W 2003 roku zespół programistów Eclipse zaczął szukać sposobów, aby uczynić Eclipse bardziej dynamiczną platformą dla bogatego klienta i zwiększyć modułowość zestawu narzędzi. Ostatecznie zespół zdecydował się na wykorzystanie frameworka OSGi jako modelu komponentów środowiska wykonawczego. Eclipse 3.0, wydane w czerwcu 2004 roku, było pierwszą wersją Eclipse opartą na OSGi.

Prawie wszystkie serwery aplikacji korporacyjnych obsługują lub planują wspierać OSGi. Framework Spring obsługuje również OSGi za pośrednictwem projektu Spring Dynamic Modules for OSGi Service Platforms, który zapewnia warstwę infrastruktury ułatwiającą korzystanie z OSGi w tworzeniu aplikacji korporacyjnych Java opartych na Spring.

Otwarte kontenery OSGi

Z punktu widzenia programisty korporacyjnego kontener OSGi zajmuje tak mało miejsca, że ​​można go łatwo osadzić w aplikacji korporacyjnej. Na przykład, powiedzmy, że tworzysz złożoną aplikację internetową. Chcesz podzielić aplikację na wiele modułów: jeden moduł dla warstwy widoku, drugi dla warstwy DAO i trzeci moduł dla warstwy dostępu do danych. Użycie wbudowanego kontenera OSGi do zarządzania wzajemnymi zależnościami tych modułów umożliwiłoby aktualizację warstwy DAO (powiedzmy z wolnego DAO do szybkiego DAO) bez ponownego uruchamiania aplikacji.

Dopóki Twoja aplikacja jest zgodna ze specyfikacją OSGi, powinna móc działać w dowolnym kontenerze zgodnym z OSGi. Obecnie istnieją trzy popularne kontenery OSGi typu open source:

  • Equinox jest implementacją referencyjną dla części ramowej OSGi Service Platform Release 4. Jest to modułowe środowisko wykonawcze Java stanowiące serce środowiska Eclipse IDE i implementujące wszystkie obowiązkowe i większość opcjonalnych funkcji specyfikacji OSGi R4.
  • Knopflerfish to otwarta implementacja specyfikacji OSGi R3 i OSGi R4. Knopflerfish 2 implementuje wszystkie obowiązkowe funkcje i niektóre opcjonalne funkcje zdefiniowane w specyfikacji R4.
  • Apache Felix to kontener OSGi typu open source z Apache Software Foundation. W chwili pisania tego kontenera nie jest on w pełni zgodny ze specyfikacją OSGI R4.

W tym artykule użyjemy Equinox jako naszego kontenera OSGi. Zobacz sekcję Zasoby, aby uzyskać więcej informacji o Apache Felix i Knopflerfish.