Einführung in Google Web Toolkit

Werbung
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
Herunterladen