Powiedziałbym, jak zawsze "to zależy".
Twoje środowisko
Rozważmy istniejący zespół bez doświadczenia OSGI (który dumnie uważają się za doświadczonych programistów, którzy „get things done”. Jest szansa, że będą one wystąpić poważny ból lub powolny początek .
wiele (więcej niż myślisz) deweloperzy nie są zaznajomieni z narzędzi budowania takich jak Ant lub Maven, a gdy są one jedynie ograniczone możliwości korzystania z tych narzędzi budowania.
Tworzenie Pakiety OSGI najlepiej jest wykonać przy użyciu skryptu lub ręcznie napisanego manifestu dla archiwum słoików.
Małe aplikacje
Dla małych aplikacji, OSGI wprowadza niepotrzebną złożoność natomiast można użyć dynamicznych języków takich jak Jython itp lub ramy plugin taki jak JPF lub SPI. Możesz również przejść bezpośrednio z refleksją i prostym niestandardowym programem ładującym klasy.
Wielkie aplikacji
Duże aplikacje mogą korzystać z OSGi, zwłaszcza gdy są one napisane od podstaw. IMHO integrujące OSGI w istniejącej aplikacji przypomina raczej wprowadzenie łaty zapewniającej architekturę modułową.
Z mojego doświadczenia wynika, że po przepisaniu wielu aplikacji lepiej jest pomyśleć o modularności na początku projektu.
Inne problemy
wdrażania: Tak samo jest w każdej aplikacji. Jeśli jesteś przyzwyczajony do wdrażania aplikacji Java Web Start, wdrożenie nie jest problemem. Jeśli jesteś przyzwyczajony do OSGI, wdrożenie nie powinno stanowić problemu.
Od czasu do czasu pojawiają się zawsze problemy związane z wdrożeniem w produkcji, co jest naturalne.
Wersja: Istnieje wiele sposobów na zapewnienie wersjonowania w aplikacji. Ale jeśli używasz wersjonowania tylko jako "informacji" vs jako narzędzia (zarządzanie wymaganiami zależności), wersjonowanie nie jest problemem.
Ponowne użycie: Podczas korzystania z OSGI zazwyczaj piszesz kod do ponownego użycia, ale każdy dobrze napisany API został zaprojektowany z myślą o ponownym użyciu kodu.
Eclipse to numer jeden udanej dużej aplikacji napisanej z OSGI. Istnieją inne duże/ładne narzędzia, które nie korzystają z OSGI i są modułowe.
Wnioski
W wielu ram modułowych, trudno obsłużyć zależności, stop/start/odinstalować/zainstalować funkcje w czasie wykonywania, bez konieczności ponownego uruchamiania aplikacji. Grasz z niestandardowym ładowaniem klasy, wyłączaniem i uruchamianiem haków itp.
OSGI zapewnia taką elastyczność przy niewielkim koszcie IMHO.
To subiektywny, ale nie materiał CW. Wybieram odpowiedź z najlepszymi argumentami. –
Zgodnie z odpowiedzią udzieloną przez "Mętny deszcz", "ograniczona złożoność" jest dyskusyjna. – Thilo