Modulare Web-Apps
Habe ich in OSGi vor kurzem und denke, es sieht aus wie eine wirklich gute Idee, für modulare Java-Anwendungen.
Aber ich Frage mich, wie OSGi funktioniert in einer web-Anwendung, wo Sie nicht einfach nur code zu kümmern - auch HTML, Bilder, CSS, diese Art der Sache.
Bei der Arbeit bauen wir eine Anwendung, die mehrere "tabs", wobei jede Registerkarte wird ein Teil der app. Ich glaube, das könnte wirklich davon profitieren, wobei ein OSGi-Ansatz - aber ich bin mir wirklich nicht sicher, was wäre der beste Weg, um mit all den üblichen web app-Ressourcen.
Ich bin mir nicht sicher, ob es einen Unterschied macht, aber wir sind mit JSF und IceFaces (fügt eine weitere Schicht Probleme, weil Sie die navigation-Regeln, und Sie müssen angeben, alle Gesichter config-Dateien in Ihrem web.xml... doh!)
Edit: laut dieser threadfaces-config.xml Dateien können geladen werden, die aus JAR-Dateien - so ist es tatsächlich möglich, habe mehrere faces-config.xml Dateien ohne änderung web.xml vorausgesetzt, Sie werden unterteilt in JAR-Dateien.
Anregungen würde sehr geschätzt werden 🙂
InformationsquelleAutor der Frage | 2008-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast Recht im denken es gibt Synergien hier, wir haben ein Modulares web-app, wobei die app selbst ist automatisch konfektioniert aus unabhängigen Komponenten (OSGi-bundles), wo jedes Paket bringt seine eigenen Seiten, Ressourcen, css und Optional javascript.
Wir nicht verwenden, JSF (Spring MVC hier) so ich kann nicht kommentieren, die Komplexität der Rahmen in einem OSGi-Kontext.
Meisten frameworks oder Ansätze gibt, noch halten zu den "alten" Weg zu denken: eine war-Datei was Ihr in der webapp und dann vielen OSGi-bundles und services, aber fast keiner sich mit der Modularisierung der GUI selbst.
Voraussetzungen für einen Design -
Mit OSGi die erste Frage, die es zu lösen gilt, ist: was ist dein Einsatz-Szenario und wer ist der primäre container? Was ich meine ist, können Sie die Bereitstellung der Anwendung auf einem OSGi-runtime und nutzen die Infrastruktur für alles. Alternativ können Sie einbetten eines OSGi runtime in einem traditionellen app-server, und dann werden Sie brauchen, um wieder verwenden einige Infrastruktur, insbesondere Sie verwenden möchten AppServer servlet-engine.
Unser design ist derzeit auf Basis von OSGi als der container, und wir verwenden die HTTPService-angeboten von OSGi als unsere servlet-container. Wir suchen in der Bereitstellung von irgendeine Art von transparent bridge zwischen einem externen servlet-container und OSGi HTTPService aber, dass die arbeiten im Gange sind.
Architektonische Skizze einer Spring MVC + modulare OSGi-webapp
Ziel ist es also, nicht nur dazu dienen eine Webanwendung über OSGi, sondern gelten auch für OSGi - Komponenten-Modell für die web-Benutzeroberfläche selbst zu machen, zusammenstellbar, wieder verwendbar, dynamisch.
Diese sind die Komponenten im system:
Jedes bundle, das dazu beitragen möchte, die Seiten auf unserer web-UI zu veröffentlichen, die 1 oder mehr Controller als OSGi-Services und stellen Sie sicher, dass registrieren Ihrer eigenen servlet und seine eigenen Ressourcen (CSS, JSP, Bilder, etc) mit der OSGi HTTPService. Die Registrierung erfolgt mit der HTTPService und die wichtigsten Methoden sind:
httpService.registerResources()
und
httpService.registerServlet()
Wenn ein web-ui-Beitrag bundle aktiviert ist und veröffentlicht seine Controller sind, werden Sie automatisch abgeholt und durch unsere zentrale web-Benutzeroberfläche zu bündeln und die bereits erwähnten custom-URL-Mapper sammelt diese Controller-services und hält eine aktuelle Karte von URLs auf Controller-Instanzen.
Dann, wenn ein HTTP-request für eine bestimmte URL, findet er die zugehörigen controller und sendet die Anfrage dort.
Den Controller verrichtet seine Arbeit und kehrt dann alle Daten, die dargestellt werden soll und den Namen der view (eine JSP-in unserem Fall). Diese JSP befindet sich in der Controller-bundle zugegriffen werden kann und erbracht durch die zentrale web-ui-bundle genau, da wir gingen, und registrierte die Ressource, die Lage mit der HTTPService. Unsere zentrale Sicht auf resolver führt dann diese JSP mit unserer zentrale Sitemesh Dekorateur und spuckt den resultierenden HTML-Code an den client.
In weiß, das ist ziemlich hohem Niveau, jedoch ohne Angabe der vollständigen Umsetzung ist es schwer, vollständig zu erklären.
Unserer wichtigsten Lern-Punkt für diese war was Bernd Kolb hat mit seinem Beispiel JPetstore Umstellung auf OSGi und verwenden diese Informationen, um design-unsere eigene Architektur.
IMHO gibt es aktuell viel zu viel hype und konzentrieren sich auf immer OSGi irgendwie eingebettet in der traditionellen Java-EE-basierten Anwendungen und sehr wenig Gedanken in Sie tatsächlich machen Verwendung von OSGi-Idiome und Ihre hervorragende Komponenten-Modell, um wirklich erlauben den Entwurf von komponentenbasierten web-Anwendungen.
InformationsquelleAutor der Antwort Boris Terzic
Check-out SpringSource dm Server - application-server wurde vollständig in Bezug auf OSGi und unterstützt das modulare Internet-Anwendungen. Es ist frei, open-source-und kommerzielle Versionen.
Können Sie starten, indem Sie eine standard-war-Datei und dann nach und nach brechen Ihre Anwendung in OSGi-Module, oder " bundles im OSGi-sprechen. Wie Sie vielleicht erwarten, von SpringSource, der server hat eine hervorragende Unterstützung für das Spring-framework und zugehörige Feder-portfolio-Produkte.
Disclaimer: ich arbeite auf dieses Produkt.
InformationsquelleAutor der Antwort Glyn Normington
Sich bewusst sein, der Spring DM server Lizenzierung.
InformationsquelleAutor der Antwort MikeNereson
Wir haben mit Restlet mit OSGi eine gute Wirkung mit einem eingebetteten Http-service (unter der Decke ist es eigentlich Jetty, aber tomcat ist auch vorhanden).
Restlet hat null bis minimalen XML-Konfiguration benötigt, und jede Konfiguration, die wir tun, ist im BundleActivator (die Registrierung neuer Dienste).
Beim Aufbau der Seite, wir haben gerade die Prozess-relevanten service-Implementierungen, um die Ausgabe zu erzeugen, Dekorateur Stil. Neue bundles immer eingesteckt wird neue Seite hinzufügen Dekorationen/widgets die nächste Zeit seine gerendert.
REST gibt uns schöne, saubere und aussagekräftige URLs, mehrere Darstellungen der gleichen Daten, und scheint eine erweiterbare Metapher (paar Verben, viele Substantive).
Ein bonus-feature war für uns die umfangreiche Unterstützung für caching, speziell der ETag.
InformationsquelleAutor der Antwort jamesh
SpringSource scheint zu funktionieren, auf eine interessante, modulare web-framework das auf Basis von OSGi genannt SpringSource Scheiben. Weitere Informationen finden Sie in den folgenden blog-posts:
InformationsquelleAutor der Antwort Pavol Juhos
Haben Sie einen Blick auf RAP! http://www.eclipse.org/rap/
InformationsquelleAutor der Antwort
Werfen Sie einen Blick auf http://www.ztemplates.org die einfach und leicht zu lernen. Dieses erlaubt Ihnen, alle zugehörigen Vorlagen, javascript und css in ein Glas und verwenden Sie es transparent. Bedeutet, dass Sie auch nicht zu kümmern, deklarieren die benötigten javascript in deiner Seite, wenn mit einer zur Verfügung gestellten Komponenten, wie Rahmen tut es für Sie.
InformationsquelleAutor der Antwort
Interessante Reihe von Beiträge. Ich habe eine web-Anwendung, die individuell pro Kunde basis. Jeder Kunde bekommt eine Kern-Komponenten und weitere Komponenten je nachdem, was Sie sich angemeldet haben. Für jede Ausgabe haben wir zu 'montieren' die richtigen Leistungen und die richtigen Konfig (wir verwenden struts-Menü) auf der Grundlage der Kunden, denen langweilig ist, um das Mindeste zu sagen. Im Grunde ist es die gleiche code-Basis aber, die wir einfach anpassen, die navigation zu setzen oder ausblenden von bestimmten Seiten. Das ist natürlich nicht optimal, und wir möchten, nutzen OSGi zu componentize Dienstleistungen. Während ich kann sehen, wie dies geschieht-service-APIs und die Art verstehen, wie die Ressourcen wie CSS und java-script-und-Controller (wir verwenden Spring MVC) konnte auch gebündelt werden, wie würden Sie gehen über den Umgang mit 'cross-cutting' Bedenken wie die Seitennavigation und die Allgemeine Arbeit fließen vor allem in das Szenario, wo Sie wollen, um dynamisch die Bereitstellung eines neuen service-und hinzufügen müssen, um die navigation zu diesem Dienst. Es gibt vielleicht auch andere 'cross-cutting' Themen wie Dienstleistungen, die sich über andere von anderen Dienstleistungen.
Vielen Dank,
Declan.
InformationsquelleAutor der Antwort