2010-04-02 3 views
27

Ich bin ziemlich neu in der ganzen Java- und OSGi-Welt und habe Probleme, das Ökosystem einer OSGi-Webanwendung zu verstehen.Probleme beim Verstehen des gesamten OSGi-Web-Ökosystems

Um genauer zu sein, die ich im Moment bin versucht, die Teile des Öko-System zu verstehen, wie alle miteinander verwandt sind:

  • OSGi Framework (zB Apache Felix, Equinox, Knoplerfish)
  • OSGi Runtime (zB Frühjahr DM Server, Pax Runner, Apache Karaf)
  • Web Extender (zB Pax Web Extender, Spring Web Extender)
  • Web Container (zB Apache Tomcat, Jetty)

Sie, um eine visuelle Darstellung von meinem eigentlichen Verständnis ihrer Beziehung geben Sie dieses Bild Check-out:

alt text http://img253.imageshack.us/img253/1631/osgiwebenvironmentschem.png

Soweit ich das OSGi Framework ist eine Implementierung der OSGi-Spezifikation kennen. Die Laufzeitumgebung ist eine Distribution, die zusätzliche Funktionen über die OSGi-Spezifikation hinaus hinzufügt, wie beispielsweise die Protokollierung. Da es im Klassenpfad-Mechanismus von OSGi und Web-Containern wie Tomcat einige Unterschiede zu geben scheint, brauchen Sie eine Art von Übersetzer. Dieser Teil wird vom "Web Extender" verwaltet.

Würden Sie bitte die ganze Sache für mich klären? Verstehe ich alles richtig?

Antwort

24

OSGi ist ein Standard in Bezug auf API und Verpackung für interagierende Softwaremodule. Dies ist vergleichbar mit anderen API-Standards wie JPA oder Java EE.

Eine OSGi Runtime ist ein Server, der dem OSGi-Standard folgt, es ist eine Implementierung des Standards. Sie erwähnen einige häufige: Knopflerfish, Eqinox. Damit können Sie OSGi-Bundles ausführen.

Ein Web-Container bezieht sich normalerweise auf eine Implementierung der webspezifischen Teile von Java EE (Servlets). Der Servlet-Standard definiert auch eine API und eine Verpackung, genau wie OSGi, nur anders.

Sie benötigen einen Server, um Ihre Java EE-Webanwendungen auszuführen. Sie packen Ihre App als Java Web Archive (WAR) und bitten Ihren Anwendungsserver, sie zu starten. Es gibt mehrere Server, wie Sie es nennen, wie Tomcat, Jetty, aber auch größere Server, die größere Teile des Java-EE-Standards wie Glassfish und JBoss abdecken.

Ein Web-Extender versucht, den Servlet-Standard mit OSGi zu vereinheitlichen. Durch Hinzufügen einiger OSGi-spezifischer Daten zu Ihrer bereits gepackten WAR wird die WAR automatisch von Ihrer OSGi-Laufzeitumgebung analysiert und gestartet. Ihre WAR-Servlets werden vom Web-Extender auf dem OSGi-HTTP-Service veröffentlicht. Mit einem Web-Extender können Sie sowohl Standard-OSGi-Anwendungen als auch WARs mit nur einer OSGi-Laufzeit ausführen, ohne dass ein Java EE-kompatibler Server wie Tomcat erforderlich ist.

+4

Vielen Dank für Ihre schnelle Antwort verleugnen. Wenn ich Sie richtig verstehe, nimmt der Web-Extender WAR-Dateien, die normalerweise in einem Web-Container wie Tomcat bereitgestellt werden, und würde sie auf der OSGi-Laufzeit ausführen. Der OSGi HttpService würde sie dann über das HTTP-Protokoll "im Web" zur Verfügung stellen. Richtig? Fazit: Ich würde keinen Web-Container wie Tomcat brauchen? – Jens

+2

Ja, genau richtig, wie es zusammenpasst. Ihre Dienste werden über den OSGi http-Dienst zur Verfügung gestellt. In der Praxis verwendet der Web-Extender jedoch einen Webcontainer, um den WAR trotzdem bereitzustellen. Der Vorteil, den Sie erhalten, ist, dass der WAR mit Ihren normalen Startskripten des OSGi-Frameworks gestartet werden kann und die WARs an der normalen Abhängigkeitsverwaltung des OSGi-Frameworks teilnehmen können (dh Sie können sich auf WAR: s und WAR: s verlassen) kann von anderen OSGi-Bundles abhängen). –

