Co rozwiązuje OSGi?

279

Czytałem na Wikipedii i innych stronach o OSGi , ale tak naprawdę nie widzę dużego obrazu. Mówi, że jest to platforma oparta na komponentach i że można przeładowywać moduły w czasie wykonywania. Także „praktycznym przykładem” podanym wszędzie jest Eclipse Plugin Framework.

Moje pytania to:

  1. Jaka jest jasna i prosta definicja OSGi?

  2. Jakie typowe problemy rozwiązuje?

Przez „typowe problemy” rozumiem problemy, z którymi mamy do czynienia na co dzień, np. „Co OSGi może zrobić, aby nasza praca była bardziej wydajna / przyjemna / prosta?”

Pablo Fernandez
źródło

Odpowiedzi:

95

jakie korzyści zapewnia system komponentów OSGi?
Oto całkiem spora lista:

Mniejsza złożoność - programowanie w technologii OSGi oznacza tworzenie pakietów: komponentów OSGi. Pakiety to moduły. Ukrywają swoje elementy wewnętrzne przed innymi pakietami i komunikują się poprzez dobrze zdefiniowane usługi. Ukrywanie elementów wewnętrznych oznacza większą swobodę późniejszych zmian. To nie tylko zmniejsza liczbę błędów, ale także upraszcza tworzenie pakietów, ponieważ pakiety o prawidłowych rozmiarach implementują funkcjonalność poprzez dobrze zdefiniowane interfejsy. Istnieje ciekawy blog, który opisuje, co technologia OSGi zrobiła w procesie rozwoju.

Ponowne użycie - model komponentu OSGi sprawia, że ​​korzystanie z wielu komponentów innych firm w aplikacji jest bardzo łatwe. Coraz więcej projektów open source dostarcza gotowe pliki JAR dla OSGi. Jednak biblioteki komercyjne stają się również dostępne jako gotowe pakiety.

Prawdziwy świat -Struktura OSGi jest dynamiczna. Może aktualizować pakiety w locie, a usługi mogą przychodzić i odchodzić. Programiści, którzy używali bardziej tradycyjnej Javy, postrzegają to jako bardzo problematyczną funkcję i nie dostrzegają korzyści. Okazuje się jednak, że świat rzeczywisty jest bardzo dynamiczny, a posiadanie dynamicznych usług, które mogą przychodzić i odchodzić, sprawia, że ​​usługi te idealnie pasują do wielu scenariuszy w świecie rzeczywistym. Na przykład usługa może modelować urządzenie w sieci. Jeśli urządzenie zostanie wykryte, usługa zostanie zarejestrowana. Jeśli urządzenie zniknie, usługa nie zostanie zarejestrowana. Istnieje zaskakująca liczba rzeczywistych scenariuszy pasujących do tego dynamicznego modelu usług. Aplikacje mogą zatem ponownie wykorzystywać potężne operacje podstawowe rejestru usług (rejestrować, uzyskiwać, wyświetlać listę z ekspresyjnym językiem filtrowania i czekać na pojawienie się i zniknięcie usług) we własnej domenie. Pozwala to nie tylko zaoszczędzić na pisaniu kodu, ale także zapewnia globalną widoczność, narzędzia do debugowania i większą funkcjonalność niż w przypadku dedykowanego rozwiązania. Pisanie kodu w tak dynamicznym środowisku brzmi jak koszmar, ale na szczęście istnieją klasy wsparcia i frameworki, które pochłaniają większość, jeśli nie całość, bólu.

Łatwe wdrożenie - technologia OSGi to nie tylko standard dla komponentów. Określa również sposób instalowania i zarządzania komponentami. Ten interfejs API był używany przez wiele pakietów w celu zapewnienia agenta zarządzania. Ten agent zarządzania może być tak prosty jak powłoka poleceń, sterownik protokołu zarządzania TR-69, sterownik protokołu OMA DM, interfejs chmury obliczeniowej dla EC2 Amazon lub system zarządzania IBM Tivoli. Ujednolicony interfejs API zarządzania ułatwia integrację technologii OSGi z istniejącymi i przyszłymi systemami.

