Einführung in Google Web Toolkit Lars Pfannenschmidt Tobias Ullrich Software Freedom Day 2009 Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 1 / 24 Aus dem Leben: “AJAX ist die Zukunft! Du musst uns eine neue Webseite bauen die interaktiv und animiert ist. Außerdem soll sie wie eine Desktop Applikation benutzbar sein. Die Seite muss im Internet Explorer, Firefox und Safari funktionieren. Wann kannst du fertig sein?” Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 2 / 24 Was ist GWT? Umgebung um Webanwendungen in Java zu schreiben Bis auf einige native Libraries komplett Java Apache 2.0 Lizenz (Open Source) Compiler von Java → JavaScript Übersetzung von Java Bibliotheken (java.lang, java.util, java.io, java.sql, ...) Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 3 / 24 Komponenten GWT Java-to-JavaScript Compiler GWT Hosted Web Browser Die Applikation läuft als Java direkt in der JVM ohne zu JavaScript kompiliert zu werden (fürs debugging, ab GWT 2.0 Hosted Mode über Browser Plugins direkt im Browser) JRE emulation library JavaScript Implementierung gängiger Java Klassen (java.lang, java.util, java.io, java.sql, ...) GWT Web UI class library Standardkomponenten für Webapplikationen (Buttons, Inputfelder, Panels, ...) Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 4 / 24 Geschichte Angekündigt auf der JavaOne 2006 Erstes Release: 16. Mai 2006: GWT Version 1.0 RC 1 (build 1.0.20) Letztes Release: 13. Juli 2009: GWT Version 1.7 Google benutzt GWT für eigene Anwendungen (Gmail, Docs, Voice, Wave, ... ) → sehr aktive Entwicklung Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 5 / 24 Warum GWT? Browser unabhängig Unterstützung für viele IDEs Netbeans, Eclipse, JDeveloper, ... Verschiedenste Erweiterungsmöglichkeiten: I I User Interface, Widgets: Ext GWT, GWT Component Library, GWT-Ext, GWT Widget Library, GWTiger, Rocket GWT, Dojo, SmartGWT, GWT-mosaic, ... Funktionalität: GWT-SL, Gilead, ... Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 6 / 24 Warum GWT? Alle Tools die man zur Java Entwicklung benutzt kann man auch für GWT benutzen (JUnit, findbugs, ...) Der Compiler optimiert den JavaScript Code I I erzeuger Code ist schneller als von Hand geschriebener nur benötigter Java Code wird auch zu JavaScript kompiliert (Problematisch: Reflections) I18N einfach möglich Volles Java debugging Eigenes JavaScript kann im Java Source über JSNI (JavaScript Native Interface) eingebunden werden Unterstützung der Google-APIs (Maps, Gears,...) Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 7 / 24 Warum GWT? JAVA! Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 8 / 24 GWT und Ajax Viele Möglichkeiten um mit dem Backend zu kommunizieren I I I I I GWT-RPC JSON XML XML-RPC (3rd party) ... GWT-RPC bietet die beste Funktionalität I I I normales Servlet, läuft auf jedem Application-Server Polymorphe Parameter, return types und Objekte Durchreichen von Exceptions über RPC Übliche Ajaxprobleme wie z.B. Browserhistory und Reloads werden gelöst Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 9 / 24 GWT und Ajax Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 10 / 24 Demo Demo Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 11 / 24 GWT Projektstruktur mit RPC-Call de.msgtug.demo.gwt I I Main.gwt.xml client F F F F I Demo.java DemoService.java DemoServiceAsync.java MainEntryPoint.java server F DemoServiceImpl.java Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 12 / 24 Client: Main.gwt.xml 1 2 3 4 <? xml v e r s i o n=” 1 . 0 ” e n c o d i n g=”UTF−8” ?> <module> < i n h e r i t s name=”com . g o o g l e . gwt . u s e r . U s e r ” /> <e n t r y −p o i n t c l a s s=” de . msgtug . demo . gwt . c l i e n t . M a i n E n t r y P o i n t ” /> 5 </ module> Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 13 / 24 Client: DemoService.java 1 p u b l i c i n t e r f a c e D e m o S e r v i c e extends R e m o t e S e r v i c e { 2 p u b l i c S t r i n g myMethod ( S t r i n g s ) ; 3 } Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 14 / 24 Client: DemoServiceAsync.java public i n t e r f a c e DemoServiceAsync { p u b l i c v o i d myMethod ( S t r i n g s , A s y n c C a l l b a c k callback ) ; 3 } 1 2 Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 15 / 24 Client: MainEntryPoint.java p u b l i c c l a s s M a i n E n t r y P o i n t implements E n t r y P o i n t { public MainEntryPoint () { } p u b l i c v o i d onModuleLoad ( ) { // R o o t P a n e l . g e t ( ) . add ( new L a b e l ( ” H a l l o Welt !”) ) ; 6 R o o t P a n e l . g e t ( ) . add ( new Demo ( ) ) ; 7 } 8 } 1 2 3 4 5 Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 16 / 24 1 2 3 4 5 6 7 8 9 0 1 2 3 Client: Demo.java p u b l i c c l a s s Demo extends D e c o r a t o r P a n e l { p r i v a t e L a b e l i n p u t T e x t L a b e l = new L a b e l ( ”Name” ) ; p r i v a t e L a b e l s e r v e r R e p l y L a b e l = new L a b e l ( ) ; p r i v a t e TextBox i n p u t T e x t B o x = new TextBox ( ) ; p r i v a t e Button s u b m i t B u t t o n = new Button ( ” Send to s e r v e r ” ) ; p u b l i c Demo ( ) { F l e x T a b l e l a y o u t = new F l e x T a b l e ( ) ; layout . setCellSpacing (6) ; FlexCellFormatter cellFormatter = layout . getFlexCellFormatter () ; layout . setWidget (0 , 0 , inputTextLabel ) ; Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 17 / 24 4 5 6 7 8 9 0 1 2 3 4 5 Client: Demo.java (cont.) l a y o u t . setWidget (0 , 1 , inputTextBox ) ; l a y o u t . setWidget (0 , 2 , submitButton ) ; layout . setWidget (1 , 1 , s e r v e r R e p l y L a b e l ) ; this . setWidget ( layout ) ; f i n a l A s y n c C a l l b a c k c a l l b a c k = new AsyncCallback () { public void onSuccess ( Object r e s u l t ) { serverReplyLabel . setText (( String ) result ) ; } p u b l i c v o i d o n F a i l u r e ( T h ro w a bl e c a u g h t ) { Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 18 / 24 Client: Demo.java (cont.) 6 serverReplyLabel . setText (” Communication f a i l e d ” ) ; } 7 8 9 0 1 }; // L i s t e n f o r t h e b u t t o n c l i c k s s u b m i t B u t t o n . a d d C l i c k H a n d l e r ( new ClickHandler () { 2 3 4 5 6 7 8 @Override public void o n C l i c k ( C l i c k E v e n t event ) { g e t S e r v i c e ( ) . myMethod ( i n p u t T e x t B o x . getText () , c a l l b a c k ) ; } }) ; } Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 19 / 24 Client: Demo.java (cont.) 9 0 1 2 3 4 5 6 7 } public s t a t i c DemoServiceAsync g e t S e r v i c e ( ) { DemoServiceAsync s e r v i c e = ( DemoServiceAsync ) GWT. c r e a t e ( D e m o S e r v i c e . c l a s s ) ; ServiceDefTarget endpoint = ( ServiceDefTarget ) service ; S t r i n g m o d u l e R e l a t i v e U R L = GWT. getModuleBaseURL ( ) + ” m y S e r v i c e ” ; endpoint . setServiceEntryPoint ( moduleRelativeURL ) ; return s e r v i c e ; } Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 20 / 24 1 Server: DemoServiceImpl.java p u b l i c c l a s s D e m o S e r v i c e I m p l extends R e m o t e S e r v i c e S e r v l e t implements D e m o S e r v i c e { 2 3 4 5 6 } p u b l i c S t r i n g myMethod ( S t r i n g s ) { return ” Hallo ” + s ; } Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 21 / 24 Tipps Patterns benutzen Stimmen die Versionen aller Libraries? -Xmx Nicht zuviel Logik in den Client Code “clever” programmieren Presentation Layer! Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 22 / 24 Wave Hackathon Interesse an Google Wave? Treffen, ausprobieren, programmieren, ... Mehr Infos bald auf http://www.ms-gtug.de Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 23 / 24 Danke für eure Aufmerksamkeit. Lars Pfannenschmidt, Tobias Ullrich () Einführung in Google Web Toolkit Software Freedom Day 2009 24 / 24