Ich würde sagen wie immer "es kommt darauf an".
Ihre Umgebung
ein bestehendes Team ohne OSGi Erfahrung Betrachten wir (die sich stolz als erfahrene Entwickler betrachten, die „Dinge erledigen“. Es gibt eine Chance, dass sie einen großen Schmerz oder einen langsamen Start erleben werden .
VIELE (mehr als Sie vielleicht denken) Entwickler mit Build-Tools nicht vertraut sind wie Ant oder Maven, und wenn sie sie nur eingeschränkte Funktionen dieser Werkzeuge bauen verwenden.
Erstellen OSGI-Bundles wird am besten mit Eclipse, Ant tasks oder Maven BND plugin VS ein Skript oder ein manuell geschriebenes Manifest für das Jar-Archiv durchgeführt.
Kleine Anwendungen
Für kleine Anwendungen, stellt OSGI unnötige Komplexität, während Sie dynamische Sprachen wie Jython usw. oder ein Plugin-Framework wie JPF oder SPI nutzen könnten. Sie können auch direkt mit Reflexion und einem einfachen benutzerdefinierten Classloader gehen.
Big Anwendungen
Big Anwendungen könnten von OSGi profitieren, vor allem, wenn sie von Grund auf neu geschrieben werden. Die Integration von OSGI in eine bestehende Anwendung ähnelt eher der Einführung eines Patches für eine modulare Architektur.
Aus meiner Erfahrung, nach dem Umschreiben vieler Anwendungen, ist es besser, über die Modularität in den frühen Tagen eines Projekts nachzudenken.
Weitere Bedenken
Deployment: Es ist das gleiche in allen Anwendungen. Wenn Sie Java Web Start-Anwendungen bereitstellen, spielt die Bereitstellung keine Rolle. Wenn Sie mit OSGI vertraut sind, sollte die Bereitstellung keine Rolle spielen.
Es gibt immer wieder Probleme in jeder Anwendung, wenn es um die Bereitstellung in der Produktion geht, was natürlich ist.
Versionierung: Es gibt viele Möglichkeiten, die Versionierung in einer Anwendung bereitzustellen. Wenn Sie jedoch nur die Versionierung als "Information" oder als Tool verwenden (Abhängigkeiten verwalten), ist die Versionierung kein Problem.
Reuse: Wenn OSGI verwenden Sie neigen dazu, Ihren Code für die Wiederverwendung zu schreiben, aber jeder gut geschrieben API mit Code-Wiederverwendung konzipiert ist.
Eclipse ist ein Beispiel Nummer eins für eine erfolgreiche große Anwendung mit OSGI geschrieben. Es gibt andere große/nette Werkzeuge, die OSGI nicht benutzen und sind modular.
Fazit
In vielen modularen Frameworks ist es schwierig, Abhängigkeiten zu handhaben, Stopp/Start/deinstallieren/installieren Funktionen zur Laufzeit, ohne die Anwendung neu starten. Sie spielen mit einem benutzerdefinierten Classloader, Herunterfahren und Start-Hooks usw.
OSGI gibt Ihnen solche Flexibilität zu einem geringen Kosten IMHO.
Dies ist subjektiv, aber nicht CW-Material. Ich werde die Antwort mit den besten Argumenten wählen. –
In Übereinstimmung mit der Antwort von Partly Cloudy ist "reduzierte Komplexität" umstritten. – Thilo