Aktualizacje dynamiczne - model komponentu OSGi jest modelem dynamicznym. Pakiety można instalować, uruchamiać, zatrzymywać, aktualizować i odinstalowywać bez wyłączania całego systemu. Wielu programistów Java nie wierzy, że można to zrobić niezawodnie i dlatego początkowo nie używają tego w środowisku produkcyjnym. Jednak po użyciu tego przez pewien czas w rozwoju większość zaczyna zdawać sobie sprawę, że to naprawdę działa i znacznie skraca czas wdrażania.

Adaptacyjny - model komponentu OSGi został zaprojektowany od podstaw, aby umożliwić mieszanie i dopasowywanie komponentów. Wymaga to określenia zależności komponentów i wymaga, aby komponenty działały w środowisku, w którym ich opcjonalne zależności nie zawsze są dostępne. Rejestr usług OSGi jest rejestrem dynamicznym, w którym pakiety mogą rejestrować, uzyskiwać i słuchać usług. Ten dynamiczny model usług pozwala pakietom dowiedzieć się, jakie możliwości są dostępne w systemie i dostosować funkcje, które mogą zapewnić. Dzięki temu kod jest bardziej elastyczny i odporny na zmiany.

Przejrzystość - pakiety i usługi są pierwszorzędnymi obywatelami w środowisku OSGi. Interfejs API zarządzania zapewnia dostęp do wewnętrznego stanu pakietu, a także sposobu, w jaki jest on połączony z innymi pakietami. Na przykład większość platform udostępnia powłokę poleceń, która pokazuje ten stan wewnętrzny. Części aplikacji można zatrzymać w celu debugowania określonego problemu lub wprowadzić pakiety diagnostyczne. Zamiast wpatrywać się w miliony linii danych wyjściowych rejestrowania i długi czas restartu, aplikacje OSGi często można debugować za pomocą powłoki poleceń na żywo.

Wersjonowanie - technologia OSGi rozwiązuje piekło JAR. Piekło JAR to problem polegający na tym, że biblioteka A działa z biblioteką B; wersja = 2, ale biblioteka C może działać tylko z biblioteką B; wersja = 3. W standardowej Javie nie masz szczęścia. W środowisku OSGi wszystkie pakiety są starannie wersjonowane, a tylko pakiety, które mogą współpracować, są połączone razem w tej samej przestrzeni klasowej. Dzięki temu zarówno pakiet A, jak i C mogą działać z własną biblioteką. Chociaż nie zaleca się projektowania systemów z tym problemem związanym z wersjonowaniem, w niektórych przypadkach może to być ratowanie życia.

Prosty - interfejs API OSGi jest zaskakująco prosty. Podstawowym interfejsem API jest tylko jeden pakiet i mniej niż 30 klas / interfejsów. Ten podstawowy interfejs API jest wystarczający do pisania pakietów, instalowania ich, uruchamiania, zatrzymywania, aktualizowania i odinstalowywania oraz obejmuje wszystkie klasy nasłuchiwania i zabezpieczenia. Istnieje bardzo niewiele interfejsów API, które zapewniają tak wiele funkcji dla tak małego interfejsu API.

Small - OSGi Release 4 Framework może być zaimplementowany w pliku JAR o wielkości około 300 KB. Jest to niewielki narzut związany z ilością funkcji dodanych do aplikacji przez włączenie OSGi. Dlatego OSGi działa na wielu urządzeniach: od bardzo małych, przez małe, aż do komputerów mainframe. Prosi tylko o uruchomienie minimalnej maszyny wirtualnej Java i dodaje bardzo niewiele.

Szybko - Jednym z głównych obowiązków frameworka OSGi jest ładowanie klas z pakietów. W tradycyjnej Javie pliki JAR są całkowicie widoczne i umieszczane na liście liniowej. Przeszukiwanie klasy wymaga przeszukania tej listy (często bardzo długiej, 150 nie jest rzadkością). W przeciwieństwie do tego, wiązki przewodów OSGi i dla każdego pakietu dokładnie wiedzą, który pakiet zapewnia klasę. Ten brak wyszukiwania jest znaczącym czynnikiem przyspieszającym podczas uruchamiania.

Leniwy - Leniwy w oprogramowaniu jest dobry, a technologia OSGi ma wiele mechanizmów do robienia rzeczy tylko wtedy, gdy są naprawdę potrzebne. Na przykład pakiety można uruchamiać chętnie, ale można je również skonfigurować tak, aby uruchamiały się tylko wtedy, gdy inne pakiety z nich korzystają. Usługi mogą być rejestrowane, ale tworzone tylko wtedy, gdy są używane. Specyfikacje zostały kilkakrotnie zoptymalizowane, aby uwzględnić tego rodzaju leniwe scenariusze, które mogą zaoszczędzić ogromne koszty środowiska wykonawczego.

