Frage

Ich habe mich in OSGi vor kurzem und denke, es ist wie eine wirklich gute Idee sucht modulare Java-Anwendungen.

Aber ich frage mich, wie OSGi in einer Web-Anwendung funktionieren würde, wo man nur Code haben keine Sorgen zu machen -. Auch HTML, Bilder, CSS, so etwas

Bei der Arbeit bauen wir eine Anwendung, die mehr ‚Tabs‘ hat, jede Registerkarte ein Teil der App zu sein. Ich denke, das ist wirklich nicht daran, ein OSGi-Ansatz profitieren könnten - aber ich bin wirklich nicht sicher, was der beste Weg wäre, die alle gängigen Web-App-Ressourcen zu behandeln

.

Ich bin nicht sicher, ob es einen Unterschied macht, aber wir verwenden JSF und IceFaces (das fügt eine weitere Schicht von Problemen, weil Sie Navigationsregeln und Sie haben alle in Ihre web.xml Gesichter Konfigurationsdateien angeben ... doh!)

Edit: nach diesem Thread , Gesichter-config.xml Dateien können geladen von JAR-Dateien werden. - so ist es tatsächlich möglich, mehrere Gesichter-config.xml Dateien ohne Änderung web.xml enthalten haben, sofern Sie in JAR-Dateien aufteilen

Irgendwelche Vorschläge wäre sehr dankbar: -)

War es hilfreich?

Lösung

Sie sind sehr recht in der Annahme gibt es hier Synergien, haben wir einen modularen Web-App, wo die App selbst automatisch aus unabhängigen Komponenten zusammengesetzt wird (OSGi-Bundles), wobei jedes Bündel seine eigenen Seiten beiträgt, Ressourcen, CSS und optional Javascript.

Wir verwenden JSF (Spring MVC hier) nicht so kann ich auf die zusätzliche Komplexität dieses Rahmens in einem OSGi-Kontext nicht kommentieren.

Die meisten Frameworks oder Ansätze gibt, haften noch an die „alten“ Denkweise. Eine WAR-Datei Ihre Webapp darstellt und dann viele OSGi-Bundles und Dienstleistungen, aber fast keine Sorge, sich mit der Modularisierung der GUI selbst

Voraussetzungen für eine Design

Mit OSGi der ersten Frage zu lösen ist: Was ist Ihr Einsatzszenario und wer ist der primäre Behälter? Was ich meine ist, dass Sie Ihre Anwendung auf einer OSGi-Laufzeit bereitstellen können und die Infrastruktur für alles verwenden. Alternativ können Sie auch eine OSGi-Laufzeit in einem traditionellen App-Server einbetten und dann müssen Sie einige Infrastruktur wiederverwenden, speziell möchten Sie die Servlet-Engine AppServer verwenden.

Unser Design basiert derzeit auf OSGi als Container und wir nutzen die Http von OSGi als unsere Servlet-Container angeboten. Wir suchen in eine Art transparenter Brücke zwischen einem externen Servlet-Container bereitstellt und dem OSGi Http aber, dass die Arbeit ist noch nicht abgeschlossen.

Architekturskizze einer Spring MVC + OSGi modularen Webapp

So das Ziel nicht ist, nur eine Web-Anwendung über OSGi zu dienen, sondern auch Komponenten-Modell auf die Web-Oberfläche selbst, die OSGi anzuwenden, um es zusammenzusetzbare, wiederverwendbar, dynamisch.

Dies sind die Komponenten im System:

  • 1 zentrales Bündel, die Pflege überbrück Spring MVC mit OSGi nimmt, und zwar verwendet er Code von Bernd Kolb , damit Sie den Frühling DispatcherServlet mit OSGi als Servlet registrieren.
  • 1 benutzerdefinierte URL Mapper, der in die DispatcherServlet injiziert wird und das eine die Zuordnung der eingehenden HTTP-Anforderungen an den richtigen Controller.
  • 1 zentrale Sitemesh basierter Dekorateur JSP, das das globale Layout der Website sowie die zentrale CSS und Javascript-Bibliotheken, die wir als Standardwerte anbieten wollen definiert.
  • Jedes Bündel, die Seiten auf unseren Web-UI beitragen will, muss veröffentlichen 1 oder mehr Controller als OSGi-Service und stellen Sie sicher, registriert ihre eigene Servlet und seine eigenen Ressourcen (CSS, JSP, Bilder, etc. ) mit dem OSGi Httpservice. Die Registrierung mit dem Http erfolgt und die wichtigsten Methoden sind:

    httpService.registerResources () und httpService.registerServlet ()

Wenn ein Web-ui beiträgt Bündel aktiviert und veröffentlicht seine Controller, sie werden von unserem zentralen Web-UI-Bündel automatisch aufgenommen und der zuvor genannte benutzerdefinierte URL Mapper sammelt diesen Controller-Dienst und hält eine aktuelle Karte von URLs Instanzen Controller.

Dann, wenn eine HTTP-Anforderung für eine bestimmte URL kommt, findet er die zugehörigen Controller und sendet die Anfrage dort.

