Frage

Was macht ein Modul/Leistung/bit-Anwendung Funktionalität ein besonders guter Kandidat für ein OSGi-Modul?

Ich bin daran interessiert, mit OSGi in meine Anwendungen.Wir sind ein Java-shop, und wir verwenden Frühjahr ziemlich intensiv, also ich bin Neigung in Richtung der Verwendung Spring Dynamic Modules für OSGi(tm) - Service-Plattformen.Ich bin auf der Suche nach einem guten Weg, ein bisschen einarbeiten von OSGi in eine Anwendung als Testversion.Hat jemand hier diese oder eine ähnliche OSGi-Technologie?Gibt es irgendwelche Fallstricke?

@Nicolas - Danke, ich habe gesehen, dass man.Es ist eine gute Anleitung, aber ich bin mehr auf der Suche nach Ideen, wie zu tun, meine erste "echte" OSGi-bundle-im Gegensatz zu einem Hallo-Welt-Beispiel.

@david - Danke für den link!Idealerweise mit einem greenfield-app ist, würde ich das design das ganze dynamisch sein.Was ich Suche für jetzt, obwohl, ist die Einführung in ein kleines Stück einer vorhandenen Anwendung.Angenommen, Sie können wählen jedes Stück von die app, was sind einige Faktoren zu berücksichtigen, die würden machen, dass ein Stück besser oder schlechter als ein OSGi-Meerschweinchen?

War es hilfreich?

Lösung

Nun, da kann man nicht einen Teil OSGi und ein Teil nicht-OSGi-Sie brauchen, um Ihren gesamten app OSGi.In seiner einfachsten form, die Sie machen einem einzigen OSGi-bundle aus Ihrer gesamten Anwendung.Natürlich ist dies nicht die beste Praxis, aber es kann nützlich sein, um ein Gefühl für die Bereitstellung eines Bundles in einem OSGi-container (Equinox, Felix, Knoplerfish, etc).

Nehmen Sie es auf die nächste Ebene, die Sie werden wollen, start splitting, Ihre app in Komponenten sollten sich in der Regel haben eine Reihe von Aufgaben, die isoliert werden können, die vom rest Ihrer Anwendung durch eine Reihe von Schnittstellen und Klassen Abhängigkeiten.Die Identifizierung dieser rein von hand kann im Bereich von Recht einfach für eine gut gestaltete hoch kohäsiven aber lose gekoppelte Anwendung zu einem Alptraum für die interlocked-source-code, der Ihnen nicht vertraut sind.

Einige helfen kann kommen von tools wie JDepend die können zeigen Sie die Kopplung von Java-Paketen für andere Pakete/Klassen in Ihrem system.Ein Paket mit niedrigen efferente Kopplung sollte leichter sein, Sie zu extrahieren, in ein OSGi-bundle als eines mit hoher efferente Kopplung.Noch mehr architektonische Einsicht hatte mit Profi-tools wie Struktur 101.

Rein auf technischer Ebene arbeiten täglich mit einer Anwendung, die besteht aus 160 OSGi-bundles und mit Spring DM ich kann bestätigen, dass der übergang von "normalen" Frühling Frühjahr DM ist weitgehend schmerzfrei.Die extra-namespace und die Tatsache, dass Sie können (und sollten) isolieren Sie Ihre OSGi-spezifische Spring-Konfiguration in einer separaten Datei noch einfacher macht zu haben, sowohl mit und ohne OSGi deployment-Szenarien.

OSGi ist eine Tiefe und Breite-Komponenten-Modell, die Dokumentation, die ich empfehlen:

  • OSGi-R4-Spezifikation:Holen Sie sich die PDFs der Kern-und Kompendium Spezifikation, Sie sind kanonisch, die maßgebliche und sehr gut lesbar ist.Haben Sie eine Verknüpfung, um Sie jederzeit griffbereit, Sie konsultieren.
  • Lesen Sie auf OSGi best practices, es gibt eine große Reihe von Dingen, die Sie können tun, aber eine etwas kleinere Gruppe von Dingen, die Sie sollte tun, und es gibt einige Dinge, die Sie sollten nie tun (DynamicImport:* für Beispiel).

Einige links:

Andere Tipps

Beim lernen einer neuen Technologie Reich tooling bekommt Sie in die Dinge ohne große Kopfschmerzen.An dieser Stelle der community ops4j.org bietet ein reichhaltiges toolset namens "PAX", die beinhaltet:

  • Pax Runner:Ausgeführt werden und wechseln Sie zwischen Felix, Equinox, Knopflerfish und Concierge-leicht
  • Pax Construct:Konstruieren, Organisieren und Erstellen von OSGi-Projekten mit maven einfach
  • Pax Drone:Testen Sie Ihre OSGi-bundles mit Junit, während framework-unabhängige (verwendet PaxRunner)