Bezpieczny - Java ma bardzo wydajny drobnoziarnisty model bezpieczeństwa na dole, ale jego konfiguracja w praktyce okazała się bardzo trudna. Powoduje to, że najbezpieczniejsze aplikacje Java działają z wyborem binarnym: brak zabezpieczeń lub bardzo ograniczone możliwości. Model bezpieczeństwa OSGi wykorzystuje drobnoziarnisty model bezpieczeństwa, ale poprawia użyteczność (a także utwardza ​​oryginalny model), ponieważ twórca pakietu określa wymagane szczegóły bezpieczeństwa w łatwo kontrolowanej formie, podczas gdy operator środowiska pozostaje w pełni odpowiedzialny. Ogólnie rzecz biorąc, OSGi prawdopodobnie zapewnia jedno z najbezpieczniejszych środowisk aplikacji, które wciąż jest użyteczne bez platform komputerowych chronionych komputerowo.

Non Intrusive - Aplikacje (pakiety) w środowisku OSGi są pozostawione same sobie. Mogą korzystać z praktycznie dowolnego narzędzia maszyny wirtualnej bez ograniczania ich przez OSGi. Najlepszą praktyką w OSGi jest pisanie zwykłych starych obiektów Java iz tego powodu nie wymaga specjalnego interfejsu dla usług OSGi, nawet obiekt Java String może działać jako usługa OSGi. Ta strategia ułatwia przenoszenie kodu aplikacji do innego środowiska.

Działa wszędzie - to zależy. Pierwotnym celem Javy było uruchamianie w dowolnym miejscu. Oczywiście nie można uruchomić całego kodu wszędzie, ponieważ możliwości maszyn wirtualnych Java są różne. Maszyna wirtualna w telefonie komórkowym prawdopodobnie nie będzie obsługiwać tych samych bibliotek, co komputer mainframe IBM z aplikacją bankową. Do rozwiązania są dwa problemy. Po pierwsze, interfejsy API OSGi nie powinny używać klas, które nie są dostępne we wszystkich środowiskach. Po drugie, pakiet nie powinien się uruchomić, jeśli zawiera kod, który nie jest dostępny w środowisku wykonawczym. Oba te problemy zostały rozwiązane w specyfikacjach OSGi.

Źródło: www.osgi.org/Technology/WhyOSGi

Abhishek Goel
źródło
2
Wydaje mi się, że można osiągnąć przynajmniej niektóre z tych korzyści, po prostu wykorzystując SOA (bezpaństwowy / stanowy). Kiedy wdrażam poprawioną / zaktualizowaną wersję komponentu w innym (wersjonowanym) punkcie końcowym, mogę po prostu mieć zależny komponent, przełączyć się i korzystać z łatanej usługi w nowym punkcie końcowym. Ponieważ mogę jednocześnie wdrożyć i uruchomić zarówno starszą, jak i nową wersję, mogę również pozwolić, aby zależny komponent używał różnych części zarówno starej wersji, jak i nowej wersji, w zależności od potrzeb.
MikeM,
1
Wygląda na to, że ludzie borykają się z wieloma problemami z mikrousługami i SOA, aby (miejmy nadzieję) uzyskać 20% więcej funkcjonalności niż OSGi. Firmy powinny pomyśleć dwa razy, ile OSGi daje za tak mało dodatkowej pracy. Wszystkie usługi na tej samej maszynie JVM w jednym procesie, w którym wiele usług można przełączyć w tryb offline lub w razie potrzeby zaktualizować.
Teddy
Pakiety OSGi mogą być najbliższą abstrakcją nieuchwytnego „komponentu”, którego ludzie szukali od wieków!
Teddy
SOA i mikrousługi mogą zapewnić niektóre korzyści, ale przy znacznie wyższych kosztach. W obu przypadkach cała komunikacja odbywa się przez sieć, co jest bardzo kosztowne w porównaniu do połączeń lokalnych. Zarządzanie wersjami w SOA i mikrousługach jest również koszmarem. Wywołanie usługi OSGi w porównaniu jest tak tanie, jak każde wywołanie metody Java.
Christian Schneider
90

