J and I and Me
2007-09-26
  JAOO: Help! Which web Framework should I use? (Alef Arendsen, Interface21)
In dieser Session gab mein Kollege Alef Arendsen eine Übersicht über Web Frameworks. Da Alef wie ich auch für Interface21 arbeitet, ist er natürlich voreingenommen.

Er zeigte erstmal Servlet-Code, wie er 1997 war. Dann JSPs als nächster Schritt, dann die Trennung zwischen View und Controller. Und dann kam Struts, das diesen Ansatz ebenfalls implementiert. Und das war dei Evolution nur bis 2001. Und bis heute (2007) ist noch eine ganze mehr Menge an Frameworks gekommen. Also: Welches soll man benutzen? Die typische Berater-Antwort: Das kommt darauf an...

Es gibt viele nicht-technische Aspekte, die man beachten muss:


Technisch gibt es unterschiedliche Aspekte, und die Frameworks eignen sich für unterschiedliche Themen. Dabei geht es vor allem darum, die rechte Abstraktionsebene zu finden. Es gibt eben keine Evolution von Struts zu JSF, es sind zwei unterschiedliche Ansätze.

Nehmen wir als Beispiel eine Anwendung mit einem zustandsbehafteten Workflow. Das Beispiel ist ebookers.com, bei dem man Reisen buchen kann. Soetwas kann man als einen Ablauf bzw. Workflow modellieren. Dazu kann man Spring Web Flow nutzen. Man kann dann den Ablauf in Eclipse grafisch modellieren. Dabei ist das Zustands-Management vollständig transparent und wird einfach vom Zustands-Automat ausgeführt. Man kann auch Teile des Ablaufs wiederverwenden und man zum Beispiel den Back-Button besser unterstützten. Allerdings muss man dazu den Zustand in der Http-Session, in der Datenbank oder auf dem Client speichern. Dabei werden Ressourcen verwendet, was die Skalierbarkeit beeinflusst.

Als Beispiel für eine zustandslose Anwendung zeigte er ilse.nl, die zweitgrößte niederländische Suchmaschine. Sie ist vollständig mit Spring MVC implementiert. Der Betreiber dachte zuerst, er könnte die Anwendung nur mit C++ implementieren. Ein Trick hier war, die Views mit SAX zu rendern und die Anwendung vollständig zustandslos zu implementieren. Für die Anwendung werden 3 Maschinen für das Frontend genutzt und 2 für das Backend. Eine ähnliche niederländische Seite benötigt anscheinend 400 Maschinen. Die letzteren haben allerdings einen zustandsbasierten Ansatz.

Was ist mit zustandsbehafteten Modellen? JSF hat ein limitiertes Navigations-Modell, weil es keine Navigations-Regeln gibt. Also muss man ein Framework wie Spring Web Flow nutzen, um das zu JSF hinzuzufügen. Diese Regeln kann man in XML (oder auch in Java) definieren. Alef zeigte dann ein Beispiel für einen Flow, der sogar Ausdrücke für die Steuerung des Ablaufs enthielt.

Google Web Toolkit hat einen ganz anderen Ansatz. Es kompiliert Event-Handling-Code, der in Java geschrieben ist, zu JavaScript, der dann im Web-Browser ausgeführt werden kann. Eine Integration zum Beispiel in Spring Web Flow gibt es noch nicht, aber darüber wird zumindest nachgedacht. Das Programmiermodell von GWT ähnelt einem traditionellen GUI-Modell wie AWT oder Swing.

Bei Struts, Spring MVC und Struts 2 hat man ein Request/Response-orientiertes Modell, das man allerdings durch Spring Web Flow ergänzen kann - wenn es notwendig ist.

Ein weiterer interessanter Gedanke: Sollte die HttpSession vielleicht durch Zustand entweder auf dem Client oder dem Server abgelöst werden? Immerhin ist die Http-Session eigentlich nur ein Hack, um ein zustandsloses Protokoll mit Zustand zu versehen.

