RAP vs. GWT vs. GAE/J + jQuery Web Technologien im Verlgeich RAP vs GWT vs jQuery Dominik Wißkirchen 30. Oktober 2010 Abkürzungen RAP AJAX RWT Rich AJAX Platform Asynchronous JavaScript and XML RAP Widget Toolkit GWT Google Web Toolkit GAE GAE/J GAE/P Google AppEngine Google AppEngine Java Google AppEngine Python Gemeinsamkeiten von RAP + GWT • AJAX basierte WebGUI • Entwickler schreiben in Java (nicht in JavaScript) • Cross Browser Kompatiblität Browser Internet Explorer Firefox Chrome Safari Opera iPhone Android Rendering Engine Trident Gecko WebKit WebKit Presto WebKit WebKit JavaScript Engine JScript Spidermonkey/Jägermonkey V8 SquirrelFish Extreme Carakan SquirrelFish Extreme V8 GUI ShowCases / Widget Umfang Widgets Composites Panels RAP GWT Ext GWT SmartGWT jQuery UI Popularität von JavaScript Bibliotheken RAP – Architektur Ähnlich zur RCP Architektur, aber nicht 100% kompatibel RCP RCP-Plugin org.eclipse.swt org.eclipse.jface org.eclipse.workbench org.eclipse.ui RAP RAP-Plugin org.eclipse.rap.rwt org.eclipse.rap.jface org.eclipse.rap.workbench org.eclipse.rap.ui RAP – Architektur RAP • Java BytecodeRCP wird auf dem Server ausgeführt • Statische JavaScript Bibliothek wird zum Client übertragen GWT – Architektur • Java Bytecode wird auf dem Server ausgeführt • Dynamisch generierte JavaScript Dateien werden zum Client übertragen GWT GWT App GWT Widgets SmartGWT Java Compiler | JS Compiler Java Bytecode JavaScript RAP – Kommunikation Seitenanfrage http://... qooxdoo Rendering Seitengenerierung Benutzereingaben Aktualisierte Darstellung Verarbeitung Benutzereingaben Rendering Daten Browser Server GWT – Kommunikation Seitenanfrage Rendering http://... Seitengenerierung Benutzereingaben Verarbeitung XMLHttpRequest Rendering Daten Browser Server Kommunikation im Vergleich RAP GWT Browser History GWT bietet eine Möglichkeit, Statusinformationen zu speichern Kompatiblität zur Browser History RAP Browser History Unterstützung seit Version 1.3 (23. Juni 2010) http://google-web-toolkit.googlecode.com/svn/javadoc/1.4/com/google/gwt/user/client/History.html Vergleich der vorgestellten Lösungen Platform JSBibliothek GUI-Bibliothek Single Programming Language Single Sourcing Verbreitungsgrad Widget Umfang Lernkurve Quellcode Readability Ausführungsgeschwindigkeit JavaScript Debugging RAP qooxdoo RWT ja ja gering mittel mittel gut ? schwer GWT/ SmartGWT SmartClient SmartGWT ja nein mittel hoch mittel-hoch ok langsam schwer GAE/ J+ jQuery jQuery jQuery UI nein nein hoch hoch mittel-hoch schlecht langsam-mittel mittel GWT – Simplified RPC (XMLHttpRequest) http://code.google.com/support/bin/answer.py?answer=55196&topic=10210 GWT – Simplified RPC Example Client: (kompiliert zu JavaScript) Server: public interface MailCommandsAsync { public void getMailItems(AsyncCallback callback); public void getMailItemBody(AsyncCallback callback); } public interface MailCommands extends RemoteService { public List getMailItems(); public String getMailItemBody(); } instance = (…) GWT.create(MailCommands.class); ServiceDefTarget target = (ServiceDefTarget) instance; target.setServiceEntryPoint(... + "MailCommands"); public class MailCommandsImpl extends RemoteServiceServlet implements MailCommands { public List getMailItems() { … gather items return items; } ... etc … } instance.getMailItems( new AsyncCallback() { public void onSuccess(Object result) { List items = (List) result; … display items … } public void onFailure(Throwable caught) { … notify user of exception … } } ); XMLHttpRequest … • “and debugging JS that you wrote is easier than debugging JS that was generated from Java that you wrote.” • GWT / RAP langsamer als klassische Webanwendungen • GWT Designer Praxisbeispiel • Webapplikation basierend auf GAE/J + jQuery • Remote Management von Android Geräten Link