Znalazłem następujące korzyści z OSGi:

  • Każda wtyczka jest wersjonowanym artefaktem, który ma swój własny moduł ładujący klasy.
  • Każda wtyczka zależy zarówno od zawartych w niej konkretnych słoików, jak i od innych określonych wersji wtyczek.
  • Ze względu na wersjonowanie i izolowane moduły ładujące różne wersje tego samego artefaktu mogą być ładowane w tym samym czasie. Jeśli jeden składnik aplikacji opiera się na jednej wersji wtyczki, a inny na innej wersji, oba mogą być ładowane jednocześnie.

Dzięki temu możesz uporządkować aplikację jako zestaw wersjonowanych artefaktów wtyczek, które są ładowane na żądanie. Każda wtyczka jest samodzielnym komponentem. Podobnie jak Maven pomaga ustrukturyzować twoją kompilację, aby była powtarzalna i zdefiniowana przez zestaw określonych wersji artefaktów, które tworzy, OSGi pomaga ci to zrobić w czasie wykonywania.

Travis B. Hartwell
źródło
14
Jedną z największych zalet tego silnego mechanizmu kontroli wersji jest to, że zależności są weryfikowane podczas wdrażania, co oznacza, że ​​w czasie wdrażania pojawiają się nierozwiązane błędy zależności zamiast NoClassDefFoundErrors w czasie wykonywania. Oprócz systemu modułowego warstwa usług OSGi zasługuje na wzmiankę. Nie jest tak łatwo zacząć, ponieważ wpływa to na twoją architekturę (i nie zawsze jest właściwe z niego korzystać), ale jest to bardzo potężny system, gdy go adoptujesz.
Barend
58

Nie obchodzi mnie zbytnio możliwość podłączania modułów OSGi na gorąco (przynajmniej obecnie). To bardziej wymuszona modułowość. Brak miliona „publicznych” klas dostępnych na ścieżce klas dobrze chroni przed okrągłymi zależnościami: musisz naprawdę pomyśleć o swoich publicznych interfejsach - nie tylko pod względem konstruowania języka publicznego „java”, ale także pod względem biblioteki / module: Jakie (dokładnie) są komponenty, które chcesz udostępnić innym? Jakie (dokładnie) są interfejsy (innych modułów), których naprawdę potrzebujesz, aby wdrożyć swoją funkcjonalność?

Fajnie, że hotplug jest w to wyposażony, ale wolę zrestartować moje zwykłe aplikacje niż testować wszystkie kombinacje hotplug ...

Olaf Kock
źródło
9
Możesz to samo osiągnąć za pomocą Guice i pakietów, eksportując tylko interfejsy i moduły i zaznaczając wszystko inne pakiet-private
Pablo Fernandez
20
  • Analogicznie można zmienić silnik samochodu bez jego wyłączania.
  • Możesz dostosować złożone systemy dla klientów. Zobacz moc Eclipse.
  • Możesz ponownie wykorzystać całe komponenty. Lepsze niż tylko przedmioty.
  • Do tworzenia aplikacji opartych na komponentach używasz stabilnej platformy. Korzyści z tego są ogromne.
  • Możesz budować Komponenty z koncepcją czarnej skrzynki. Inne komponenty nie muszą wiedzieć o ukrytych interfejsach, widzą tylko opublikowane interfejsy.
  • W tym samym systemie można używać kilku jednakowych komponentów, ale w różnych wersjach, bez narażania aplikacji. OSGi rozwiązuje problem Jar Hell.
  • Dzięki OSGi rozwijasz sposób myślenia o architekturze systemów za pomocą CBD

Jest wiele korzyści (przypomniałem właśnie teraz), dostępnych dla każdego, kto używa Java.

Pan Pichler
źródło
15

zredagowane dla jasności. Strona OSGi dała lepszą, prostszą odpowiedź niż moja

Prosta odpowiedź: platforma usługowa OSGi zapewnia znormalizowane, zorientowane na komponenty środowisko komputerowe dla współpracujących usług sieciowych. Ta architektura znacznie zmniejsza ogólną złożoność budowania, utrzymywania i wdrażania aplikacji. Platforma serwisowa OSGi zapewnia funkcje dynamicznej zmiany składu na urządzeniu różnych sieci, bez konieczności ponownego uruchamiania.