+1

Und alle Servlets werden beim OSGi http-Dienst registriert. –

3

Jens,

Als ich einige Erfahrung mit OSGi haben, würde ich wirklich nicht schlagen Sie mit einfachen OSGi beginnen.

Beginnen Sie stattdessen mit Eclipse RCP (Rich Client Platform).

Sie erhalten nicht nur eine OSGi-Runtime, sondern eine integrierte IDE mit vollem Funktionsumfang, wenn Sie download Eclipse IDE for RCP and RAP Developers edition here.

Zum Glück für uns alle, können Sie das Buch Eclipse Rich Client Platform (2nd Edition) erhalten, die vor kurzem erst vor wenigen Monaten veröffentlicht wurde und enthält aktualisierte Informationen/Führer auf Eclipse RCP.

OSGi ist die grundlegenden Bausteine ​​von Eclipse RCP, aber OSGi selbst ist verwirrend und langweilig (zumindest für Anfänger). Das Aufrufen von Eclipse RCP ist viel einfacher und angenehmer, Sie können innerhalb von Stunden eine funktionierende "Do-Something" -App erstellen.

Mit einfachen OSGi, Sie würden schon Glück haben, wenn Sie ClassNotFound Ausnahmen innerhalb der ersten Tage loswerden können.

Nach einiger Zeit mit Eclipse RCP, "konvertieren" Sie Ihre Anwendung zu Eclipse RAP, um es als Webanwendung auf einem Java-Servlet-Container auszuführen. Sehen Sie, wenn Sie es mögen, auch wenn Sie nicht ... zu diesem Zeitpunkt hatten Sie bereits die OSGi Konzepte & Praktiken, die Ihre Segeln zu "Plain OSGi" wäre etwas glatter als wenn Sie von Grund auf neu begonnen hätten.

Viel Glück Jens!

P.S. Ich schreibe auch über dieses Zeug auf my Java EE blog, obwohl nicht immer speziell auf OSGi.

+0

Hey Hendy, danke für Ihre Antwort. Ich denke, ich bin nicht der gewöhnliche Programmierer, da ich dachte, dass einfaches OSGi gar nicht so schlecht ist. Und ich habe die meisten meiner Trainingsprojekte nur mit meinem Terminal/Konsole und einem einfachen Texteditor gemacht;) Ich mag es, die Dinge einfach zu halten. Aber die ganze Eclipse-Umgebung ist natürlich auch nicht schlecht und für größere Projekte der richtige Weg. Ich weiß nicht, warum sich alle OSGi-Programmierer für schlichtes OSGi schämen? In meinen Augen hat es Java wieder interessant gemacht. – Jens

+0

wollte nur meine 2 Cent hier hinzufügen. Ich stimme nicht mit Hendys Ratschlag überein, ob man nicht einfach OSGi anschaut oder benutzt. Es gibt viele Fälle, in denen einfache OSGi oder einige andere OSGi-Komponenten eine weitaus bessere Option als RCP sind. Sicher hat RCP seinen Nutzen, aber es ist nicht die Wunderwaffe. –

+1

@Marcel danke, ich stimme Ihnen sicherlich zu, dass "RCP seinen Nutzen hat, aber es ist nicht die Wunderwaffe." Was ich meinte ist, dass Eclipse RCP eine einfachere Möglichkeit ist, mit OSGi zu beginnen (d. H. ** Lernphase **). Innerhalb weniger Tage wird ein Programmierer in der Lage sein, viele Dinge relativ einfacher zu machen als mit einfachem OSGi, dann bekommt man ein Gefühl dafür, was OSGi ist. Ein leerer Programmierer, der mit einfachem OSGi beginnt, würde in den ersten Tagen wahrscheinlich zu viele Fehler bekommen und leicht verwirrt sein. Nachdem die anfängliche Kurve übergeben wurde, ist es die Entscheidung des Entwicklers, ob RCP oder einfaches OSGi für ihr Projekt besser geeignet ist. –

Verwandte Themen