2009-07-28 4 views
5

Es scheint, dass OSGi in diesen Tagen ein heißer Begriff ist. Viele benefits aufgerufen werden:Rentabilitätsgrenze für OSGi

  • Reduzierte Komplexität
  • Reuse
  • Einfache Bereitstellung
  • Versionierung

(etc)

ich für einen ganz bestimmten Anwendungsfall zu fragen - kleine bis mittlere Webanwendungen. Welche Vorteile bringt OSGi für diese? Es ist es wirklich wert?

+0

Dies ist subjektiv, aber nicht CW-Material. Ich werde die Antwort mit den besten Argumenten wählen. –

+0

In Übereinstimmung mit der Antwort von Partly Cloudy ist "reduzierte Komplexität" umstritten. – Thilo

Antwort

6

Ich werde eine NO riskieren, obwohl ich ein großer Fan von OSGi bin. Es sei denn, Sie arbeiten mit anderen OSGi-Bundles zusammen oder haben ein bestimmtes Problem, das Sie ohne diesen Vorschlaghammer nicht ohne weiteres lösen können.

Der Vorteil ist elegante Klassenpfadtrennung (IMHO). Wenn Sie verschiedene Versionen derselben JAR/Klasse benötigen, beispielsweise weil Sie bestimmte Teile einer App aktualisieren, während sie läuft, oder weil Sie viele Module von Drittanbietern kombinieren, dann ist OSGi großartig.

Das ist keine einfache Sache, und mit OSGi ist es nicht einfach. Es ist sauber gemacht, aber auf Kosten einer anderen Schicht im Umweltstapel. Und eine Menge Arbeit zu lernen und zu pflegen.

Ganz zu schweigen von der Dokumentation ist nicht besonders anfängerfreundlich.

Ich empfehle, darüber zu lernen - Eclipse-Plugins zu bauen ist eine sehr gute Möglichkeit - aber nicht in Ihrem Entwicklungsplan zu bauen, bis Sie es gut kennen.

7

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.