W strukturze pojedynczej aplikacji, powiedzmy w Eclipse IDE, ponowne uruchomienie po zainstalowaniu nowej wtyczki nie stanowi problemu. Używając całkowicie implementacji OSGi, powinieneś być w stanie dodać wtyczki w czasie wykonywania, uzyskać nową funkcjonalność, ale w ogóle nie musisz restartować zaćmienia.

Ponownie, nie jest to wielka sprawa na co dzień, małe zastosowanie aplikacji.

Ale kiedy zaczynasz patrzeć na wielkomputerowe, rozproszone ramy aplikacji, zaczyna się to interesować. Gdy musisz mieć 100% czasu sprawności dla krytycznych systemów, przydatna jest możliwość wymiany składników podczas Hotswap lub dodania nowych funkcji w czasie wykonywania. To prawda, że ​​w większości przypadków można to teraz zrobić, ale OSGi próbuje spakować wszystko w ładną małą platformę ze wspólnymi interfejsami.

Czy OSGi rozwiązuje typowe problemy, nie jestem tego pewien. Mam na myśli, że tak, ale koszty ogólne mogą nie być tego warte w przypadku prostszych problemów. Ale należy wziąć to pod uwagę, gdy zaczynasz zajmować się większymi aplikacjami sieciowymi.

scubabbl
źródło
Czy twierdzisz, że OSGi zapewnia mechanizm między JVM do wykrywania usług w środowisku rozproszonym? Odpowiedzi na moje własne pytanie ( stackoverflow.com/questions/375725/... )
brzmiało
Co rozumiesz przez „sieci” w „dynamicznie zmieniać skład na urządzeniu różnych sieci”?
Thilo
Czy mikrousługi nie rozwiązują podobnych problemów?
Vibha
12

Kilka rzeczy, które doprowadzają mnie do szału w OSGi:

1) Implanty i ich programy ładujące kontekst mają dla nich wiele dziwactw i mogą być nieco asynchroniczne (używamy feliksu w miejscu przecięcia). W porównaniu z czystą wiosną (bez DM), w której [main] prawie wszystko synchronizuje wszystko.

2) Klasy nie są równe po gorącym obciążeniu. Załóżmy na przykład, że masz hibernację w warstwie pamięci podręcznej tangosolu. Jest wypełniony klasą Fork.class, poza zakresem OSGi. Ładujesz nowy słoik, a Widelec się nie zmienił. Class [Fork]! = Class [Fork]. Pojawia się również podczas serializacji z tych samych przyczyn.

3) Klastrowanie.

Możesz obejść te rzeczy, ale jest to poważny ból i sprawia, że ​​Twoja architektura wygląda na wadliwą.

A tym z was, którzy reklamują hotplugging ... Klient nr 1 OSGi? Zaćmienie. Co robi Eclipse po załadowaniu pakietu?

Zrestartuje się.

eric
źródło
Nie zapomnij wspomnieć, że Eclipse może nawet nie zostać uruchomiony, ponieważ wykres zależności OSGi został uszkodzony przez ten nowy pakiet.
Martin Vysny
6

OSGi sprawia rzut kodu NoClassDefFoundErrori ClassNotFoundExceptionbez wyraźnego powodu (prawdopodobnie dlatego, że zapomniał wyeksportować pakiet w pliku konfiguracyjnym OSGi); ponieważ ma ClassLoaders, może sprawić, że twoja klasa com.example.Foonie zostanie przerzucona, com.example.Fooponieważ w rzeczywistości są to dwie różne klasy ładowane przez dwa różne moduły ładujące. Może sprawić, że Eclipse uruchomi się w konsoli OSGi po zainstalowaniu wtyczki Eclipse.

Dla mnie OSGi tylko zwiększyło złożoność (ponieważ dodało mi jeszcze jeden model mentalny dla mnie do grokowania), dodało irytacji z powodu wyjątków; Nigdy tak naprawdę nie potrzebowałem dynamiki, jaką „oferuje”. Było to uciążliwe, ponieważ wymagało konfiguracji pakietu OSGi dla wszystkich modułów; zdecydowanie nie było to proste (w większym projekcie).

Z powodu mojego złego doświadczenia staram się trzymać z dala od tego potwora, bardzo dziękuję. Wolę cierpieć z powodu piekła zależnego od słoika, ponieważ jest to o wiele łatwiejsze do zrozumienia niż piekło klasyloader, które wprowadza OSGi.

