Frage

Ich habe diese Web-Anwendung, die zu einem unüberschaubaren Chaos gewachsen ist.

ich es in einen gemeinsamen „Rahmen“ Teil geteilt werden soll (das schließt noch Web-Sachen wie Seiten und Bilder) und mehrere Module, die zusätzliche Funktionen und Bildschirme hinzufügen. Ich will das Refactoring auch als Plugin-System für Erweiterungen von Drittanbietern nützlich sein.

Alle Module müssen separate Einheit von Einsätzen sein, im Idealfall ein Krieg oder JAR-Datei.

Ich habe versucht, nur einige regelmäßigen Krieg Dateien zu machen, aber Tomcat hält (nach der Servlet-Spezifikation) diese Krieg Dateien vollständig getrennt von jedem-andere, so dass sie nicht ihre Klassen gemeinsam nutzen können, zum Beispiel.

Ich muß Plugins Lage sein, den "main" Classpath zu sehen.

Ich muss Hauptanwendung eine gewisse Kontrolle über die Plugins haben, wie zum Beispiel in der Lage, sie aufzulisten, und stellen Sie deren Konfiguration.

Ich möchte eine vollständige Trennung zwischen den Plugins halten selbst (es sei denn, sie Abhängigkeiten angeben) und alle anderen nicht verwandten Web-Anwendungen, die auf demselben Tomcat ausgeführt werden kann.

Ich mag sie unter dem „main“ Anwendung URL-Präfix verwurzelt sein, aber das ist nicht notwendig.

Ich möchte Tomcat verwenden (große bauliche Veränderungen mit zu vielen Menschen koordiniert werden müssen), sondern auch eine saubere Lösung in der EJB oder OSGi Welt hören, wenn es.

War es hilfreich?

Lösung

Ich habe mit der Idee wurde bastelt OSGi der mit dem gleichen Problem lösen Sie beschreiben. Insbesondere ich bin auf der Suche mit Frühling Dynamische Module .

Andere Tipps

Hier finden Sie aktuelle Java Portlets - http://developers.sun.com / Portalserver / reference / techart / JSR168 / - auf den Punkt gebracht, eine Spezifikation für die Interoperabilität zwischen dem, was sonst in sich geschlossene j2ee Web-Anwendungen

erlaubt

Bearbeiten Ich vergaß zu erwähnen, dass Portlets ziemlich Rahmen Agnostiker sind -. So können Sie Frühling verwenden für die übergeordnete Anwendung, und einzelne Entwickler nutzen können, was sie auf ihre Portlets wollen

Haben Sie sich Maven an mit Ihren Projekten zu trennen und dann haben es die Abhängigkeiten zwischen den WARs und JAR-Dateien zu lösen? Sie werden mit Vervielfältigung von Bibliotheken zwischen WARs am Ende, aber nur dort, wo es notwendig ist (und dies soll kein Problem sein, wenn Sie in einen flippigen Classloader Spaß bekommen).

Tomcat können Sie auch Quer Kontext-Anwendungen konfigurieren, wenn Sie von einem Krieg zum anderen in einem relativ transparenten Art und Weise erhalten müssen ...

Wenn Sie die Dinge unter dem gleichen einzigen Web-App halten wollen (sagen ROOT) Sie können ein Proxy-Webapp erstellen, die hinter den Kulissen auf den jeweils anderen Webapp leitet durch für den Benutzer relativ transparent zu machen?

Ihr Hauptproblem geht um die physikalischen, statische Vermögenswerte des Systems zum Zentrum -. Der Rest sind einfach, effektiv, Gläser

WARs voneinander getrennt sind, in Tomcat, mit separaten Classloader, aber auch sie sind auf Sitzungsebene (jeder IST ist ein indvidual Web-App, und eine eigene Sitzungsstatus hat) getrennt.

In Glassfish, wenn die Kriege in einer EAR gebündelt wurden, würden sie teilen Classloader (GF verwendet einen flachen Klassenladeraum in EAH), würden aber immer noch getrennten Sitzungszustand.

Auch ich bin nicht sicher, ob Sie in den Server auf einen anderen WAR ein „Vorwärts“ tun kann. Das Problem ist, dass nach vorne eine relativen URL an die Wurzel der Web App verwenden, und jeder WebApp hat seine eigene Wurzel, so dass man einfach „nicht von hier dorthin kommen kann“. Sie können umleiten, aber das ist nicht das gleiche wie ein nach vorne.

So ist diese Merkmale des Web App verschwören gegen Sie versuchen, sie innerhalb des Behälters homogen zu verteilen.

Vielmehr denke ich, der heiße Tipp ist es, einen „Assembler“ Dienstprogramm zu erstellen, die Ihre einzelne Module und „verschmilzt“ sie App in zu einem einzigen Web nimmt. Es kann ihre web.xml, dessen Inhalt, normalisiert die Gläser und Klassen, etc.

fusionieren

WARs ist ein Merkmal und um einen Fehler in der Java-Welt. Ich liebe sie, weil sie wirklich kompilierte Anwendungen „Drag and Drop“ machen Sie den Einsatz in Bezug auf die Installation von ihnen, und das ist Funktion als weit mehr verwendet wird, was Sie stoßen. Aber ich fühle deinen Schmerz. Wir haben einen gemeinsamen „Kern“ Rahmen wir über Anwendungen gemeinsam nutzen, und wir haben im Grunde kontinuierlich ihr verschmelzen sie zu erhalten. Wir haben es vorbereitet, aber es ist immer noch ein wenig Schmerzen.