Dann gibt es viele Implementierungen der OSGi compendium services:

  • Pax-Logging (Protokollierung),
  • Pax Web (http-Dienst),
  • Pax-Web-Extender (Krieg-Unterstützung),
  • Pax Münze (Konfiguration)
  • Pax Shell (shell-Implementierung, Teil der nächsten osgi release)
  • und vieles mehr.

..und es ist hilfreich, framework-unabhängige Gemeinschaft - aber das ist jetzt Werbung ;-)

Diese Antwort kommt fast 3 Jahre nach der Frage gefragt wurde, aber die link Ich fand gerade ist wirklich gut, vor allem für den Anfang mit maven.Eine Schritt-für-Schritt Erklärung.

Ist Ihre bestehende Anwendung monolithische oder tiered-in getrennten Prozessen/Layer?

Wenn tiered, können Sie konvertieren die Mitte/app-Stufe ausgeführt, die in einem OSGi-container.

In meinem team die Erfahrung, die wir gefunden haben, versuchen zu tun, web-stuff in OSGi schmerzhaft.Andere Schmerzen, die Punkte sind Hibernate und Jakarta Commons Logging.

Ich finde die OSGi-Spezifikationen ziemlich lesbar und ich empfehle Ihnen, drucken Sie das Flussdiagramm zeigt den Algorithmus zum laden von Klassen.Werde ich garantiere, Sie werden Momente haben, wo, warum bin ich immer ein NoClassDefFoundError?":das Flussdiagramm wird Ihnen sagen, warum.

Versuchen Sie es http://neilbartlett.name/blog/osgibook/.Das Buch hat die Hände auf Beispiele mit OSGi best practices.

Versuchen Sie es http://njbartlett.name/files/osgibook_preview_20091217.pdf

ODER

http://www.manning.com/hall/

Die zweite ist nicht ein Buch, das ich gelesen habe, mich aber ich habe gehört, gute Dinge über Sie.

Die erste war sehr nützlich für mich.Er führt Sie durch die Architektur zunächst und dann die Hände auf OSGi.

Es gibt ein paar denkt, zum im Verstand zu halten, wenn Sie beginnen mit OSGi.

Wie an anderer Stelle erwähnt in diesem thread wissen, etwa zum laden von Klassen ist wirklich wichtig.In meiner Erfahrung jeder früher oder später läuft in Probleme mit es.

Eine weitere wichtige Sache zu erinnern ist:halten Sie niemals Referenzen!Haben Sie einen Blick auf das whiteboard, Muster, auf denen die Service Konzept von OSGi ist bauen (siehe den link in einer der anderen Antworten).

In meiner Erfahrung sollten Sie nicht versuchen, Sie zu konvertieren Sie einen monolitischen Anwendung in eine OSGi-basierte ein.Dies führt in der Regel zu stark und unkontrollierbar Durcheinander.Neu zu starten.

Laden Sie eine der frei zur Verfügung stand-alone-OSGi-Implementierungen.Ich fand Knopflerfish ziemlich gut und stabil (ich verwende es in vielen Projekten).Es kommt auch mit viel source code.Sie können es hier finden: http://www.knopflerfish.org

Ein weiteres gutes tutorial finden Sie hier. https://pro40.abac.com/deanhiller/cgi-bin/moin.cgi/OsgiTutorial

Peter Kriens von der OSGi Alliance gab ein nettes interview: http://www.infoq.com/interviews/osgi-peter-kriens.Seine homepage und blog (das ist immer eine gute Lektüre finden Sie hier: http://www.aqute.biz

Ich mag die Apache Felix-tutorials.Ich denke jedoch, dass im Allgemeinen die Nutzung von OSGi in Ihrer Anwendung ist nicht einer dieser "lassen Sie uns in diesem Rahmen, weil es ein hype ist" Entscheidung.Es ist eher eine design-Frage, aber dann alles, OSGi bietet Ihnen in puncto design, können Sie haben mit Vanille-Java-als auch.

Wie für die Laufzeit, Sie können nicht nur fügen Sie einer vorhandenen Anwendung und machen es OSGi aktiviert.Es muss design sein, dynamisch sein.Spring DM macht es leicht zu verstecken, dass von Ihnen, aber es gibt Sie noch und Sie müssen sich dessen bewusst sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top