Martin Vysny
źródło
5

Mam jeszcze być „fanem” OSGi ...

Pracuję z aplikacją dla przedsiębiorstw w firmach z listy Fortune 100. Ostatnio używany przez nas produkt został „uaktualniony” do implementacji OSGi.

Uruchamianie lokalnego wdrażania cba ... [2/18/14 8: 47: 23: 727 EST] 00000347 CheckForOasis

ostatecznie wdrożony i „następujące pakiety zostaną wyciszone, a następnie ponownie uruchomione” [2/18/14 9: 38: 33: 108 EST] 00000143 AriesApplicat I CWSAI0054I: W ramach operacji aktualizacji aplikacji

51 minut ... za każdym razem, gdy zmienia się kod ... Poprzednia wersja (inna niż OSGi) była wdrażana w mniej niż 5 minut na starszych komputerach programistycznych.

na maszynie z 16 gig RAM i 40 wolnymi dyskami i procesorem Intel i5-3437U 1,9 GHz

„Korzyści” z tego uaktualnienia zostały sprzedane jako ulepszenia (produkcyjne) wdrożenia - czynność, którą wykonujemy około 4 razy w roku, z 2–4 małymi poprawkami rocznie. Dodanie 45 minut dziennie do 15 osób (kontrola jakości i programiści) Nie wyobrażam sobie, aby kiedykolwiek było uzasadnione. W aplikacjach dużych przedsiębiorstw, jeśli twoja aplikacja jest aplikacją podstawową, to zmienianie jej jest słuszne (małe zmiany mają potencjalnie daleko idące skutki - muszą być komunikowane i planowane z konsumentami w całym przedsiębiorstwie), monumentalne działanie - zła architektura dla OSGi. Jeśli twoja aplikacja nie jest aplikacją korporacyjną - tzn. Każdy konsument może mieć własny, dostosowany moduł, który prawdopodobnie uderzy we własny silos danych we własnej silosowej bazie danych i będzie działał na serwerze, który obsługuje wiele aplikacji, to spójrz na OSGi. Przynajmniej,

NoLaughAtOlaf
źródło
4
OSGi nie może spowodować, że wdrożenie trwa od 5 do 51 minut, ponieważ praktycznie nie ma narzutu. Ten wzrost czasu uruchamiania musi być spowodowany czymś innym lub serializacją inicjalizacji poprzez synchronizację aktywatorów. To nie wina OSGi, ponieważ generalnie ludzie mają krótszy czas uruchamiania.
Peter Kriens
Ciekawa odpowiedź. Właśnie czytam o OSGi teraz ... tak późno. Ale martwię się o dane w kontekście korporacyjnym. Podobny problem mam z mikrousługami.
Bill Rosmus,
4

Jeśli aplikacja oparta na Javie wymaga dodawania lub usuwania modułów (rozszerzenie podstawowej funkcjonalności aplikacji), bez wyłączania JVM, można zastosować OSGI. Zwykle, jeśli koszt zamknięcia JVM jest większy, wystarczy zaktualizować lub ulepszyć funkcjonalność.

Przykłady :

  1. Eclipse : Zapewnia platformę dla wtyczek do instalowania, odinstalowywania, aktualizacji i wzajemnego zależności.
  2. AEM : aplikacja WCM, w której zmiana funkcjonalności będzie zależeć od biznesu, na który nie można pozwolić sobie na przestoje w celu konserwacji.

Uwaga : Framework Spring przestał obsługiwać pakiety wiosenne OSGI, uznając to za niepotrzebną złożoność dla aplikacji opartych na transakcjach lub dla pewnego punktu w tych liniach. Osobiście nie uważam OSGI, chyba że jest to absolutnie konieczne, w czymś takim, jak budowanie platformy.

Dileepa
źródło
3

Pracuję z OSGi prawie 8 lat i muszę powiedzieć, że powinieneś rozważyć OSGi tylko wtedy, gdy masz biznesową potrzebę aktualizacji, usunięcia, instalacji lub wymiany komponentu w czasie wykonywania. Oznacza to również, że powinieneś mieć modułowy sposób myślenia i rozumieć, co oznacza modułowość. Istnieją pewne argumenty, że OSGi jest lekki - tak, to prawda, ale są też inne ramy, które są lekkie i łatwiejsze w utrzymaniu i rozwoju. To samo dotyczy bezpieczeństwa java bla bla.

