Web Webframeworks im Java-Umfeld Welches Webframework soll im nächsten Projekt eingesetzt werden? Webframeworks – eine Kategorisierung Webanwendungen verdrängen immer mehr die klassischen Desktopanwendungen und sind aus dem Alltag nicht mehr wegzudenken – sei es als E-Mail-Client oder für die einfache Verwaltung der Bankkonten über das Web. Zur Realisierung dieser Anwendungen werden Webframeworks eingesetzt, von denen es mittlerweile alleine schon im Java-Umfeld eine fast unüberschaubar große Anzahl gibt [1]. In Foren, Blogs und Fachzeitschriften liest man regelmäßig über neu erschienene Frameworks oder zusätzliche Features. In diesem Zusammenhang fallen häufig Begriffe wie Ajax, Rich Internet Application oder Portal. Doch was bedeuten diese Begriffe eigentlich? Und welches Webframework ist für welches Projekt relevant? Der Artikel gibt einen Überblick über die verschiedenen Frameworktypen und nimmt eine Kategorisierung anhand grundlegender Design- und Entwicklungskriterien vor. von Kai Wähner Der Artikel beschreibt wichtige Designentscheidungen im Umfeld der Entwicklung von Webanwendungen. Darüber hinaus werden die verschiedenen Framework- und Technologietypen näher erläutert. Anschließend wird eine Übersicht der im Markt existierenden Webframeworks gegeben und anhand von Kriterien kategorisiert. Was ist ein Webframework? „Webframework“ wird als Oberbegriff für die Kombination mehrerer Technologien zur Entwicklung von Webanwendungen verwendet. Das Ziel ist dabei, sich wiederholende Tätigkeiten zu vereinfachen, rein technische Aufgabenstellungen (z. B. Kommunikation über Servlets) abzunehmen und die Wiederverwendung von Code zu fördern. Die Fähigkeiten eines Webframeworks sind darauf ausgelegt, schnell Ergebnisse zu erzielen und 34 javamagazin 1 | 2011 lauffähige Webanwendungen zu erstellen. Der Artikel betrachtet Webframeworks, die ohne Zusatzaufwand auf einer JVM lauffähig sind. Ajax (Kasten: „Ajax (Asynchronous JavaScript and XML)“) und entsprechend das Web 2.0 haben sich mittlerweile etabliert und werden durch nahezu alle aktuellen Webframeworks unterstützt – meist durch eigene Ajax-Komponenten, die keine JavaScript-Kenntnisse erfordern. Zumindest aber die Integration von Ajax-Bibliotheken ist immer verfügbar. Das Motto „The right Tool for the right Job“ trifft auch auf Webframeworks zu, daher soll an dieser Stelle keine allgemeine Empfehlung ausgesprochen, sondern die Bewertung der einzelnen Frameworks durch den Leser ermöglicht werden. Kategorisiert werden Webframeworks, die eine große Community verfügen, viele Add-ons anbieten, Lernen und Nachschlagen durch Fachbücher, Blogs und Forenbeiträge ermöglichen und www.JAXenter.de Webframeworks im Java-Umfeld Web Abb.1: Vergleich der Kommunikation ohne und mit Ajax durch Fachzeitschriften sowie IT-Konferenzen in Medien vertreten sind. Es wird nicht der Anspruch erhoben, alle verfügbaren Webframeworks komplett zu analysieren. Stattdessen erhält der Leser einen Überblick über die am Markt verfügbaren Frameworktypen und die Möglichkeit, zu entscheiden, welcher Typ für die Anforderungen in einem konkreten Projekt am besten geeignet ist. Multi-Page vs. Single-Page Der Unterschied zwischen Multi-Page und Single-Page wird in Abbildung 2 dargestellt. Bei einer Multi-PageStruktur besitzt die Webanwendung mehrere Seiten, durch die navigiert wird. Der Benutzer öffnet einen URL im Browser und eine konkrete Seite wird angezeigt. Während der Benutzung werden Hyperlinks verfolgt und Daten übertragen. Jede Seite besitzt daher einen eigenen URL. Durch diese Struktur sind typische „Browserfeatures“ wie Lesezeichen oder Vor- und Zurück-Navigation grundsätzlich verfügbar. Das klassische Beispiel ist Amazon, wo zuerst verschiedene Produkte, die jeweils eine eigene Seite besitzen, betrachtet und gegebenenfalls in den Warenkorb gelegt werden. Dann wird auf mehreren Seiten der Bestellvorgang (Auswahl von Adresse, Zahlungsart und Versandart) durchgeführt. Bei der Single-Page-Struktur hingegen besitzt die Webanwendung nur eine Seite, in der alle Aktionen durchgeführt werden. Durch Panels und Reiter können mehrere Seiten simuliert werden. Oft gibt es aber nur genau eine Seite zur Darstellung der gesamten Anwendung. Der Benutzer öffnet einen URL im Browser, der dauerhaft unverändert bleibt. In der Anwendung öffnen sich oft neue Fenster bzw. Dialoge (z. B. für Warnhinweise). Typische Browserfeatures wie Lesezeichen oder Vor- und Zurück-Navigation sind daher meist nur durch Mehraufwand realisierbar. Auch die Durchsuchbarkeit, die insbesondere für Suchmaschinen notwendig ist, wird erschwert. Als klassisches Beispiel für die Single-PageStruktur sei die Webanwendung Google Mail genannt, wo auf einer einzigen Seite alle Aufgaben zur E-MailVerwaltung durchgeführt werden. Action-based vs. Component-based Ein Webframework kann entweder Action-based (oft auch Request-based genannt) oder Component-based sein (Abb. 3). Bei Action-based Webframeworks wird in dem API ersichtlich, dass eine HTML-Anfrage geparst und eine HTML-Antwort erzeugt werden soll. Jede Anfrage eines Nutzers ist eine eigene Aktion. Für jede Aktion wird genau ein Objekt definiert, das Anfragen entgegennimmt und verarbeitet. Der Ablauf ist dadurch sehr linear, als Einstiegspunkt für Interaktionen wird ein Servlet oder eine Aktion mit allgemeinen Attributen (z. B. URLs, Formulare etc.) genutzt. Vorteile dieses Konzepts sind die relativ simple Entwicklung, die Möglichkeit des einfachen Testens im Webbrowser sowie einfaches Verwalten von Lesezeichen, da jede Aktion einen URL darstellt. Demgegenüber steht der Nachteil, www.JAXenter.de Abb. 2: Vergleich der MultiPage- und SinglePageStruktur Anzeige Web Webframeworks im Java-Umfeld Abb. 3: Vergleich des Action-based- und Component-based-Konzepts Abb. 4: Vergleich des clientzentrischen und serverzentrischen Ansatzes Ajax (Asynchronous JavaScript and XML) Ajax bezeichnet ein Konzept der asynchronen Datenübertragung zwischen Webbrowser und Server (Abb. 1). Dabei wird ermöglicht, im Hintergrund weitere Daten vom Server zu laden, während eine Seite im Browser angezeigt wird. Diese Daten werden verwendet, um mittels JavaScript die aktuelle Seite zu aktualisieren. Da die Seite nicht jedes Mal vollständig neu geladen werden muss, kann der Benutzer flüssiger mit der Anwendung arbeiten. Technisch betrachtet bezeichnet Ajax eine Menge von Technologien, die zur Webentwicklung eingesetzt werden. HTML wird für die Darstellung verwendet. Der Browser wandelt es in einen DocumentObject-Model-(DOM-)Baum um, der mittels JavaScript modifiziert werden kann, um die dynamische Darstellung von Inhalten zu ermöglichen. Zur asynchronen Kommunikation mit dem Server wird das XMLHttpRequestObjekt eingesetzt und in der Regel entweder XML, JSON oder reiner Text als Datenformat verwendet. Ein großer Vorteil von Ajax ist, dass kein Browser-Plug-in benötigt wird – lediglich JavaScript muss im Webbrowser aktiviert sein. Allerdings entstehen durch das neue Programmierparadigma auch einige Probleme, die von JavaScript-Bibliotheken oder Webframeworks „bereinigt“ werden müssen: 36 javamagazin 1 | 2011 dass die Konfiguration schon bei relativ kleinen Seiten unübersichtlich wird, da jede Aktion ein eigenes Objekt besitzt und deshalb auch ein eigenes Mapping notwendig ist. Somit muss trotz einfacher Seitenstruktur sehr viel Konfiguration verwaltet werden. Bei Component-based Webframeworks abstrahiert das API im Gegensatz zur Action-based-Variante vom Anfrage-/Antwortkonzept und behandelt die Webanwendung als Sammlung von Komponenten mit jeweils eigener Darstellung und eigenen Aktionen. Die Anfrage wird nicht an die Aktion, sondern an die Komponente geleitet, dort verarbeitet und in der Oberfläche angezeigt. Es entsteht kein linearer Ablauf. Zusammengehörende Typen von Informationen (z. B. Login, Logout, GetAccount) werden in Gruppen gesammelt (z. B. AccountController). Somit kann ein Objekt für mehrere Aktionen verantwortlich sein. Ein großer Vorteil ist der schnelle Einstieg für Entwickler ohne Erfahrung in der Webentwicklung, da das API Java-Desktopanwendungen (z. B. Swing) ähnelt. Das ermöglicht auch die einfachere Erstellung von eigenen Komponenten und deren Wiederverwendung. Des Weiteren ist die Konfiguration übersichtlich, da nicht für jede Aktion ein eigener Controller notwendig ist. Den Vorteilen steht der Nachteil gegenüber, dass der Entwickler auch die oft komplexe Abstraktion des Webframeworks verstehen muss, um die Features ausnutzen und Fehler nachverfolgen zu können. Die Entscheidung für ein Action-based oder Component-based Webframework hängt also vom Workflow der Webanwendung ab. Während Komponenten sehr gut einsetzbar sind, wenn Wiederverwendung und komplexe Abläufe eine große Rolle spielen (z. B. bei einer großen Webanwendung einer Bank mit vielen ähnlichen Masken), eignet sich das Anfrage-/Antwortkonzept be- ■■ Die Funktionalität der „Zurück“-Schaltfläche des Browsers ist schwer zu gewährleisten, da Webbrowser normalerweise nur jeden neuen URL in ihrer Historie abspeichern. ■■ Bei schlechter Programmierung besteht die Gefahr, dass ein Client öfters Anfragen an den Server senden muss, da es durch die Aufteilung auf mehrere Bereiche einer Seite oft auch mehrere unabhängige Events gibt. Dadurch wird die Auslastung des Webservers spürbar erhöht. ■■ Das Setzen eines Lesezeichens auf einen ganz bestimmten Zustand einer Webanwendung muss nun explizit vom Entwickler realisiert werden. ■■ Zusätzlicher Aufwand ist notwendig, um die Webanwendung einer Suchmaschine zugänglich zu machen. JavaScript-Bibliotheken wie jQuery oder Prototype ermöglichen den Einsatz von Ajax durch bereits geschriebene JavaScript-Kontrollelemente, wodurch Ajax-basierte Webanwendungen mit deutlich weniger Entwicklungsaufwand realisiert werden können. Allerdings sind im Gegensatz zu Webframeworks im Java-Umfeld immer noch Low-Level-Programmierkenntnisse in JavaScript erforderlich. Wann der Einsatz einer JavaScript-Bibliothek anstatt eines Webframeworks ausreichend sein kann, wurde unter [2] ausführlich beschrieben. www.JAXenter.de Webframeworks im Java-Umfeld Web sonders für lineare Abläufe, z. B. für einen einfachen Onlinefragebogen. Client-centric vs. Server-centric Frameworktypen Webanwendungen existieren je nach Einsatzgebiet in verschiedenen Größen und beanspruchen dementsprechend auch unterschiedlichen Zeitaufwand zur Realisierung (Abb. 5). Für jede dieser Arten von Webanwendung gibt es geeignete Webframeworks. Je nach Frameworktyp unterscheiden sich sowohl die Entwicklung der Webanwendung als auch die Benutzung durch den Endanwender. Im Folgenden werden die unterschiedlichen Typen vorgestellt. www.JAXenter.de Abb. 5: Kategorisierung von Webframeworks Abb. 6: Einordnung der Webframeworks bezüglich Frameworktyp und Komplexität Anzeige TRAINING Wichtig ist des Weiteren die Unterscheidung zwischen dem clientzentrischen und dem serverzentrischen Ansatz (Abb. 4). Beim clientzentrischen Ansatz werden die gesamte Oberfläche und Steuerungslogik beim Start auf den Client geladen. Das ist insbesondere bei Anwendungen sinnvoll, die über einen längeren Zeitraum benutzt werden, da so in der Summe weniger Daten zwischen Client und Server ausgetauscht werden. Beispielsweise startet der Mitarbeiter in einer Bank die Anwendung zur Verwaltung von Kundendaten morgens und arbeitet den ganzen Tag mit derselben Oberfläche. Diese muss nicht jedes Mal neu geladen werden, wenn eine neue Seite aufgerufen wird, sondern ist sofort verfügbar. Beim Wechsel zu einem anderen Kunden müssen statt der gesamten HTML-Oberfläche nur noch die Kundendaten (z. B. im XML-Format) vom Server übertragen werden. Beim serverzentrischen Ansatz hingegen wird die Darstellung der Oberfläche auf dem Server (z. B. durch den Aufruf einer Java-Methode) erstellt, an den Client übertragen und dann dort dargestellt (z. B. eine HTML-Seite, die Kundendaten enthält). In der oben genannten Bankanwendung müsste somit bei jedem Seitenwechsel (z. B. zur Auswahl eines anderen Kunden) neben den Kundendaten auch die HTMLOberfläche jedes Mal erneut vom Server übertragen werden, wodurch die Ladezeiten spürbar länger werden. Der serverzentrische Ansatz ist sinnvoll, wenn die Steuerungslogik aus Sicherheitsgründen oder wegen sehr leistungsschwachen Clients nicht vom Server ausgelagert werden soll. Ein weiterer Anwendungsfall ist der Einsatz von Clients ohne Browser, da hier die technische Implementierung auf Clientseite nicht bekannt sein muss. Das ermöglicht z. B. den Einsatz auf Mobiltelefonen ohne Browser, die nur Java ME unterstützen. Weitere wichtige Begriffe aus dem Umfeld von Webanwendungen werden im Kasten „Kriterien unabhängig von der Auswahl eines Webframeworks“ beschrieben. Sie haben keinen direkten Einfluss auf die Auswahl eines Webframeworks, da ihre Eigenschaften nicht nur die Oberfläche, sondern die gesamte Anwendung betreffen. Professional Scrum Master mit Ken Schwaber am 8. + 9.2.2011 in Frankfurt am Main Advanced TDD Intensiver Hands-on Kurs mit Bob Martin am 21. + 22.2.2011 in Karlsruhe Weitere Infos unter www.andrena.de Web Webframeworks im Java-Umfeld Fat Client Fat Clients besitzen die klassische Optik von JavaAnwendungen und verwenden Textfelder, Buttons, Checkboxen usw. Neben der Oberfläche wird auch die eigentliche Verarbeitung der Geschäftslogik auf dem Client vollzogen, nur die Daten werden auf dem Server gespeichert. Fat Clients werden beispielsweise mit Swing oder Eclipse RCP realisiert – und nicht mit Webframeworks. Der Begriff dient daher in diesem Artikel nur zur Abgrenzung. Klassische Webanwendung Eine klassische Webanwendung besitzt in der Regel eine Multi-Page-Struktur sowie die von Beginn der Internetära an bekannte HTML-Oberfläche. Die An- Kriterien unabhängig von der Auswahl eines Webframeworks Die folgenden Kriterien betreffen die gesamte Anwendung und nicht nur die Auswahl des Webframeworks zur Realisierung der Oberfläche. Plattformunabhängigkeit Plattformunabhängigkeit bedeutet, dass die Applikation unabgängig von folgenden Faktoren ausgeführt werden kann: ■■ Betriebssystem (z. B. Windows, Linux, Unix, Mac OS X) ■■ Application-Server (z. B. WebSphere, JBoss)/Webcontainer (z. B. Tomcat, Jetty) ■■ Webbrowser (z. B. Internet Explorer, Firefox, Safari, Chrome) ■■ Datenbank (z. B. DB2, MySQL, „NoSQL“) ■■ Programmiersprache (z. B. Java, Groovy, Scala) Mehrkanalfähigkeit Eine Webanwendung ist mehrkanalfähig, wenn sie über mehrere Kommunikationswege ausgeführt werden kann. Dabei ist ein großer Teil des entwickelten Codes für alle Kanäle nutzbar. Folgende Ziele werden erreicht: ■■ Reduzierung der Entwicklungskosten ■■ Schnellere Auslieferung von neuen Funktionen und/oder Kanälen ■■ Bessere, einheitlichere Benutzbarkeit der unterschiedlichen Kanäle Zu unterscheiden sind zwei Arten der Mehrkanalfähigkeit, die unabhängig voneinander in unterschiedlichen Kontexten betrachtet werden. Mehrkanalfähige Consumer-Anwendungen ermöglichen die Benutzung auf diversen Endgeräten wie Desktop, Laptop, Smartphone oder TV. Auf allen Endgeräten wird dieselbe Funktionalität angeboten. Die Darstellung und Benutzung ist ähnlich. Dabei treten in der Praxis allerdings einige Probleme auf, z. B. enorm unterschiedliche Displaygrößen, verschiedene Eingabemethoden oder die ausschließliche Unterstützung weniger Multimediaformate. Bei Enterprise-Anwendungen bedeutet Mehrkanalfähigkeit die Wiederverwendung von Komponenten in verschiedenen Prozessen. Für jeden Kanal kann dann ein eigener Prozessablauf spezifiziert werden. Für diese Komponenten gelten besonders hohe Anforderungen an die Unabhängigkeit und Integrierbarkeit in verschiedene Prozesse. 38 javamagazin 1 | 2011 wendung wird serverzentrisch realisiert. Die gesamte Geschäftslogik wird über Anfrage-/Antwortkommunikation durch den Server verarbeitet, wobei die Webanwendung nur die Oberfläche (d. h. das vom Server empfangene HTML) darstellt. Elementare, vom Desktop bekannte Features wie Drag and Drop oder der Zugriff auf die Festplatte und Betriebssystemfunktionen fehlen in klassischen Webanwendungen. Die Konsequenz ist mangelnde Benutzerfreundlichkeit. Immerhin muss durch den Einsatz von grundsätzlichen Ajax-Funktionen nur noch der aktualisierte Bereich der Seite neu geladen werden. Die gute Benutzbarkeit einer Desktopanwendung wird dadurch allerdings nicht erreicht. Klassische Webanwendungen benötigen kein Plug-in und laufen in jedem Browser. Allerdings entste- Offlinefähigkeit Offlinefähigkeit ermöglicht einer Webanwendung, auch ohne Internetverbindung funktionsfähig zu sein. Zur Realisierung sind zwei Möglichkeiten gegeben, die unabhängig von einem konkreten Webframework eingesetzt werden können. JavaScript-Caching kann verwendet werden, sofern Daten nur kurzfristig auf Clientseite gespeichert werden müssen. Dabei werden die Daten im Arbeitsspeicher zwischengespeichert – nach einem Browserneustart oder Absturz des Systems sind die Daten daher verloren. In der Oberfläche können neue Daten auch eingegeben werden, wenn keine Internetverbindung vorhanden ist. Die Daten werden später mit dem Server synchronisiert, beispielsweise durch einen Button-Klick. Diese Lösung benötigt eher geringen Aufwand und wird durch JavaScript-Bibliotheken realisiert, z. B. durch jCache [3]. Ein möglicher Anwendungsfall sind Einstellungstests von Bewerbern, die Aufgaben über eine Weboberfläche bearbeiten. Im Enterprise-Umfeld ist die JavaScript-Caching-Lösung allerdings oft nicht ausreichend. Gears (früher Google Gears) ermöglicht als Browser-Plug-in die Offlineverwendung von Webanwendungen. Dadurch können Daten bei fehlender Internetverbindung auch auf Clientseite persistiert werden. In Zukunft soll allerdings laut Google auf HTML5 gesetzt werden, deswegen wurde die Weiterentwicklung von Gears eingestellt. Der Support endet allerdings nicht, da bereits viele Webanwendungen Gears produktiv einsetzen [4]. HTML5 ist in den meisten Browsern noch nicht oder nur teilweise implementiert. Architekturänderungen zur Realisierung von Offlinefähigkeit Die Realisierung von Offlinefähigkeit erfordert ein Umdenken bei der Architektur, da neue Fragen entstehen, die bei klassischen „Online“Webanwendungen nicht auftreten: ■■ Welche Funktionalitäten sollen auch offline verfügbar sein? ■■ Wie soll die Datenschicht auf Clientseite isoliert werden (z. B. durch eine lokale Datenbank)? ■■ Soll das Wechseln zwischen Online- und Offlinemodus manuell oder automatisch erfolgen? ■■ Wie und wann werden die Daten synchronisiert (z. B. manuell oder im Hintergrund)? Ausführliche Erläuterungen zu diesen Fragestellungen sind unter [5] zu finden. www.JAXenter.de Ein Portal kann zusätzlich zu einem Webframework eingesetzt werden. Unabhängig vom ausgewählten Produkt entsteht dadurch ein erheblicher Mehraufwand und höhere Komplexität. Portale stellen Informationen verschiedener Anwendungen (Standardsoftware, Individualsysteme, Webseiten, externe Systeme) auf eine einheitliche Art dar und werden eingesetzt, um Informationen, Personen und Prozesse über organisatorische Grenzen hinweg in Unternehmen zu integrieren. Portale werden auf einem Portalserver deployt. Neben Webframeworks zur Entwicklung der eigentlichen Oberflächen von Anwendungen wird eine Portalsoftware benötigt. Dabei konkurrieren sowohl kommerzielle Produkte wie IBM-WebSphere-Portal und Open-Source-Produkte wie Liferay-Portal um die Kunden. Portlets Portlets sind der De-facto-Standard für die Realisierung eines Portals und sind in den JSRs 168 und 286 spezifiziert. Sie definieren beliebig kombinierbare Komponenten einer Benutzeroberfläche, die von dem Portalserver angezeigt und verwaltet werden. Jede Anwendung, die im Portal dargestellt werden soll, wird in ein Portlet integriert. Die Portlets können auch untereinander Informationen austauschen und dadurch auf Zustände anderer Anwendungen entsprechend reagieren. Detaillierte Informationen zum Portlet-Standard gibt es unter [6]. Vorteile eines Portals Wegen des erheblichen Mehraufwands beim Einsatz eines Portals im Gegensatz zur Entwicklung von einzelnen Webanwendungen ist die Einführung insbesondere bei großen Anwendungslandschaften sinnvoll. Ein Portal bietet folgende Vorteile: ■■ Integration: Die Funktionen und Daten von Anwendungen können in andere Komponenten integriert werden. ■■ Zusammenarbeit: Eine Aktion in einer Anwendung kann Änderungen des Zustands von anderen Anwendungen hervorrufen. ■■ Single-Sign-on: Ein Benutzer muss sich nur einmal anmelden und kann dann alle integrierten Anwendungen, für die er die Zugriffsrechte besitzt, verwenden. ■■ Personalisierung: Die Darstellung der Oberfläche kann durch den Benutzer oder das System individuell angepasst werden. Der Benutzer kann das Look and Feel seinen persönlichen Wünschen anpassen, beispielsweise bezüglich Inhalt, Struktur oder grafischer Darstellung. Das System kann basierend auf Metadaten den am besten zum Benutzer passenden Inhalt, z. B. passende Newsmeldungen oder die am häufigsten genutzten Anwendungen, anzeigen. Software Engineer Java (m/w) Ref.-Nr.: 10/2010 Wir wachsen kontinuierlich weiter und suchen zur Unterstützung unserer Entwicklungsabteilung in Berlin ab sofort einen Software Engineer Java! Zu Ihren spannenden Aufgaben bei Axway gehört die Mitarbeit in eigenverantwortlichen, agilen und internationalen Java Entwicklungsteams. Sie passen zu uns, wenn Sie nach einem erfolgreich abgeschlossenen Studium der Informatik oder einer vergleichbaren Fachrichtung bereits Berufserfahrungen gesammelt haben. Neben Kenntnissen der Java Entwicklung verfügen Sie über Wissen der Entwicklung von Eclipse Plug-Ins oder von BackendApplikationen. Sichere Deutsch- und Englischkenntnisse in Wort und Schrift, Teamorientierung, eine selbständige und kreative Arbeitsweise sowie Qualitätsbewusstsein runden Ihr Profil ab. Sie haben Lust, sich in einem globalen IT-Unternehmen mit flachen Hierarchien zu engagieren? Sie legen Wert auf eine attraktive Vergütung und großen Gestaltungsfreiraum mit persönlichen Entwicklungsmöglichkeiten? Dann kommen Sie zu uns! Wir freuen uns auf Ihre Bewerbung! Axway ist die Business Interaction Networks Company und der einzige Anbieter auf dem heutigen Markt, der sämtliche geschäftliche Interaktionen – E-Mail, Dateien, Nachrichten, Services, Events und Prozesse – managen, betreiben, sichern und überwachen kann. Bei über 11.000 Kunden in mehr als 100 Ländern beschleunigt Axway den Geschäfts- erfolg mit Multi- Enterprise-Transaktionen, -Prozessen und -Integrationen. Axway bietet seinen Kunden Professional Services und Managed Services sowie Cloud Computing und Software as a Service (SaaS). Axway ist in 20 Ländern vertreten und hat seinen Hauptgeschäftssitz in Phoenix, Arizona (USA). Bitte senden Sie Ihre aussagekräftigen Unterlagen mit Angaben zu Ihren Gehaltsvorstellungen und möglichem Eintrittstermin an: Axway GmbH Human Resources, Kurfürstendamm 119, 10711 Berlin Tel: (0)30 890100 Email: [email protected] www.axway.de Web Webframeworks im Java-Umfeld Webframework Frameworktyp Technologietyp Eingesetzte Technologien Action- vs. Componentbased Java Server Faces (JSF) Klassische Webanwendung Mixed Language Java, XML, XHTML (seit JSF 2.0, vorher JSP) Wicket Klassische Webanwendung Mixed Language Tapestry Klassische Webanwendung Struts Plug-in notwendig Browserunabhängig Componentbased Nein Nein JSF ist ein eigener Standard (JSF 2.0: JSR 314). Sehr viele „Add-ons“ verfügbar: Verschiedene Impementierungen (z. B. Suns Mojarra, Apaches MyFaces), Komponentenbibliotheken (z. B. RichFaces, ICEFaces), CaptainCasa (ermöglicht die einfach Erstellung eines Rich Clients durch GUI-Editor und Abkopplung von JSF Lifecycle), JBoss Seam (ermöglicht einfache Integration mit Geschäftslogik, z. B. durch EJBs). Sehr gut in Portlets integrierbar durch JSR 301 bzw. 329 (Portlet-Bridge) für JSF 1.2, Liferay Portletfaces bzw. JBoss PortletBridge für JSF 2.0. Java, XHTML Componentbased Nein Nein Sehr gute Trennung zwischen Designer und Entwickler durch „Wicket-IDs“. Starke Orientierung am OO-Konzept/SwingProgrammierung Mixed Language Java, auf XHTML basierende Markup-Sprache „TML“ Componentbased Nein Nein Stark Annotation-basiert. Jeder Versionssprung bedeutete bisher Inkompatibilität zu älteren Versionen. Klassische Webanwendung Mixed Language Java, XHTML, JSP Action-based Nein Nein Struts 2 wurde bis 2008 unter dem Namen „WebWork 2“ entwickelt. Spring MVC Klassische Webanwendung Mixed Language Java, XHTML, JSP, XML Action-based Nein Nein Teil des Spring Frameworks. Einfache Integration vieler View-Technologien möglich (z. B. JSP, Struts Tiles, Freemarker) Google Web Toolkit (GWT) Rich Client Java Java, Design optional in XML Componentbased Nein Ja Clientzentrischer Ansatz. Viele „Add-ons“ verfügbar: Komponentenbibliotheken (z. B. SmartGWT, ExtGWT), GUI-Builder (z. B. GWTDesigner) ZK Rich Client Java Java, Design optional in XML (eigene MarkupSprache „ZUML“ Componentbased Nein Ja Leichtgewichtiger, serverzentrischer Ansatz (realisiert durch eine „intelligente HTML-Seite“, die beim Start an den Client gesendet wird und eine ZK-spezifische Client-Engine besitzt) JavaFX RIA Skript­ sprache JavaFX Script Componentbased Java Runtime Environment (JRE) Ja Ausrichtung auf mehrkanalfähige ConsumerAnwendungen (Common Profile mit Basisklassen für alle Anwendungen, zusätzlich Desktop-, Mobile- und TV-Erweiterungen, 2011 wird sich JavaFX vollständig verändern. Die Skriptsprache JavaFX Script wird durch ein Java-API ersetzt. Außerdem soll auch HTML5 nativ unterstützt werden, wodurch die Plug-inNotwendigkeit entfällt. Adobe Flex RIA Skript­ sprache MXML, ActionScript Componentbased Adobe Flash Player Ja Wird nicht in Java-Bytecode übersetzt, sondern erzeugt eine .SWF-Datei. Mangels Alternativen zu JavaFX im RIA-Bereich, und da die Integration zu Java (z. B. durch GraniteDS) mittlerweile einfacher geworden ist, wurde Flex trotzdem in diesen Artikel aufgenommen. Flex ist Open Source, Runtime (Flash Player) und Tools sind proprietär und kommerziell – dafür aber auch schon sehr ausgereift. Durch Tools wie GraniteDS gut mit Java Backend integrierbar. Roma Framework CRUD-Client Java Java, diverse weitere (siehe Besonderheiten) Componentbased Nein Nein Metaframework: Für jeden Bereich wie View, Model oder Reporting kann eine beliebige Technologie eingesetzt werden (z. B. für die View liegen Implementierungen für JSP und Echo2 vor, HTML und Swing sind in Arbeit). Spring Roo CRUD-Client Java Java Action-based Nein Nein Basiert auf Spring, JPA und AspectJ. Entwicklung hauptsächlich in Roo Shell (interaktive Konsole). Frei verfügbare IDE „SpringSource Tool Suite“. Entfernen von Spring Roo-spezifischem Quellcode möglich (AspectJ-Code wird dann in die eigentlichen Klassen verschoben). Grails CRUD-Client „Moderne“ JVMSprache Groovy, JSP oder GSP Action-based Nein Nein Groovy ist neben Java die zweite Standardsprache für die JVM (JSR 241) Effiziente Entwicklung durch Groovy-Feaures möglich. Basiert auf Spring, Hibernate und Sitemesh. Lift CRUD-Client „Moderne“ JVMSprache Scala, XHTML Componentbased Nein Nein Effiziente Entwicklung durch Scala-Features möglich. Besonderheiten Tabelle 1: Überblick über Webframeworks 40 javamagazin 1 | 2011 www.JAXenter.de Webframeworks im Java-Umfeld Web hen insbesondere beim Einsatz von Ajax oft Kompatibilitätsprobleme zwischen verschiedenen Browsern. Rich Internet Applications (RIA) Bei einer RIA läuft die Oberfläche vollständig auf dem Client ab. Durch die Verwendung des clientzentrischen Konzepts wird bei diesem Frameworktyp stärker zwischen Oberflächendarstellung und Daten getrennt. Eine RIA hat eine Single-Page-Struktur und verfügt über viele Eigenschaften von Desktopanwendungen wie Offlinefähigkeit, Drag and Drop oder Festplattenzugriff. Zudem ermöglichen RIAs die Realisierung von hohen Anforderungen an die Oberfläche, beispielsweise durch Animationen, Effekte oder Multimediafeatures. Daher wird statt Java auch eine neue Skriptsprache zur Entwicklung benötigt. Die Webanwendung ist meistens nicht mehr als solche zu erkennen und kann in der Regel auch außerhalb des Browsers gestartet werden. Aufgrund dieser revolutionären Darstellung entstehen aber auch einige Nachteile für Entwickler und Anwender: CRUD-Client CRUD ist das Akronym für „Create, Read, Update and Delete“. CRUD-Clients ermöglichen in erster Linie das Anzeigen, Suchen und Bearbeiten von Datensätzen und sind daher sehr gut zur Verwaltung von Daten geeignet. Die Optik entspricht dabei einer klassischen Webanwendung. Typische Browserfeatures wie Lesezeichen oder Vorwärts- und Rückwärtsnavigation sind zumeist von Grund auf in einer Multi-Page-Struktur verfügbar. Im Gegensatz zu den zuvor beschriebenen Frameworktypen wird mit diesen Webframeworks nicht nur die Oberfläche erschaffen, sondern die gesamte Anwendung (d. h. die übliche Drei-SchichtenArchitektur mit Oberfläche, Geschäftslogik und Datenhaltung) auf einmal realisiert. Die Webanwendung ist dabei serverzentrisch. CRUD-Frameworks besitzen folgende Eigenschaften, wodurch sehr schnell Ergebnisse erzielt werden können: Bei Rich Clients wird im Gegensatz zu RIAs clientseitig kein Plug-in benötigt. •Die gesamte Webanwendung muss beim ersten Start sowie bei jeder neuen Version vollständig heruntergeladen werden. •Auf dem Client muss ein Plug-in des jeweiligen Webframeworks installiert sein, wodurch als Nebeneffekt auch Kompatibilitätsprobleme zwischen verschiedenen Browsern eliminiert werden. •Plattformneutralität geht verloren, falls das Plug-in nicht für alle gewünschten Systeme verfügbar ist. •Typische Browserfeatures wie Lesezeichen oder Vorwärts-/Rückwärtsnavigation fehlen oft. •Der (Java-)Entwickler muss eine neue Programmiersprache lernen. •Convention over Configuration: Konfiguration ist nur notwendig, falls die Default-Konfiguration nicht ausreichend ist. •Code-Generation: Durch die Erstellung des Models für die Persistierung in der Datenbank werden auch Anwendungslogik und Oberfläche für dieses Model sofort mit erzeugt. •Objekt-UI-Mapping: Für Attribute des Models wird automatisch in der Oberfläche die passende Darstellung angezeigt, z. B. für den Datentyp java.util.Date ein Kalender-Widget. •Moderne Sprache: Oft basieren Frameworks für CRUD-Clients auf „modernen“, auf JVM basierenden Programmiersprachen, um hohe Effektivität zu erreichen und die Menge des Quellcodes zu reduzieren. Rich Client Der Rich Client vermischt die Eigenschaften der beiden bereits genannten Architekturtypen. Die Oberfläche wird beim Start immer noch großteils oder vollständig auf den Client geladen, die Optik aber entspricht der einer klassischen Webanwendung. Das Ziel ist daher im Gegensatz zu RIAs nicht die Neuausrichtung der Oberflächendarstellung von Webanwendungen, sondern die Verbesserung bei der Nutzung der bereits verbreiteten und akzeptierten Darstellung. Die Oberfläche wird entweder clientzentrisch oder serverzentrisch realisiert und besitzt meist eine Single-Page-Struktur. Auf Clientseite wird im Gegensatz zu RIAs kein Plug-in benötigt, auch das Lernen einer speziellen Skriptsprache ist nicht notwendig. Dennoch können einige RIA-Features wie Drag and Drop mittlerweile relativ einfach mit Ajax-Komponenten realisiert werden. www.JAXenter.de Anzeige Web Webframeworks im Java-Umfeld Zusätzlich zu den vorgestellten Frameworktypen werden manchmal auch Portale eingesetzt (Kasten: „Portal“). PortalTechnologietyp Die verschiedenen Webframeworks unterscheiden sich in den eingesetzten Technologien, mit denen Webanwendungen realisiert werden: •Java: Die Programmierung erfolgt nahezu ausschließlich in Java. Die Oberfläche (HTML und JavaScript) wird automatisch erzeugt, Konfiguration mit XML ist nur minimal oder gar nicht notwendig. •Mixed Language: Die Programmierung erfolgt durch Java und HTML, die Konfiguration durch XML. JavaScript wird z. B. durch frameworkeigene Elemente (z. B. Tag Libraries) automatisch erzeugt. •„Moderne“ JVM-Sprache: Die Programmierung erfolgt mit einer „No-Java“-Programmiersprache wie Groovy oder Scala, die in Java-Bytecode übersetzt wird. Dadurch ist der Zugriff auf die Java-Bibliotheken ohne Umwege möglich. •Skriptsprache: Die Programmierung erfolgt vollständig in einer Skriptsprache, die explizit für die Erstellung von RIAs entwickelt wurde. Dadurch wird u. a. das bidirektionale Binding zwischen Client und Server stark vereinfacht. Zugriff auf die Java-Bibliotheken ist meist nur über Umwege möglich. Überblick über konkrete Webframeworks Tabelle 1 gibt einen Überblick über verschiedene im Markt verfügbare Webframeworks. Dort werden neben dem Frameworktyp und den eingesetzten Technologien weitere Besonderheiten der einzelnen Frameworks beschrieben. Browserunabhängigkeit bedeutet dabei, dass die Webanwendung nicht für jede Version jedes Browsers angepasst werden muss. Diese Anpassungen sind insbesondere beim Einsatz von JavaScript aufwändig. Abbildung 6 gibt noch einmal einen visuellen Überblick. Mit „Komplexität“ ist dort die Einarbeitung für Java-Entwickler gemeint und beinhaltet z. B. den Aufwand, um das Framework zu beherrschen oder neue Technologien und Programmiersprachen zu erlernen. Kombination verschiedener Sprachen und Webframeworks Durch Plug-ins können verschiedene Webframeworks kombiniert oder neben Java auch noch andere moderne Programmiersprachen in Webframeworks eingebunden werden. Die Anzahl an Plug-ins ist nur schwer überschaubar und wächst immer weiter, und auch die angebotenen Funktionalitäten unterscheiden sich. Die Qualität bewegt sich dabei zwischen unbenutzbar und sehr gut. Eine Auswahl verfügbarer Plug-ins mit sinnvollen Kombinationen: •Gracelets [7]: Eine Domain Specific Language (DSL), mit der JSF-Views mit Groovy statt XHTML rea- 42 javamagazin 1 | 2011 lisiert werden können. Außerdem können Groovy Closures statt der JSF Expression Language verwendet werden. •JSF Flex [8]: Flex-Komponenten können als JSFKomponenten genutzt werden. Der Entwickler erzeugt dabei eine JSF-Komponente, das Plug-in generiert dann die zugehörigen Flex-Ressourcen (z. B. MXML-Code, SWF-Datei) und kümmert sich um die Integration. •GwtAI [9]: Ermöglicht die Integration von Applets (und damit auch JavaFX) in GWT. Zusammenfassung Die Anzahl der verfügbaren Webframeworks ist kaum überschaubar. Die Wahl des Frameworktyps hat große Auswirkungen auf Benutzbarkeit und Antwortzeiten einer Webanwendung, allerdings sind der Aufwand und die Komplexität bei der Auswahl eines neuen Frameworks nicht zu unterschätzen. Die Entscheidung für oder gegen ein Webframework muss gut überlegt sein – eine sinnvolle Entscheidung ist nur möglich, wenn ein Überblick über die im Markt verfügbaren Webframeworks vorhanden ist. Ausblick In der kommenden Ausgabe des Java Magazins werden verschiedene Projektszenarien mit sehr unterschiedlichen Anforderungen aus dem Unternehmensalltag vorgestellt und eine Bewertung bezüglich der Eignung der verschiedenen Webframeworkkategorien durchgeführt. Dabei wird erläutert, warum sich für bestimmte Anforderungen konkrete Webframeworks besser eignen als andere. Kai Wähner ist als IT-Consultant bei MaibornWolff et al tätig. Seine Schwerpunkte liegen in den Bereichen JEE, EAI und SOA. Außerdem berichtet Kai auf http://www.kai-waehner.de/blog über seine Erfahrungen mit neuen Technologien, IT-Konferenzen und Zertifizierungen. Feedback zum Artikel gerne an [email protected]. Links & Literatur [1] http://en.wikipedia.org/wiki/Comparison_of_web_application_ frameworks [2] Müller, Florian: „Ajax – 360-Grad-Betrachtung“, in Java Magazin 01.2010 [3] http://Plug-ins.jquery.com/project/jCache [4] http://latimesblogs.latimes.com/technology/2009/11/google-gears. html [5] http://code.google.com/apis/gears/gears_faq.html#offlineArchitectures [6] Bosch, Andy: Artikelserie „Portale und Portlets“, in Java Magazin 12.2008–4.2009 [7] http://gracelets.sourceforge.net/ [8] http://code.google.com/p/jsf-flex/ [9] http://code.google.com/p/gwtai/ www.JAXenter.de