"Auch ich bin nicht sicher, ob Sie ein tun können,‚in dem Server auf einen anderen WAR vorwärts‘. Das Problem ist, dass nach vorne eine relative URL an die Wurzel der Web App verwenden, und jede hat ihre eigenen WebApp Wurzel, so dass Sie einfach „nicht dorthin gelangen von hier“. Sie können umleiten, aber das ist nicht das gleiche wie ein nach vorn. "

Sie können so lange auf einen neuen Krieg vor, als dass IST es jemand tun können.

Glasfischen und mehrere WARs einer EAR:., Die Sinn macht

Wenn Sie die Hauptklassen in dem gemeinsamen CLASSPATH von tomcat setzen, dann können Sie Ihre individuellen Plug-in in separaten WAR-Dateien setzen.

Das Haupt App kann auch einen Teil des TOMCAT Servlet sein, die Sie in server.xml definieren. Dies kann der MASTER SERVLET und alle andere WARs können dieses Master-Servlet gesteuert werden.

Ist das sinnvoll?

BR,
~ A

Je nach Komplexität der Plugin-Funktionalität würde ich auch einen Web-Service in Betracht ziehen, zum Beispiel mit Axis implementiert.

Ihr Haupt appplication wird dann mit der URL der Webanwendung konfiguriert (Plugin), das den Dienst bereitstellt.

Der Vorteil, wie ich es sehe, ist ein doppelter:

  • Sie erhalten einen schönen, sauberen, debug API zwischen den beiden Weltkriegen, nämlich der Seife / XML-Nachrichten
  • Sie können ein einzelnes Plugin aktualisieren, ohne zu haben Regressions testen Sie Ihre gesamte Anwendung

Die disadvatages sind, dass Sie einige Achsen Projekte einzurichten haben, und dass Sie müssen einige haben Art Plugin-Konfiguration. Außerdem müssen Sie den Zugriff auf Ihre Dienste Web begrenzen Anwendungen, so ein wenig Konfiguration erforderlich sein.

Wenn die Plugins auf der gleichen Datenbank arbeiten sicher sein, zu jeder Grenze Cache-Zeit oder einen Krieg-Spanning konfigurieren Caching-Schicht.

ich auch einen gemeinsamen oder abstrakten Rahmen entwickeln versucht, wo ich Plugins hinzufügen kann (oder Module) zur Laufzeit und zur Verbesserung der bestehenden Lauf Webapp.

Nun, wie Sie gesagt haben, bevorzugt ed Art und Weise, es zu tun mit WAR oder JAR-Datei. Problem mit WAR-Datei ist, kann man nicht als Plugin für bestehende App bereitstellen kann. Tomcat wird es als separate Web-Kontext bereitstellen. Nicht wünschenswert.

Eine weitere Möglichkeit ist JAR-Datei und schreibt einig benutzerdefinierten Code, die JAR-Datei WEB-INF / lib Ordner und laden Sie die Klassen in bestehenden Klassenlader zu kopieren. Das Problem ist, wie Nicht-Java-Dateien wie JSP oder Konfigurationsdateien zu implementieren. Dafür r zwei Lösungen, ein. Verwenden Geschwindigkeit Vorlagen statt JSP (b.) Schreiben einige benutzerdefinierte Code JSP von Classpath statt Kontextpfad zu lesen.

OSGI oder Frühling Dynamische Module sind nett, aber zu dieser Zeit, sie sehen mir zu komplex. Ich werde wieder in das aussehen, wenn ich das Gefühl davon bekommen.

Ich suche einfache API, die Pflege des Lebenszyklus von Plug-in nutzen und JSPs noch in der Lage in meiner verpackt JAR-Datei zu verwenden.

Kann sein, können Sie un jar das Plugin zum Zeitpunkt Bereitstellung und Kopieren von Dateien auf richtige Verzeichnisse verwenden.

Es eigentlich nichts Besseres als OSGI ist, wenn Sie über Splitting Anwendung in separate Module denken. Schauen Sie sich auf Greenpages Beispiel. Sie können ein übergeordnetes Modul (Kern) erstellen, in dem Sie Gläser, die Ihre Anwendung notwendig sind.

Wenn Sie etwas über Komponente Programmierung kennen, werden Sie bald herausfinden, dass OSGi-Module wie Schnittstellen verhalten, wo Sie entlarven, was Sie in anderen Modulen verwendet werden. Es ist ganz einfach, wenn Sie verstehen. Auf jeden Fall kann es auch wirklich schmerzhaft sein, wenn Sie lernen, wie OSGi zu verwenden. Wir hatten Probleme JSON verwenden, als eine Version von Jackson, die wir als Glas in das Modul aufgenommen, wurde von anderen jar außer Kraft gesetzt, die in der Federkern-Module enthalten waren. Sie müssen immer doppelt überprüfen, welche Version von Glas für Ihre Bedürfnisse geladen wird.

Leider auch OSGi Ansatz nicht lösen, was wir suchen. Wie ein persistentes Modell und vorhandene Formulare in Laufzeit zu verlängern.

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