2013-02-18 17 views
10

Ich versuche, die Architektur einer mittelgroßen Webanwendung in Java zu entwerfen, und ich würde gerne einen Rat bekommen, wie es geht.Modulare Webanwendung mit Spring und Maven

Das Projekt besteht aus einer Basis-Website und einer Reihe von Modulen. Zum Beispiel würde ein Modul Benutzerregistrierung anbieten, ein anderes Modul würde einen Webservice anbieten und so weiter ...

Immer wenn ich die Anwendung an einen neuen Kunden liefern muss, wäre es ideal, die Module abzuholen er möchte etwas thema (css, bilder, vielleicht jsp) machen und die kundenspezifischen module entwickeln, die er eventuell benötigt.

Ich habe einen Blick auf Maven Multi-Modul-Projekte, War-Overlays, aber ich finde es schwierig, die Anwendung zu partitionieren, insbesondere in Bezug auf die Konfiguration der Module (zum Beispiel eine globale Feder-Konfiguration von den Modulen zu verschmelzen) . Kann mich jemand auf ein solches System hinweisen? Danke im Voraus!

Antwort

6

Zusammenführen Federkonfiguration ist einfach. Verpacken Sie in jedem Modul eine Spring-Kontextdatei im Verzeichnis/WEB-INF/classes. Wenn Sie überlagern, werden alle Klassen und Ressourcen in WEB-INF-Klassen in der Abhängigkeit in Ihrer App in WEB-INF/Klassen eingefügt. (ps, das funktioniert auch, wenn Sie stattdessen als .jar packen, aber Sie werden nicht in der Lage sein .jsp-Dateien zu überlagern, wenn Sie das tun)

Dann ist es nur eine Frage des Importierens. Dies geschieht am besten mit einem festgelegten Muster, um die Dateien zu finden. Hier ein Beispiel:

<import resource="classpath*:/module/*-context.xml" /> 

Dies wird alle Klassenpfadressourcen importieren, die diesem Muster entsprechen.

Annotation basiert Beispiel:

@Configuration 
@ImportResource(value={"classpath*:/module/*-context.xml"}) 
public class MyConfiguration { ... } 

Es ist die web.xml Konfiguration, die Sie mehr Probleme als alles, was dazu führen wird, wenn Sie die Notwendigkeit, irgendwelche web.xml Anpassungen in den Modulen zu tun. Sie könnten dafür natürlich auch servlet 3.0 verwenden, benötigen aber den richtigen Server für die Bereitstellung.

+1

Dank für die Unterstützung! Ich sehe den Punkt hier ist, Konfigurationsdateien über Module zu "fragmentieren", wenn möglich. Ich denke, ich könnte mit einer einzigen web.xml leben. Ich werde es nun versuchen und sehen, was mit den anderen Technologien (Hibernate, Kacheln usw.) gemacht werden kann. Ich werde das aktualisieren. – user683887

+1

Hibernate können ihre Modelle auch fragmentiert haben. Die Spring-Factory-Beans für Hibernate-Sitzungsfactorys können ebenfalls mit dem Klassenpfad gescannt werden (entweder .hbm.xml oder paketbasiertes Scannen). – Matt

1

fwiw, nach einiger Erfahrung mit dem einfachen Spring-Import haben wir ein kleines Framework für osgi-less Modularität für Spring entwickelt. Das erste Problem mit dem Import ist die Bean-Namen kollidiert nicht mit demselben Namen Singleton in zwei Kontexten haben kann, und viele andere Probleme .. tbc https://github.com/griddynamics/banshun

- Mike