OSGi wymaga solidnej architektury do prawidłowego używania i dość łatwo jest stworzyć system OSGi, który równie łatwo może być samodzielnym uruchamianym słojem bez udziału OSGi.

OPManninen
źródło
2

OSGi zapewnia następujące korzyści:

■ Przenośne i bezpieczne środowisko wykonawcze oparte na Javie

■ System zarządzania usługami, za pomocą którego można rejestrować i udostępniać usługi w pakietach oraz oddzielać dostawców usług od odbiorców usług

■ Dynamiczny system modułów, którego można użyć do dynamicznej instalacji i deinstalacji modułów Java, które OSGi nazywa pakietami

■ Lekkie i skalowalne rozwiązanie

Masudul
źródło
1

Jest również wykorzystywany do zapewnienia dodatkowej przenośności oprogramowania pośredniego i aplikacji po stronie mobilnej. Strona mobilna jest dostępna na przykład dla WinMo, Symbian, Android. Gdy tylko nastąpi integracja z funkcjami urządzenia, może ulec fragmentacji.


źródło
1

Przynajmniej OSGi sprawia, że ​​MYŚLISZ o modułowości, ponownym użyciu kodu, wersjonowaniu i ogólnie hydraulice projektu.

Leen Toelen
źródło
Nie każe ci o tym myśleć, może po prostu cię pomylić, to kłamstwo, że rozwiązuje wszystkie problemy (tylko Ty możesz je rozwiązać), po prostu przynosi zależność piekła, gdy twój projekt jest większy niż ~ 50 wtyczek i zwykle musisz wykonać wiele sztuczek loadloadera. Więc twój kod jest o wiele bardziej nieuporządkowany, ponieważ musisz trochę hakować osgi, a wszyscy deweloperzy w twoim zespole muszą zrozumieć te hacki, aby zrozumieć kod. Ten wpływ jest tak duży, że wpływa na twoją architekturę w taki sposób, że robisz bardzo złe rzeczy w swoim kodzie. To piekło.
Krzysztof Cichocki,
1

Inni już szczegółowo opisali korzyści, niniejszym wyjaśniam praktyczne przypadki użycia, które widziałem lub stosowałem OSGi.

  1. W jednej z naszych aplikacji mamy przepływ oparty na zdarzeniach, a przepływ jest definiowany we wtyczkach opartych na platformie OSGi, więc jutro, jeśli jakiś klient chce innego / dodatkowego przepływu, musi po prostu wdrożyć jeszcze jedną wtyczkę, skonfigurować ją z naszej konsoli i gotowe. .
  2. Służy do wdrażania różnych konektorów Store, na przykład załóżmy, że mamy już konektor Oracle DB, a jutro konieczne będzie połączenie mongodb, a następnie napisanie nowego konektora i wdrożenie go oraz skonfigurowanie szczegółów za pomocą konsoli i znowu gotowe. wdrażanie konektorów jest obsługiwane przez strukturę wtyczek OSGi.
dvsakgec
źródło
1

Na oficjalnej stronie znajduje się już dość przekonujące oświadczenie, które mogę zacytować jako

Kluczowym powodem sukcesu technologii OSGi jest to, że zapewnia bardzo dojrzały system komponentów, który faktycznie działa w zaskakującej liczbie środowisk. System komponentów OSGi jest w rzeczywistości używany do budowania bardzo złożonych aplikacji, takich jak IDE (Eclipse), serwery aplikacji (GlassFish, IBM Websphere, Oracle / BEA Weblogic, Jonas, JBoss), struktury aplikacji (Spring, Guice), automatyka przemysłowa, bramy mieszkaniowe, telefony i wiele więcej.

Co do korzyści dla programisty?

DEWELOPERZY: OSGi zmniejsza złożoność, zapewniając modułową architekturę dla dzisiejszych dużych systemów rozproszonych, a także małych, wbudowanych aplikacji. Budowanie systemów z wewnętrznych i gotowych modułów znacznie zmniejsza złożoność, a tym samym koszty rozwoju i utrzymania. Model programowania OSGi spełnia obietnicę systemów opartych na komponentach.

Sprawdź szczegóły w Korzyści z używania OSGi .

Hearen
źródło