# JSF & Spring -> Wozu überhaupt?!



## JSFundSpring (17. Mai 2010)

Hallo zusammen,
der Aufbau bzw. die Architektur von JSF hab ich soweit verstanden. Nun habe ich jetzt aber schon häufiger gelesen, dass Spring und JSF eine perfekte Kombination seine, allerdings frage ich mich, da JSF bereits das MVC-Pattern umsetzt, warum bzw. wozu ich Spring überhaupt noch brauche!?
Ich habe zwar schon einiges zu Spring gefunden, werde aber immer mit der vielzahl von Informationen erschlagen und finde auf meine IMOH triviale Frage keine Antwort!
Ich hoffe deshalb, dass Ihr mir weiterhelfen könnt!!!


----------



## ARadauer (17. Mai 2010)

> finde auf meine IMOH triviale Frage keine Antwort


am anfang stellt man oft die flaschen fragen ;-)

Aber ich versteh dich, man ließt sehr viel und versteht oft gar nicht, was einem das alles bringt... einfach weil man mit vielen Problemen, die Spring löst, einfach nocht nicht konfrontiert wurde....

Ich arbeite zwar nicht mit jsf, aber ich denke ein Haupgrund für Spring ist der mächte IOC Container... erhöht die modularisierung, testbarkeit usw..


----------



## maki (17. Mai 2010)

JSF bietet MVP, nicht nur MVC um genau zu sein 

Ansonsten bringt SPring noch viel mehr mit, muss halt entscheiden ob man das alles braucht, oder ohne Spring besser dran ist.
IMHO nutzt man Spring wenn immer möglich, wenn man sich mal damit auskennt.


----------



## homer65 (17. Mai 2010)

maki hat gesagt.:


> Ansonsten bringt SPring noch viel mehr mit, muss halt entscheiden ob man das alles braucht, oder ohne Spring besser dran ist.
> IMHO nutzt man Spring wenn immer möglich, wenn man sich mal damit auskennt.



Es ist aber erst mal eine Hürde Spring kennenzulernen. Und da ist die Frage wohl berechtigt was man davon hatt.

Mich würde auch interessieren wie hoch dies Hürde eigentlich ist. Was meint ihr, wie lang braucht man um Spring kennenzulernen?


----------



## maki (17. Mai 2010)

Jahre... oder ein paar Stunden... je nachdem was man alles lernen will, alles zu erlernen dauert Jahre, den IoC bzw. DI Kern hat man recht schnell drauf 

Die offizielle Spring Doku sei empfohlen um Spring zu lernen, hier eine generelle Übersicht über DI von Fowler: Inversion of Control Containers and the Dependency Injection pattern


----------



## JSFundSpring (18. Mai 2010)

Wenn ich das richtig interpretiert habe, ist der IOC-Container und die DI ja eigentlich auf der Bean-Ebene, also eher im "unteren Teil" (nah an der DB bzw. Datenhaltung) des Models, oder nicht?

Hab auch festgestellt, dass der Spring Web Flow 2 (siehe Spring Web Flow 2 Released; Introduces New Faces and JavaScript Modules | SpringSource.org) eine spezielle Schnittstelle zu JSF hat. Aber erfüllt der Web Flow nicht die selbe Funktionalität, die JSF schon beinhaltet (Servlet-Mapping, ...), nur evtl. etwas komfortabler?


----------



## ARadauer (18. Mai 2010)

> Wenn ich das richtig interpretiert habe, ist der IOC-Container und die DI ja eigentlich auf der Bean-Ebene, also eher im "unteren Teil" (nah an der DB bzw. Datenhaltung) des Models, oder nicht?


mhn nein eher nicht, als "bean" wird einfach ein vom container verwaltetes objekt bezeichnet.

also eher componenten, services, daos, repositories...


----------



## maki (18. Mai 2010)

JSFundSpring hat gesagt.:


> Wenn ich das richtig interpretiert habe, ist der IOC-Container und die DI ja eigentlich auf der Bean-Ebene, also eher im "unteren Teil" (nah an der DB bzw. Datenhaltung) des Models, oder nicht?
> 
> Hab auch festgestellt, dass der Spring Web Flow 2 (siehe Spring Web Flow 2 Released; Introduces New Faces and JavaScript Modules | SpringSource.org) eine spezielle Schnittstelle zu JSF hat. Aber erfüllt der Web Flow nicht die selbe Funktionalität, die JSF schon beinhaltet (Servlet-Mapping, ...), nur evtl. etwas komfortabler?


Lies dir doch mal den Link durch von Fowler 

IoC ist ein merkmal das jedes Framework bietet, quasi Definition von Framework.
DI hat erstmal nix mit DB zu tun, sondern damit, wie die Abhängigkeiten deiner Klassen/Komponenten erzeugt und injiziert werden.


----------



## JSFundSpring (18. Mai 2010)

Hab mich falsch ausgedrückt! Ich meine anstatt Beans natürlich POJOs!
Ich bin gerade dabei, mir den Artikel zu Gemühte zu führen.


----------



## ARadauer (18. Mai 2010)

pojo is auch so ein begriff.... ist nicht irgendwie alles ein pojo das nicht von irgend einer framework klasse erbt?


----------



## maki (18. Mai 2010)

ARadauer hat gesagt.:


> pojo is auch so ein begriff.... ist nicht irgendwie alles ein pojo das nicht von irgend einer framework klasse erbt?


Ja, ein POJO erbt von keiner Framework Klasse, ein POJO ist nix weiter als ein "Plain Old Java Object", also ein Stinknormales Javaobjekt, ohne spezielle Superklasse.
Wichtiger in diesem Zusammenhang ist die JavaBeans Spek. und die Konventionen wie Getter & Setter benannt werden.


----------



## springneuling (18. Mai 2010)

Mir ergeht es genau wie "JSFundSpring"! Vorallem verstehe ich nicht, warum JSF und Spring häufig in Kombination eingesetzt werden, aber JSF und Struts, oder Struts und Spring als "Konkurrenz-Produkte" verglichen werden. Ist JSF nicht eher ein Frontend-Framework und Struts und Spring eher ein MVC-Framework? Ich such schon ewig nach der grafischen Abbildung, die diese Frameworks grafisch abbildet und die Unterschiede verdeutlicht. Vielleicht könnt ihr unser mentales Bild der Frameworks vervollständigen / neu orden! Alle Informationen die ich bisher gefunden habe, sind zwar schön detailliert, aber als Neueinsteiger in unbekannte Frameworks verliert man schnell den Überblick!


----------



## maki (18. Mai 2010)

Zu Struts: Vergiss es, ist Steinalt und für Neuentwicklungen schon seit Jahren nicht mehr interessant.
JSF bietet MVP fürs Web, stark angelehnt an Swing.


----------



## springneuling (18. Mai 2010)

Ich habe Struts nur als Beispiel verwendet, vorallem weil es in vielen Frameworkevaluationen aufgeführt ist. Intuitiv hätte ich mich für Spring entschieden, mir ging es eigentlich nur um die Einordnung von diesen Frameworks. Ist evtl. auch ganz hilfreich für "JSFundSpring", um einfach mal den groben Unterschied zu erkennen, ohne die Frameworks bis ins letze Detail zu kennen!


----------



## springneuling (18. Mai 2010)

PS: und abgesehen davon ist Spring "nur" 2-Jahre jünger (*2002) als Struts (*2000)   ;-)


----------



## maki (18. Mai 2010)

springneuling hat gesagt.:


> PS: und abgesehen davon ist Spring "nur" 2-Jahre jünger (*2002) als Struts (*2000)   ;-)


Beratungsresistent, doer meinst du das ernst?
struts1 wird seit Jahren nicht mehr weiterentwickelt, struts2 ist sozusagen schon in den Startlöchern steckengeblieben.
Spring lässt sich auch nicht wirklich mit Struts vergleichen, höchstens edas eine oder andere Modul von Spring...


----------



## springneuling (18. Mai 2010)

Ne, natürlich nicht! War nur ironisch gemeint, da du vom Alter gesprochen hast. Wenn du dich auf die Technik beziehst, geb ich dir völlig Recht!!!