Aber weiter mit dem Vergleich: JSF speichert die Zustand der Komponenten in der Session, was eben die Skalierbarkeit negativ beeinflusst. Dependency Injection und Navigation kann zum Bespiel durch Spring und Spring Web Flow ergänzt werden. Spring Web Flow speichert den Zustand auf dem Server - entweder in der Session oder in der Datenbank. GWT hingegen nutzt den Client für den Zustand. Der Zugriff auf den Server ist explizit, so dass man merkt, was man tut. Das ist gut, weil Remote Zugriffe eben wesentlich langsamer sind als lokale Aufrufe. Allerdings hat es keine Lösung für Dependency Injection - und es gibt noch keine Integration mit Spring. Natürlich kann man Spring immer noch auf dem Server nutzen. Struts, Spring MVC und Struts 2 haben keine eigene Features für Zustand - außer der Session. Dependency Injection kann man zum Beispiel durch Spring "nachrüsten". Diese Frameworks eignen sich also vor allem für zustandslose Anwendungen.

Was ist also mit Templating oder GUI-Design? Bei GWT kann man das HTML nicht mehr wirklich ändern oder gar von einem Designer ändern lassen - man kann allerdings CSS zum Anpassen des Design nutzen. Mit JSPs kann man Tag Libraries nutzen. AJAX muss man dann aber selber irgendwie mit JavaScript bauen. Da HTML-ähnlich ist, kann man es eher vpn Designer bearbeiten lassen. FreeMarker oder Velocity ist im Prinzip ähnlich. JSF ist deutlich anders. Es bietet auch Chancen für Anbieter von Komponenten. Man sollte es auf jeden Fall mit Facelets nutzen. AJAX ist durch einige Erweiterungen wie z.B. Spring Faces, IceFaces etc. integrierbar.

Ingesamt ein ganz gute Überblick - und die Session war auch sehr gut besucht.

Labels: , , , , ,

 
Bookmark and Share
Comments:
JSF kann den Zustand der Komponenten auch Client-seitig speichern (in einem hidden form field) - das empfiehlt sich sogar, wenn derselbe User denselben Dialog in mehreren Browser-Fenstern gleichzeitig (in unterschiedlichem Zustand!) öffnen möchte, weil JSF sonst (ausgehend vom gleichen Cookie) durcheinanderkommt.
 
Hi Axel,

I'm replying in English, my German writing has never been that good.

I did mention in my talk that it's possible to store the session data on the client, as you are saying as well. This is of course similar to the ASP.NE capabilities. I would remain doubtful however whether or not this is a good thing to do (sending the content of the session to and from the client on every request).
 
JSF hat keine navigations regeln? Ja ne is klar ...

Richtig ist das mit SWF besseres Navigieren möglich ist ( ungeachtet dessenwas man sich damit aber auch fpr ärger ins Haus bzw Programm holt, von dem unverschämt dominanten Verhalten von SWF2 ganz zu schweigen), aber zu sagen JSF ha tkeine navigationsregeln, naja...
 
Kommentar veröffentlichen

<< Home
J for Java | I for Internet, iMac, iPod and iPad | Me for me

ARCHIVES
Juni 2005 / Juli 2005 / August 2005 / September 2005 / Oktober 2005 / November 2005 / Dezember 2005 / Januar 2006 / Februar 2006 / März 2006 / April 2006 / Mai 2006 / Juni 2006 / Juli 2006 / August 2006 / September 2006 / Oktober 2006 / November 2006 / Dezember 2006 / Januar 2007 / Februar 2007 / März 2007 / April 2007 / Mai 2007 / Juni 2007 / Juli 2007 / August 2007 / September 2007 / Oktober 2007 / November 2007 / Dezember 2007 / Januar 2008 / April 2008 / Mai 2008 / Juni 2008 / August 2008 / September 2008 / November 2008 / Januar 2009 / Februar 2009 / März 2009 / April 2009 / Mai 2009 / Juni 2009 / Juli 2009 / August 2009 / September 2009 / Oktober 2009 / November 2009 / Dezember 2009 / Januar 2010 / Februar 2010 / März 2010 / April 2010 / Mai 2010 / Juli 2010 / August 2010 / Oktober 2010 / Januar 2011 / Februar 2011 / März 2011 / April 2011 / Mai 2011 / Juni 2011 / August 2011 / September 2011 / November 2011 / Februar 2012 / April 2012 / Mai 2012 / April 2013 / Mai 2013 / Juni 2013 / Januar 2015 / Juli 2015 / Februar 2016 /

Links

Twitter
Google +
Slideshare
Prezi
XING
LinkedIn
Das Spring Buch


Feeds

Feedburner


Impressum
Betreiber und Kontakt:
Eberhard Wolff
Leobschützer Strasse 22
13125 Berlin
E-Mail-Adresse: eberhard.wolff@gmail.com

Verantwortlich für journalistisch-redaktionelle Inhalte:
Eberhard Wolff