Der Regler tut ihr Geschäft und gibt dann alle Daten, die gemacht werden sollen und der Name der Ansicht (eine JSP in unserem Fall). Diese JSP wird in der Controller-Bundle und kann genau durch das zentrale Web-UI-Bundle abgerufen und wiedergegeben werden, weil wir die Ressource Lage mit dem Http gingen und registriert. Unsere zentrale Sicht Resolver dann verschmilzt diese JSP mit unserem zentralen Sitemesh Dekorateur und spuckt die resultierende HTML an den Client.

In wissen, das ziemlich hohe Niveau, aber ohne die vollständige Umsetzung vorausgesetzt, es ist schwer zu vollständig zu erklären.

Unser wichtigster Lernpunkt hierfür war unter was Bernd Kolb zu suchen hat mit seinemBeispiel JPetstore Umstellung auf OSGi und diese Informationen zu nutzen, um unsere eigene Architektur zu entwerfen.

IMHO es derzeit viel zu viel Hype und konzentriert sich auf immer OSGi irgendwie in traditionellen Java EE-basierten Anwendungen eingebettet und sehr wenig Gedanken werden setzten in tatsächlich die Nutzung von OSGi Idiomen und seinem hervorragenden Komponentenmodell, um wirklich dem Design von componentized Web zu ermöglichen Anwendungen.

Andere Tipps

Schauen Sie sich Springsource dm Server - einen Anwendungsserver vollständig in Bezug auf OSGi und unterstützen modulares Web gebaut Anwendungen. Es ist in kostenlos, Open Source und kommerziellen Versionen.

können Sie beginnen, indem eine Standard-WAR-Datei bereitstellen und dann brechen nach und nach Ihrer Anwendung in OSGi-Module oder ‚Bündel‘ in OSGi-sprechen. Wie Sie von Springsource erwarten könnte, der Server eine hervorragende Unterstützung für das Spring-Framework hat und damit verbundene Feder Portfolio Produkte.

Disclaimer: Ich arbeite an diesem Produkt

.

Beachten Sie die Frühlings-DM-Server Lizenzierung .

Wir haben mit Restlet mit OSGi um eine gute Wirkung mit einem eingebetteten Http-Dienst (unter der Decke es ist eigentlich Jetty, aber Kater ist auch vorhanden).

Restlet hat null auf minimale XML-Konfigurationsanforderungen und jede Konfiguration, die wir tun, ist in dem Bundle (Registrierung neuen Dienste).

Wenn die Seite des Aufbau verarbeiten wir nur die entsprechenden Service-Implementierungen die Ausgabe, Dekorations-Format zu erzeugen. Neue Pakete gesteckt zu werden in einer neuen Seite Dekorationen fügt / widgets das nächste Mal seine gemacht werden.

REST gibt uns schöne, saubere und aussagekräftige URLs, mehrere Darstellungen derselben Daten, und scheint eine erweiterbare Metapher (wenige Verben, viele Substantive).

Ein Bonus-Feature für uns war die umfangreiche Unterstützung für Caching, speziell der ETag.

Spring scheint auf einem interessanten modularen Web-Framework auf der OSGi genannt Spring Scheiben gebaut zu arbeiten. Weitere Informationen finden Sie in den folgenden Blog-Posts zu finden:

Hier finden Sie aktuelle RAP! http://www.eclipse.org/rap/

Hier finden Sie aktuelle http://www.ztemplates.org die einfach und leicht zu erlernen ist. Dieser ermöglicht es Ihnen, alle zugehörigen Templates, JavaScript und CSS in ein Gefäß zu setzen und es transparent verwenden. Bedeutet, dass Sie selbst haben nicht zu erklären, die benötigten Javascript in Ihrer Seite zu kümmern, wenn eine bereitgestellte Komponente, da der Rahmen macht es für Sie.

Interessante Reihe von Beiträgen. Ich habe eine Web-Anwendung, die auf einer Pro-Kundenbasis zugeschnitten ist. Jeder Kunde erhält einen Kernsatz von Komponenten und zusätzliche Komponenten je nachdem, was sie für sich angemeldet haben. Für jede Version haben wir den richtigen Satz von Dienstleistungen ‚montieren‘ und wenden Sie das richtige Menü config (wir Verstrebungen Menü), basierend auf den Kunden, die gelinde gesagt langweilig ist. Im Grunde ist es die gleiche Code-Basis, aber wir einfach Navigation anpassen zu belichten oder bestimmten Seiten zu verstecken. Dies ist natürlich nicht ideal, und wir möchten OSGi nutzen Dienstleistungen componentize. Während ich sehen kann, wie dies für Service-APIs erfolgt und Art zu verstehen, wie Ressourcen wie CSS und Java Script und Controller (verwenden wir Spring MVC) auch gebündelt werden könnten, wie würden Sie über den Umgang mit den Anliegen der Querschneiden 'gehen wie Seitennavigation und allgemeiner Arbeitsablauf vor allem in dem Szenario, wo Sie wollen dynamisch einen neuen Dienst bereitstellen und müssen hinzufügen Navigation zu diesem Dienst. Es können auch andere ‚Querschnittsthemen‘ betrifft, wie Dienstleistungen, die andere von anderen Diensten umfassen. Vielen Dank, Declan.

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