Hab eben folgendes gefunden: Spring vs. Struts vs. JSF [Archive] - Spring Community Forums
Also ist Spring MVC nur ein optionales Modul von Spring!? Was ist dann der eigentliche Spring "Core" und was für ein Typ von Framework ist Spring (nicht Spring MVC) dann eigentlich?


----------



## maki (18. Mai 2010)

Lies doch den Link den ich oben gepostet habe, Spring bietet erstmal DI (Core, wird IoC genannt), und vieles vieles mehr, aber integraler Bestandteil von Spring ist eben nur die DI.
SpringMVC, SpringWebFlow, SpringDM, Spring BlazeDS, Spring WS, Spring AOP, Spring-JPA, usw. sind zusätze.
Ja, das sind sehr viele "Zusätze", und die alle zu erlernen dauert eben Jahre


----------



## JSFundSpring (18. Mai 2010)

Durch eure Diskussion und die Links habe ich momentan folgendes Verständnis:

Spring ist im Eigentlichen (ohne alle Zusätze) NUR ein Framework, um Objekten die benötigten Ressourcen und Objekte zuzuweisen (DI), um die Steuerung bzw. den Kontrollfluss des Objekt-Ressourcen-Netzes zu Übernehmen (IoC) und um Transaktionen zu managen (AOP)! Somit ist Spring ein IoC-Framework und vergleichbar mit ähnlichen Frameworks wie PicoContainer, EJB, ...!

Spring MVC dagegen ist nur ein "Zusatz" von Spring und damit eine Alternative zu JSF oder dem veralteten Struts. Weitere Alternativen wären aber auch Induction(Induction | high performance, open source, Java MVC web application framework), Stripes (Home - Stripes - Stripes Framework), VRaptor (V|Raptor - Alta produtividade no Desenvolvimento Web em Java), ...! JSF bietet allerdings im Vergleich zu Spring MVC mehr Frontend- bzw. View-Komponenten, wobei Spring MVC eher auf Modularität und auf Unabhängigkeit von der verwendeten View-Technology basiert!

Wäre das soweit korrekt?
Könnte ich dann auch JSF einsetzen, aber anstatt dem integrierten MVC von JSF, Spring MVC verwenden? Wenn ja, welche Gründe könnte es dafür geben?

Bei weiterem googeln bin ich auch auf JBoss Seam gestoßen. Ist Seam ebenso ein IoC-Framework wie Spring und damit vergleichbar?


----------



## maki (18. Mai 2010)

> Spring ist im Eigentlichen (ohne alle Zusätze) NUR ein Framework, um Objekten die benötigten Ressourcen und Objekte zuzuweisen (DI), um die Steuerung bzw. den Kontrollfluss des Objekt-Ressourcen-Netzes zu Übernehmen (IoC) und um Transaktionen zu managen (AOP)! Somit ist Spring ein IoC-Framework und vergleichbar mit ähnlichen Frameworks wie PicoContainer, EJB, ...!


Wie gesagt, IoC ist nur ein Merkmal, dass alle(!) Frameworks bieten, hat noch nix mit Spring oder DI zu tun.
AOP bzw. Transaktionsmagement ist kein Integraler Bestandteil von Spring IoC, denn Transaktionen gehören meist zu DBs.

SEAM bietet auch DI, allerdings nicht so mächtig wie Spring(und vor allem nicht so viele Zusatzmodule), der Fokus liegt auf der Vereinfachung der Integration von JSF/EJB/JPA.

Nochmals: Alle(!) "echten" Frameworks bieten IoC, hat nix direkt mit Web, Persistenz oder GUI zu tun (obwohl GUI Frameworks die klassichen Vertreter von IoC sind), siehe den Artikel von Fowler.

Nebenbei, bis jetzt dreht sich die Diksussion doch eher um Webbasierte Techniken/Frameworks, bitte nicht vergessen das Webbrowser nur eine Möglichkeit von GUIs sind, Rich- bzw Fat Clients sind auch noch da(Eclipse RCP, Netbeans RCP, JavaFX, etc.).


----------



## JSFundSpring (18. Mai 2010)

Sorry, hab's irgendwie verdreht. Also nochmals:

Spring ist im Eigentlichen (ohne alle Zusätze) NUR ein Framework, um Objekten die benötigten Ressourcen und Objekte zuzuweisen (DI)! Somit ist Spring im ENGEREN Sinne ein DI-Framework und vergleichbar mit ähnlichen Frameworks wie PicoContainer, EJB, JBoss Seam, ...!

Spring MVC dagegen ist nur ein "Zusatz" von Spring und damit eine Alternative zu JSF oder dem veralteten Struts. Weitere Alternativen wären aber auch Induction, Stripes, VRaptor, ...! JSF bietet allerdings im Vergleich zu Spring MVC mehr Frontend- bzw. View-Komponenten, wobei Spring MVC eher auf Modularität und auf Unabhängigkeit von der verwendeten View-Technology basiert! Damit kann Spring, im Gegensatz zu JSF, auch in anderen Anwendungen mit Nicht-Web-GUIs also bspw. einem Java-Client eingesetzt werden (natürlich auf Serverseite!).

Wäre das jetzt korrekt, oder habe ich es immer noch nicht verstanden?

Allerdings stellt sich mir immer noch folgende Frage:
Könnte ich dann auch JSF einsetzen, aber anstatt dem integrierten MVC von JSF, Spring MVC verwenden? Wenn ja, welche Gründe könnte es dafür geben, bspw. View ist loser gekoppelt, als wenn nur JSF eingesetzt wird?


----------



## maki (18. Mai 2010)

Ja, so stimmts 



> Allerdings stellt sich mir immer noch folgende Frage:
> Könnte ich dann auch JSF einsetzen, aber anstatt dem integrierten MVC von JSF, Spring MVC verwenden? Wenn ja, welche Gründe könnte es dafür geben, bspw. View ist loser gekoppelt, als wenn nur JSF eingesetzt wird?


k.A. ehrlich gesagt, habe vor 3 Jahren mit JSF (1.1) kein Spring eingesetzt, aber wie du siehst, gibt es auch mehr als genug Frameworks da draussen


----------



## JSFundSpring (18. Mai 2010)

Super, VIELEN DANK!!!

Was ist eigentlich mit der vorhin schon gestellten Frage:


JSFundSpring hat gesagt.:


> Hab auch festgestellt, dass der Spring Web Flow 2 (siehe Spring Web Flow 2 Released; Introduces New Faces and JavaScript Modules | SpringSource.org) eine spezielle Schnittstelle zu JSF hat. Aber erfüllt der Web Flow nicht die selbe Funktionalität, die JSF schon beinhaltet (Servlet-Mapping, ...), nur evtl. etwas komfortabler?


Hat "springneuling" da mit seiner Vermutung Recht?!?


----------



## Java.getSkill() (18. Mai 2010)

IMHO gibt es bei den verschiedenen Frameworks doch so einige Überschneidungen und die persönliche Präferenz entscheidet, was zum Einsatz kommt.

zu viele frameworks da draußen...


----------



## maki (18. Mai 2010)

Naja, Spring WebFlow muss nicht mit JSF eingesetzt weren, aber kann damit eingesetzt werden (mit SpringFaces).
Nebenbei, JSF ist mehr als ein paar ServletMappings.
Kenne WebFlow selber wie gesagt nicht, aber Erfahrungsgemäss bietet Spring (oder versucht es zumindest) ein paar Erleichterungen("komfortabler") einzubringen, inkl. Unterstützung für Unittests.



> zu viele frameworks da draußen...


Speziell im Bereich der WebApps ist das leider sehr wahr... deutet aber imho darauf hin, dass der(die) Standard(s) nicht gerade ideal sind.


----------



## springneuling (18. Mai 2010)

Ich habe im Zusammenhang mit Spring Web Flow auf der Seite von Spring folgendes gefunden:

"The Spring Faces module contains Spring's support for JavaServerFaces. This support allows you to use JSF as a View technology within a familiar Spring MVC and Web Flow Controller environment. With this architectural approach, you combine the benefits of the JSF UI component model with the benefits of a Web MVC architecture. Spring Faces also includes a lightweight component library built on Spring JavaScript for declaratively enabling Ajax and client-side validation behaviors in a progressive manner."

Damit dürfte diese Frage wohl auch geklärt sein!


----------

