SlideShare una empresa de Scribd logo
1 de 84
GWT Deep Dive 
Part 1: UiBinder, CellWidgets, Activities&Places 
Andrey Mormysh 
Java Developer 
a.mormysh@gmail.com 
November 02, 2011 www.ExigenServices.com
GWT 
Google Web Toolkit 
2 www.ExigenServices.com
GWT /ˈɡwɪt / 
Google Web Toolkit 
3 www.ExigenServices.com
4 www.ExigenServices.com 
GWT-based projects
5 www.ExigenServices.com 
GWT-based projects 
 Google Wave (http://wave.google.com/) - an online tool for real-time communication 
and collaboration
6 www.ExigenServices.com 
GWT-based projects 
 Google Wave (http://wave.google.com/) - an online tool for real-time communication 
and collaboration 
 Odnoklassniki (http://www.odnoklassniki.ru) - social network
7 www.ExigenServices.com 
GWT-based projects 
 Google Wave (http://wave.google.com/) - an online tool for real-time communication 
and collaboration 
 Odnoklassniki (http://www.odnoklassniki.ru) - social network 
 Google Moderator (http://www.google.com/moderator) - a tool that allows 
distributed communities to submit and vote on questions for talks, presentations and 
events
8 www.ExigenServices.com 
GWT-based projects 
 Google Wave (http://wave.google.com/) - an online tool for real-time communication 
and collaboration 
 Odnoklassniki (http://www.odnoklassniki.ru) - social network 
 Google Moderator (http://www.google.com/moderator) - a tool that allows 
distributed communities to submit and vote on questions for talks, presentations and 
events 
 Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider 
which enables you to deploy and scale load-balanced cloud server networks via a 
unique multi-server control panel.
9 www.ExigenServices.com 
GWT-based projects 
 Google Wave (http://wave.google.com/) - an online tool for real-time communication 
and collaboration 
 Odnoklassniki (http://www.odnoklassniki.ru) - social network 
 Google Moderator (http://www.google.com/moderator) - a tool that allows 
distributed communities to submit and vote on questions for talks, presentations and 
events 
 Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider 
which enables you to deploy and scale load-balanced cloud server networks via a 
unique multi-server control panel. 
 Blueprint (https://blueprint.lombardi.com/index.html) - business process mapping 
tool
10 www.ExigenServices.com 
GWT-based projects 
 Google Wave (http://wave.google.com/) - an online tool for real-time communication 
and collaboration 
 Odnoklassniki (http://www.odnoklassniki.ru) - social network 
 Google Moderator (http://www.google.com/moderator) - a tool that allows 
distributed communities to submit and vote on questions for talks, presentations and 
events 
 Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider 
which enables you to deploy and scale load-balanced cloud server networks via a 
unique multi-server control panel. 
 Blueprint (https://blueprint.lombardi.com/index.html) - business process mapping 
tool 
 Scenechronize (https://www.scenechronize.com/) - a production management web 
application for film, television and commercials
11 www.ExigenServices.com 
GWT-based projects 
 Google Wave (http://wave.google.com/) - an online tool for real-time communication 
and collaboration 
 Odnoklassniki (http://www.odnoklassniki.ru) - social network 
 Google Moderator (http://www.google.com/moderator) - a tool that allows 
distributed communities to submit and vote on questions for talks, presentations and 
events 
 Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider 
which enables you to deploy and scale load-balanced cloud server networks via a 
unique multi-server control panel. 
 Blueprint (https://blueprint.lombardi.com/index.html) - business process mapping 
tool 
 Scenechronize (https://www.scenechronize.com/) - a production management web 
application for film, television and commercials 
 Whirled (http://www.whirled.com/) - social virtual world website which includes 
multi-player games 
etc…
12 www.ExigenServices.com 
Features 
Cross-browser 
Object-oriented programming 
Dev-mode 
GUI debugging 
Wigets and declarative UI 
Client Bundle 
Simple localization 
Code optimization 
Code splitting 
RPC, JSON/XML 
UI Designer 
HTML5 
…
13 www.ExigenServices.com 
Features 
Cross-browser 
Object-oriented programming 
Dev-mode 
GUI debugging 
Wigets and declarative UI 
Client Bundle 
Simple localization 
Code optimization 
Code splitting 
RPC, JSON/XML 
UI Designer 
HTML5 
…
14 www.ExigenServices.com 
Features 
Cross-browser 
Object-oriented programming 
Dev-mode 
GUI debugging 
Wigets and declarative UI 
Client Bundle 
Simple localization 
Code optimization 
Code splitting 
RPC, JSON/XML 
UI Designer 
HTML5 
…
15 www.ExigenServices.com 
Features 
Cross-browser 
Object-oriented programming 
Dev-mode 
GUI debugging 
Wigets and declarative UI 
Client Bundle 
Simple localization 
Code optimization 
Code splitting 
RPC, JSON/XML 
UI Designer 
HTML5 
…
16 www.ExigenServices.com 
Features 
Cross-browser 
Object-oriented programming 
Dev-mode 
GUI debugging 
Wigets and declarative UI 
Client Bundle 
Simple localization 
Code optimization 
Code splitting 
RPC, JSON/XML 
UI Designer 
HTML5 
…
17 www.ExigenServices.com 
Features 
Cross-browser 
Object-oriented programming 
Dev-mode 
GUI debugging 
Wigets and declarative UI 
Client Bundle 
Simple localization 
Code optimization 
Code splitting 
RPC, JSON/XML 
UI Designer 
HTML5 
…
18 www.ExigenServices.com 
Features 
Cross-browser 
Object-oriented programming 
Dev-mode 
GUI debugging 
Wigets and declarative UI 
Client Bundle 
Simple localization 
Code optimization 
Code splitting 
RPC, JSON/XML 
UI Designer 
HTML5 
…
19 www.ExigenServices.com 
Features 
Cross-browser 
Object-oriented programming 
Dev-mode 
GUI debugging 
Wigets and declarative UI 
Client Bundle 
Simple localization 
Code optimization 
Code splitting 
RPC, JSON/XML 
UI Designer 
HTML5 
…
20 www.ExigenServices.com 
Features 
Cross-browser 
Object-oriented programming 
Dev-mode 
GUI debugging 
Wigets and declarative UI 
Client Bundle 
Simple localization 
Code optimization 
Code splitting 
RPC, JSON/XML 
UI Designer 
HTML5 
…
21 www.ExigenServices.com 
Features 
Cross-browser 
Object-oriented programming 
Dev-mode 
GUI debugging 
Wigets and declarative UI 
Client Bundle 
Simple localization 
Code optimization 
Code splitting 
RPC, JSON/XML 
UI Designer 
HTML5 
…
22 www.ExigenServices.com 
Features 
Cross-browser 
Object-oriented programming 
Dev-mode 
GUI debugging 
Wigets and declarative UI 
Client Bundle 
Simple localization 
Code optimization 
Code splitting 
RPC, JSON/XML 
UI Designer 
HTML5 
…
23 www.ExigenServices.com 
Features 
Cross-browser 
Object-oriented programming 
Dev-mode 
GUI debugging 
Wigets and declarative UI 
Client Bundle 
Simple localization 
Code optimization 
Code splitting 
RPC, JSON/XML 
UI Designer 
HTML5 
…
24 www.ExigenServices.com 
?
25 www.ExigenServices.com
26 www.ExigenServices.com
27 www.ExigenServices.com 
JSNI 
Java Script Native Interface 
Access JS code from Java code and vice versa
28 www.ExigenServices.com 
JSNI 
Java Script Native Interface 
Access JS code from Java code and vice versa 
Wrap your own or third-party JS-widgets with JSNI: 
• Google Maps 
• Flash objects 
• etc.
29 www.ExigenServices.com 
JSNI 
Java Script Native Interface 
Access JS code from Java code and vice versa 
Wrap your own or third-party JS-widgets with JSNI: 
• Google Maps 
• Flash objects 
• etc. 
Example 1: 
public static native void alert(String msg) 
/*-{ 
$wnd.alert(msg); 
}-*/;
30 www.ExigenServices.com 
JSNI 
Example 2: 
package mypackage; 
public MyClass{ 
public static int foo() 
{ ... } 
public static native void exportStaticMethod() 
/*-{ 
$wnd.foo = $entry(@mypackage.MyClass::foo()); 
}-*/; 
}
31 www.ExigenServices.com 
Deferred binding 
It is a pluggable compile-time type substitution and code generation 
mechanism.
32 www.ExigenServices.com 
Deferred binding 
It is a pluggable compile-time type substitution and code generation 
mechanism. 
Example: 
Static binding 
Foo f = new Foo(); 
Dynamic Binding 
Class c = Class.forName(fooImplName); 
Foo f = (Foo) c.newInstance(); 
Deferred Binding 
Foo f = (Foo) GWT.create(Foo.class);
33 www.ExigenServices.com 
Deferred binding 
Goal - send exactly the right code to client, depending on 
• User’s browser 
• Locale 
• Mode (debug / production) 
• Network characteristics 
• etc.
34 www.ExigenServices.com 
Deferred binding 
Goal - send exactly the right code to client, depending on 
• User’s browser 
• Locale 
• Mode (debug / production) 
• Network characteristics 
• etc. 
Facilities 
• Make fewer Http Requests 
• Eliminate dead code 
• Avoid polymorphic dispatch 
• Avoid synchronous XHR 
• Avoid spaghetti code (if-s in JS-code) 
• Try to use only inline code “elem.innerText = str” 
• etc.
35 www.ExigenServices.com 
Permutations
36 www.ExigenServices.com 
Permutations 
Example: 
Input: 
DOMImpl dom = GWT.create(DOMImpl.class);
37 www.ExigenServices.com 
Permutations 
Example: 
Input: 
DOMImpl dom = GWT.create(DOMImpl.class); 
Implementations: 
DOMImplInternetExplorer 
DOMImplMozilla 
DOMImplOpera 
Property: 
user_agent = “IE”
38 www.ExigenServices.com 
Permutations 
Example: 
Input: 
DOMImpl dom = GWT.create(DOMImpl.class); 
Implementations: 
DOMImplInternetExplorer 
DOMImplMozilla 
DOMImplOpera 
Property: 
user_agent = “IE” 
Output: 
DOM dom = new DOMImplInternetExplorer();
39 www.ExigenServices.com 
Permutations 
Example:
40 www.ExigenServices.com 
Perfect Caching
41 www.ExigenServices.com 
Perfect Caching 
Bootstrap selection script loads Javascript ‘executable’ containing correct set of bindings 
for given request. 
<module>.nocache.js - small 
<md5>.cache.js – big
42 www.ExigenServices.com 
Perfect Caching 
Bootstrap selection script loads Javascript ‘executable’ containing correct set of bindings 
for given request. 
<module>.nocache.js - small 
<md5>.cache.js – big 
Apache HTTP server .htaccess configuration: 
<Files *.nocache.*> 
ExpiresActive on 
ExpiresDefault "now" 
Header merge Cache-Control "public, max-age=0, must-revalidate" 
</Files> 
<Files *.cache.*> 
ExpiresActive on 
ExpiresDefault "now plus 1 year" 
</Files>
43 www.ExigenServices.com 
Monilithic Compilation
44 www.ExigenServices.com 
Monilithic Compilation 
“The fastest code that which does not run”, 
--Joel Webber, GWT co-creator
45 www.ExigenServices.com 
Monilithic Compilation 
“The fastest code that which does not run”, 
--Joel Webber, GWT co-creator 
Example: 
Shape shape = new Square(4); 
1) int area = shape.getArea();
46 www.ExigenServices.com 
Monilithic Compilation 
“The fastest code that which does not run”, 
--Joel Webber, GWT co-creator 
Example: 
Shape shape = new Square(4); 
1) int area = shape.getArea(); 
2) int area = Shape_getArea(shape);
47 www.ExigenServices.com 
Monilithic Compilation 
“The fastest code that which does not run”, 
--Joel Webber, GWT co-creator 
Example: 
Shape shape = new Square(4); 
1) int area = shape.getArea(); 
2) int area = Shape_getArea(shape); 
3) int area = shape.len * shape.len;
48 www.ExigenServices.com 
Monilithic Compilation 
“The fastest code that which does not run”, 
--Joel Webber, GWT co-creator 
Example: 
Shape shape = new Square(4); 
1) int area = shape.getArea(); 
2) int area = Shape_getArea(shape); 
3) int area = shape.len * shape.len; 
4) int area = 16;
49 www.ExigenServices.com 
Client Bundle
50 www.ExigenServices.com 
Client Bundle 
Problem: 
1) HTTP 1.1 limit: 2 outgoing connections per domain/port
51 www.ExigenServices.com 
Client Bundle 
Problem: 
1) HTTP 1.1 limit: 2 outgoing connections per domain/port 
2) HTTP request has to be sent to the server for each resource (e.g. image)
52 www.ExigenServices.com 
Client Bundle 
Problem: 
1) HTTP 1.1 limit: 2 outgoing connections per domain/port 
2) HTTP request has to be sent to the server for each resource (e.g. image) 
3) Request for status 304 ("Not Modified")
53 www.ExigenServices.com 
Client Bundle 
Solution: 
interface Resources extends ClientBundle { 
@Source("logo.png") 
ImageResource logo(); 
@Source("arrow.png") 
@ImageOptions(flipRtl = true) 
ImageResource pointer(); 
}
54 www.ExigenServices.com 
Client Bundle 
Solution: 
interface Resources extends ClientBundle { 
@Source("logo.png") 
ImageResource logo(); 
@Source("arrow.png") 
@ImageOptions(flipRtl = true) 
ImageResource pointer(); 
} 
Resources resources = GWT.create(Resources.class); 
Image img = new Image(resources.logo());
55 www.ExigenServices.com 
Code Splitting 
public class Hello implements EntryPoint { 
public void onModuleLoad() { 
Button b = new Button("Click me", new ClickHandler() { 
public void onClick(ClickEvent event) { 
Window.alert("Hello, AJAX"); 
} 
}); 
RootPanel.get().add(b); 
} 
}
56 www.ExigenServices.com 
Code Splitting 
public class Hello implements EntryPoint { 
public void onModuleLoad() { 
Button b = new Button("Click me", new ClickHandler() { 
public void onClick(ClickEvent event) { 
Window.alert("Hello, AJAX"); 
} 
}); 
RootPanel.get().add(b); 
} 
}
57 www.ExigenServices.com 
Code Splitting 
public class Hello implements EntryPoint { 
public void onModuleLoad() { 
Button b = new Button("Click me", new ClickHandler() { 
public void onClick(ClickEvent event) { 
GWT.runAsync(new RunAsyncCallback() { 
public void onFailure(Throwable caught) { 
Window.alert("Code download failed"); 
} 
public void onSuccess() { 
Window.alert("Hello, AJAX"); 
} 
}); 
} 
}); 
RootPanel.get().add(b); 
} 
}
58 www.ExigenServices.com 
GWT – it is a set of tools 
… 
N+1) UiBinder 
N+2) CellWidgets 
N+3) Activities & Places 
…
59 www.ExigenServices.com 
UiBinder 
Introduced in 2.0 (2010) 
GWT app is a Web Page 
Web page is HTML+CSS 
The best way to do is the easy one: 
1) build your apps as HTML pages with GWT widgets sprinkled 
throughout them 
2) do it more efficient (uses innerHTML, not DOM API calls)
60 www.ExigenServices.com 
UiBinder 
1) Widgets have overhead 
2) Use UiBinder to replace Widgets with HTML 
2.1) when don’t need to respond to events 
2.2) or when events can be caught by a parent Widget 
2.3) caution: can’t add Widgets to HTML elements, so leaf 
Widgets require a parent Widget hierarchy to the top
61 www.ExigenServices.com 
UiBinder – “IS” 
1) helps productivity and maintainability 
2) collaboration with UI designers on theis language 
3) mocking; 
4) separation UI from its behavior 
5) compile-time checking 
6) direct support for internationalization 
7) encourages more efficient use of browser’s power
62 www.ExigenServices.com 
UiBinder – “IS NOT” 
1) it is not a renderer 
2) there are no loops, no conditionals, no if statements in its 
markup, and only a very limited expression language 
3) UiBinder allows you to lay out your user interface. It's still up to 
the widgets or other controllers themselves to convert rows of data 
into rows of HTML
63 www.ExigenServices.com 
UiBinder – “Hello” example 
1) Template (Hello.ui.xml) 
1.1) For this example – it is pure HTML 
1.2) Associate fields: ui:field='name' 
2) Owner class (Hello.java) 
2.1) Declare root (DivElement) and owner (Hello) 
interface MyUiBinder extends UiBinder<DivElement, Hello> 
2.2) Use deffered binding to instanciate it: 
MyUiBinder uiBinder = GWT.create(MyUiBinder.class) 
2.3) Create Element: uiBinder.createAndBindUi(this); 
(todo: show generated code)
64 www.ExigenServices.com 
UiBinder – “Hello” example 
Namespaces 
xmlns:s=“urn:import:com.nimbleteam.gwt.client.mvp.view.uibinder” 
<s:HelloWidget/> 
Method access 
Every one of the widget's methods that follow JavaBean-style 
conventions for setting a property can be used this way. 
1) public void setName(String name) 
public void setValues(String values) 
2) <s:HelloWidget name="default text" 
values="Andrew,Nikita,Yura"/>
65 www.ExigenServices.com 
UiBinder – Panels 
New LayoutPanels more efficient 
1) Layout mostly delegated to browser 
2) Less use of tables (except TabLayoutPanel) 
3) Any panel (or anything that implements HasWidgets) can be 
used in a template file, and can have other panels inside of it. 
4) Can contain only widgets (the restriction may be removed at 
2.4+, workaround: enclose in HTML or HTMLPanel widgets)
66 www.ExigenServices.com 
UiBinder – Panels 
<g:DockLayoutPanel unit='EM'> 
<g:north size='5'> 
<g:Label>Top</g:Label> 
</g:north> 
<g:center> 
<g:Label>Body</g:Label> 
</g:center> 
<g:west size='10'> 
<g:HTML> 
<ul> 
<li>Sidebar</li> 
<li>Sidebar</li> 
</ul> 
</g:HTML> 
</g:west> 
</g:DockLayoutPanel>
67 www.ExigenServices.com 
UiBinder – Event Handling 
Old style: 
titleListBox.addChangeHandler( new ChangeHandler() 
{ 
public void onChange( ChangeEvent event ) 
{ 
Window.alert( "Old style" ); 
} 
} 
); 
New style: 
@UiHandler( "titleListBox" ) 
void titleListBoxValueChanged(ChangeEvent e) 
{ 
Window.alert( "New style" ); 
} 
(you can only use @UiHandler with events thrown by widget objects, not DOM elements)
68 www.ExigenServices.com 
UiBinder – ClientBundle 
It is a way to minimize trips for images, CSS 
Takes all other stuff that makes up your app and inject it into the 
code: 
Images 
CSS 
Text 
or anyhing you need 
Fewer roundtrips 
Built in image spriting 
Name spaces (no global name issues) 
Utilize CSS as engineering tool
69 www.ExigenServices.com 
UiBinder – Resources 
CssResource (see example) 
• ImageResource 
Options: 
1) separate cacheable files 
2) inline base64-encoded data 
3) monolith image (will be sprited) 
• TextResource/ExternalTextResource 
• DataResource (non-text, with provided MIME type)
70 www.ExigenServices.com 
UiBinder – I18n 
Before: 
<div>Hello, world.</div> 
After: 
<div><ui:msg description="Greeting">Hello</ui:msg></div> 
Properties: 
ui:generateFormat, ui:generateKeys, ui:generateLocales 
Result: 
# Description: Greeting 
8B1A9953C4611296A827ABF8C47804D7=Bonjour 
*Some widgets are i18n-ed out of the box (DatePicker)
71 www.ExigenServices.com 
CellWidgets 
Objective: 
In general, all widgets are slow (too much JavaScript) 
Old layout widgets are too static
72 www.ExigenServices.com 
CellWidgets - Features 
High-performance and lightweight (flyweight pattern) 
Renders interface as an HTML string (uses innerHTML, not DOM) 
Can handle events (fewer events == faster) 
Editable (Text, Number, Date-picker, etc.) 
Dataproviders support (sync and async)
73 www.ExigenServices.com 
CellWidgets - Showcase 
CellList, CellTable, DataGrid, CellTree, CellBrowser, … 
CellTable Features: 
Can render large amounts of data efficiently 
Pagination 
Multiple selection 
Sorting 
Keyboard navigation 
Editable cells
74 www.ExigenServices.com 
Activities&Places 
Browser’s history management approach 
Natural place for using code-splitting for UI optimization
75 www.ExigenServices.com 
Activities&Places - Place 
Represents particular state that can be bookmarked 
Provides a way for bidirectional serialization of URL 
(PlaceTokenizer) 
Managed by PlaceController (listens eventBus)
76 www.ExigenServices.com 
Activities&Places - PlaceHistoryMapper 
Declares all the Places available in application 
GWT compiler will link PlaceHistoryHandler with PlaceTokenizer-s 
Example: SamplePlaceHistoryMapper
77 www.ExigenServices.com 
Activities&Places – Use case 1: goTo() 
Program calls to change place -> new place created and 
remembers it’s token
Activities&Places – Use case 2: history event 
User navigates to some URL -> Controller changes the place 
78 www.ExigenServices.com
79 www.ExigenServices.com 
Activities&Places - Activity 
• Represents something the user is doing 
• Contains no Widgets or UI code 
• As some level it can be a “Presenter” in MVP pattern 
• Typical responsibility: 
• restore state ("wake up") 
• perform initialization ("set up") 
• load a corresponding UI ("show up") 
• Started and stopped by an ActivityManager (each per container) 
• May warn user before leaving
80 www.ExigenServices.com 
Activities&Places - ActivityMapper 
Maps each Place to its corresponding Activity 
"if (place instanceof SomePlace) return new SomeActivity(place)" 
Use case 1 – Provides brand new Activity for each call 
Use case 2 – Refreshes previous (singleton) activity
81 www.ExigenServices.com 
Activities&Places - View 
• Part of the UI associated with an Activity 
• Is a Widget (e.g. implements IsWidget interface) 
• Is a View in MVP pattern 
• Has 1 interface and >=1 implementations 
• Support for different views (e.g. desktop/mobile) 
• Easy JUnit testing (mocking) 
• Can be reused (recommended)
82 www.ExigenServices.com 
Activities&Places - Design
83 www.ExigenServices.com 
Sources 
GoogleIO videos: 
http://www.youtube.com/watch?v=g2XclEOJdIc&feature=player_embedded 
http://www.youtube.com/watch?v=0F5zc1UAt2Y&cc=1#t=554s 
http://www.youtube.com/watch?v=qT6ZsQBM7kY&cc=1#t=2084s 
http://www.youtube.com/watch?v=oiNfPjV72lg&feature=related 
Documents: 
http://code.google.com/webtoolkit/doc/latest/DevGuideUi.html 
http://code.google.com/webtoolkit/doc/latest/DevGuideUiBinder.html 
http://code.google.com/webtoolkit/doc/latest/DevGuideUiCellWidgets.html 
http://code.google.com/webtoolkit/doc/latest/DevGuideMvpActivitiesAndPlaces.html
http://www.exigenservices.by/webinars 
84 www.ExigenServices.com 
To be continued…

Más contenido relacionado

La actualidad más candente

Browsers on Android (Webkit,chromium)
Browsers on Android (Webkit,chromium)Browsers on Android (Webkit,chromium)
Browsers on Android (Webkit,chromium)Bin Chen
 
WebKit and Blink: open development powering the HTML5 revolution
WebKit and Blink: open development powering the HTML5 revolutionWebKit and Blink: open development powering the HTML5 revolution
WebKit and Blink: open development powering the HTML5 revolutionjuanjosanchezpenas
 
Android chromium web view
Android chromium web viewAndroid chromium web view
Android chromium web view朋 王
 
Hardware Acceleration in WebKit
Hardware Acceleration in WebKitHardware Acceleration in WebKit
Hardware Acceleration in WebKitJoone Hur
 
Chromium ui framework(shared)
Chromium ui framework(shared)Chromium ui framework(shared)
Chromium ui framework(shared)gnomekr
 
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolution
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 RevolutionWebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolution
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutionjuanjosanchezpenas
 
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008Association Paris-Web
 
The WebView Role in Hybrid Applications
The WebView Role in Hybrid ApplicationsThe WebView Role in Hybrid Applications
The WebView Role in Hybrid ApplicationsHaim Michael
 
HTML5 and Beyond
HTML5 and BeyondHTML5 and Beyond
HTML5 and Beyonddynamis
 
Chrome Internals: Paint and Composition
Chrome Internals: Paint and CompositionChrome Internals: Paint and Composition
Chrome Internals: Paint and CompositionDzmitry Varabei
 
LCU14 208- Chromium-Blink Migration for RDK
LCU14 208- Chromium-Blink Migration for RDKLCU14 208- Chromium-Blink Migration for RDK
LCU14 208- Chromium-Blink Migration for RDKLinaro
 
GWT + Gears : The browser is the platform
GWT + Gears : The browser is the platformGWT + Gears : The browser is the platform
GWT + Gears : The browser is the platformDidier Girard
 
Rp 6 session 2 naresh bhatia
Rp 6  session 2 naresh bhatiaRp 6  session 2 naresh bhatia
Rp 6 session 2 naresh bhatiasapientindia
 
Korea linuxforum2014 html5game-sangseoklim
Korea linuxforum2014 html5game-sangseoklimKorea linuxforum2014 html5game-sangseoklim
Korea linuxforum2014 html5game-sangseoklimSang Seok Lim
 
HTML5 & CSS3 Workshop [FoWD NYC 2011]
HTML5 & CSS3 Workshop [FoWD NYC 2011]HTML5 & CSS3 Workshop [FoWD NYC 2011]
HTML5 & CSS3 Workshop [FoWD NYC 2011]Aaron Gustafson
 
Lessons from Contributing to WebKit and Blink
Lessons from Contributing to WebKit and BlinkLessons from Contributing to WebKit and Blink
Lessons from Contributing to WebKit and BlinkBruno Abinader
 
Web Components the best marriage for a PWA
Web Components the best marriage for a PWAWeb Components the best marriage for a PWA
Web Components the best marriage for a PWAManuel Carrasco Moñino
 
Consumer Driven Contracts and Your Microservice Architecture
Consumer Driven Contracts and Your Microservice ArchitectureConsumer Driven Contracts and Your Microservice Architecture
Consumer Driven Contracts and Your Microservice ArchitectureVMware Tanzu
 
Building modular monoliths that could scale to microservices (only if they ne...
Building modular monoliths that could scale to microservices (only if they ne...Building modular monoliths that could scale to microservices (only if they ne...
Building modular monoliths that could scale to microservices (only if they ne...David Gómez García
 

La actualidad más candente (19)

Browsers on Android (Webkit,chromium)
Browsers on Android (Webkit,chromium)Browsers on Android (Webkit,chromium)
Browsers on Android (Webkit,chromium)
 
WebKit and Blink: open development powering the HTML5 revolution
WebKit and Blink: open development powering the HTML5 revolutionWebKit and Blink: open development powering the HTML5 revolution
WebKit and Blink: open development powering the HTML5 revolution
 
Android chromium web view
Android chromium web viewAndroid chromium web view
Android chromium web view
 
Hardware Acceleration in WebKit
Hardware Acceleration in WebKitHardware Acceleration in WebKit
Hardware Acceleration in WebKit
 
Chromium ui framework(shared)
Chromium ui framework(shared)Chromium ui framework(shared)
Chromium ui framework(shared)
 
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolution
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 RevolutionWebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolution
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolution
 
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
 
The WebView Role in Hybrid Applications
The WebView Role in Hybrid ApplicationsThe WebView Role in Hybrid Applications
The WebView Role in Hybrid Applications
 
HTML5 and Beyond
HTML5 and BeyondHTML5 and Beyond
HTML5 and Beyond
 
Chrome Internals: Paint and Composition
Chrome Internals: Paint and CompositionChrome Internals: Paint and Composition
Chrome Internals: Paint and Composition
 
LCU14 208- Chromium-Blink Migration for RDK
LCU14 208- Chromium-Blink Migration for RDKLCU14 208- Chromium-Blink Migration for RDK
LCU14 208- Chromium-Blink Migration for RDK
 
GWT + Gears : The browser is the platform
GWT + Gears : The browser is the platformGWT + Gears : The browser is the platform
GWT + Gears : The browser is the platform
 
Rp 6 session 2 naresh bhatia
Rp 6  session 2 naresh bhatiaRp 6  session 2 naresh bhatia
Rp 6 session 2 naresh bhatia
 
Korea linuxforum2014 html5game-sangseoklim
Korea linuxforum2014 html5game-sangseoklimKorea linuxforum2014 html5game-sangseoklim
Korea linuxforum2014 html5game-sangseoklim
 
HTML5 & CSS3 Workshop [FoWD NYC 2011]
HTML5 & CSS3 Workshop [FoWD NYC 2011]HTML5 & CSS3 Workshop [FoWD NYC 2011]
HTML5 & CSS3 Workshop [FoWD NYC 2011]
 
Lessons from Contributing to WebKit and Blink
Lessons from Contributing to WebKit and BlinkLessons from Contributing to WebKit and Blink
Lessons from Contributing to WebKit and Blink
 
Web Components the best marriage for a PWA
Web Components the best marriage for a PWAWeb Components the best marriage for a PWA
Web Components the best marriage for a PWA
 
Consumer Driven Contracts and Your Microservice Architecture
Consumer Driven Contracts and Your Microservice ArchitectureConsumer Driven Contracts and Your Microservice Architecture
Consumer Driven Contracts and Your Microservice Architecture
 
Building modular monoliths that could scale to microservices (only if they ne...
Building modular monoliths that could scale to microservices (only if they ne...Building modular monoliths that could scale to microservices (only if they ne...
Building modular monoliths that could scale to microservices (only if they ne...
 

Destacado

Unit Tests? It is Very Simple and Easy!
Unit Tests? It is Very Simple and Easy!Unit Tests? It is Very Simple and Easy!
Unit Tests? It is Very Simple and Easy!Return on Intelligence
 
Facilitating the Future
Facilitating the FutureFacilitating the Future
Facilitating the FutureStuart Liddell
 
Концепция ДК "Кружковое движение"
Концепция ДК "Кружковое движение"Концепция ДК "Кружковое движение"
Концепция ДК "Кружковое движение"Dmitry Zemtsov
 
Анна Слюсаренко Особенности ребрендинга банка. На примере UniCreditBank
Анна Слюсаренко Особенности ребрендинга банка. На примере UniCreditBankАнна Слюсаренко Особенности ребрендинга банка. На примере UniCreditBank
Анна Слюсаренко Особенности ребрендинга банка. На примере UniCreditBankLoyalty Plant Ukraine
 
Дорожная карта по кружкам (версия 3)
Дорожная карта по кружкам (версия 3)Дорожная карта по кружкам (версия 3)
Дорожная карта по кружкам (версия 3)Dmitry Zemtsov
 
Distributed Agile, What types of Agile to use
Distributed Agile, What types of Agile to useDistributed Agile, What types of Agile to use
Distributed Agile, What types of Agile to useReturn on Intelligence
 
Бизнес как платформа
Бизнес как платформаБизнес как платформа
Бизнес как платформаValery Khvatov
 
2015 03 26 morozov nti presentation
2015 03 26 morozov nti presentation2015 03 26 morozov nti presentation
2015 03 26 morozov nti presentationLinkWest Group
 
Morozov pavel отчет foodnet btl
Morozov pavel отчет foodnet btlMorozov pavel отчет foodnet btl
Morozov pavel отчет foodnet btlLinkWest Group
 
LinkWest Group Presentation
LinkWest Group PresentationLinkWest Group Presentation
LinkWest Group PresentationLinkWest Group
 
Национальная технологическая инициатива
Национальная технологическая инициативаНациональная технологическая инициатива
Национальная технологическая инициативаAtner Yegorov
 
Тестирование бизнес-идей (Анна Лопатухина, Agile Museum)
Тестирование бизнес-идей (Анна Лопатухина, Agile Museum)Тестирование бизнес-идей (Анна Лопатухина, Agile Museum)
Тестирование бизнес-идей (Анна Лопатухина, Agile Museum)PCampRussia
 
Концепция банка будущего
Концепция банка будущегоКонцепция банка будущего
Концепция банка будущегоTimofey Golovin
 
Дмитрий Роденко Проблемы и перспективы маркетинговых исследований в банковско...
Дмитрий Роденко Проблемы и перспективы маркетинговых исследований в банковско...Дмитрий Роденко Проблемы и перспективы маркетинговых исследований в банковско...
Дмитрий Роденко Проблемы и перспективы маркетинговых исследований в банковско...Loyalty Plant Ukraine
 
Дорожная карта по кружкам (версия 2)
Дорожная карта по кружкам (версия 2)Дорожная карта по кружкам (версия 2)
Дорожная карта по кружкам (версия 2)Dmitry Zemtsov
 
Дорожная карта "Кружковое движение НТИ" (версия 7)
Дорожная карта "Кружковое движение НТИ" (версия 7)Дорожная карта "Кружковое движение НТИ" (версия 7)
Дорожная карта "Кружковое движение НТИ" (версия 7)Dmitry Zemtsov
 
Применение методологий Lean Startup & Customer Development для разработки нов...
Применение методологий Lean Startup & Customer Development для разработки нов...Применение методологий Lean Startup & Customer Development для разработки нов...
Применение методологий Lean Startup & Customer Development для разработки нов...MetaBeta
 
Lean Startup Russia 2015. Илья Королёв
Lean Startup Russia 2015. Илья КоролёвLean Startup Russia 2015. Илья Королёв
Lean Startup Russia 2015. Илья КоролёвLPgenerator
 

Destacado (20)

Unit Tests? It is Very Simple and Easy!
Unit Tests? It is Very Simple and Easy!Unit Tests? It is Very Simple and Easy!
Unit Tests? It is Very Simple and Easy!
 
Quick Start to AngularJS
Quick Start to AngularJSQuick Start to AngularJS
Quick Start to AngularJS
 
Facilitating the Future
Facilitating the FutureFacilitating the Future
Facilitating the Future
 
Концепция ДК "Кружковое движение"
Концепция ДК "Кружковое движение"Концепция ДК "Кружковое движение"
Концепция ДК "Кружковое движение"
 
Анна Слюсаренко Особенности ребрендинга банка. На примере UniCreditBank
Анна Слюсаренко Особенности ребрендинга банка. На примере UniCreditBankАнна Слюсаренко Особенности ребрендинга банка. На примере UniCreditBank
Анна Слюсаренко Особенности ребрендинга банка. На примере UniCreditBank
 
Дорожная карта по кружкам (версия 3)
Дорожная карта по кружкам (версия 3)Дорожная карта по кружкам (версия 3)
Дорожная карта по кружкам (версия 3)
 
Distributed Agile, What types of Agile to use
Distributed Agile, What types of Agile to useDistributed Agile, What types of Agile to use
Distributed Agile, What types of Agile to use
 
Бизнес как платформа
Бизнес как платформаБизнес как платформа
Бизнес как платформа
 
2015 03 26 morozov nti presentation
2015 03 26 morozov nti presentation2015 03 26 morozov nti presentation
2015 03 26 morozov nti presentation
 
Morozov pavel отчет foodnet btl
Morozov pavel отчет foodnet btlMorozov pavel отчет foodnet btl
Morozov pavel отчет foodnet btl
 
LinkWest Group Presentation
LinkWest Group PresentationLinkWest Group Presentation
LinkWest Group Presentation
 
Национальная технологическая инициатива
Национальная технологическая инициативаНациональная технологическая инициатива
Национальная технологическая инициатива
 
Тестирование бизнес-идей (Анна Лопатухина, Agile Museum)
Тестирование бизнес-идей (Анна Лопатухина, Agile Museum)Тестирование бизнес-идей (Анна Лопатухина, Agile Museum)
Тестирование бизнес-идей (Анна Лопатухина, Agile Museum)
 
Будущее и настоящее денег. Аналитика и тренды
Будущее и настоящее денег. Аналитика и трендыБудущее и настоящее денег. Аналитика и тренды
Будущее и настоящее денег. Аналитика и тренды
 
Концепция банка будущего
Концепция банка будущегоКонцепция банка будущего
Концепция банка будущего
 
Дмитрий Роденко Проблемы и перспективы маркетинговых исследований в банковско...
Дмитрий Роденко Проблемы и перспективы маркетинговых исследований в банковско...Дмитрий Роденко Проблемы и перспективы маркетинговых исследований в банковско...
Дмитрий Роденко Проблемы и перспективы маркетинговых исследований в банковско...
 
Дорожная карта по кружкам (версия 2)
Дорожная карта по кружкам (версия 2)Дорожная карта по кружкам (версия 2)
Дорожная карта по кружкам (версия 2)
 
Дорожная карта "Кружковое движение НТИ" (версия 7)
Дорожная карта "Кружковое движение НТИ" (версия 7)Дорожная карта "Кружковое движение НТИ" (версия 7)
Дорожная карта "Кружковое движение НТИ" (версия 7)
 
Применение методологий Lean Startup & Customer Development для разработки нов...
Применение методологий Lean Startup & Customer Development для разработки нов...Применение методологий Lean Startup & Customer Development для разработки нов...
Применение методологий Lean Startup & Customer Development для разработки нов...
 
Lean Startup Russia 2015. Илья Королёв
Lean Startup Russia 2015. Илья КоролёвLean Startup Russia 2015. Илья Королёв
Lean Startup Russia 2015. Илья Королёв
 

Similar a Gwt Deep Dive

Crosswalk and the Intel XDK
Crosswalk and the Intel XDKCrosswalk and the Intel XDK
Crosswalk and the Intel XDKIntel® Software
 
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)Saltlux zinyus
 
전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)zinyus
 
Easing offline web application development with GWT
Easing offline web application development with GWTEasing offline web application development with GWT
Easing offline web application development with GWTArnaud Tournier
 
Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5Ganesh Kondal
 
Mobile Web Apps and the Intel® XDK
Mobile Web Apps and the Intel® XDKMobile Web Apps and the Intel® XDK
Mobile Web Apps and the Intel® XDKIntel® Software
 
Phonegap android angualr material design
Phonegap android angualr material designPhonegap android angualr material design
Phonegap android angualr material designSrinadh Kanugala
 
Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2JooinK
 
qooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Frameworkqooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Frameworkecker
 
Mobile Web Applications using HTML5 [IndicThreads Mobile Application Develop...
Mobile Web Applications using HTML5  [IndicThreads Mobile Application Develop...Mobile Web Applications using HTML5  [IndicThreads Mobile Application Develop...
Mobile Web Applications using HTML5 [IndicThreads Mobile Application Develop...IndicThreads
 
A164 enterprise javascript ibm node sdk
A164 enterprise javascript ibm node sdkA164 enterprise javascript ibm node sdk
A164 enterprise javascript ibm node sdkToby Corbin
 
Front-end. Global domination
Front-end. Global dominationFront-end. Global domination
Front-end. Global dominationStfalcon Meetups
 
Micro-Frontends JSVidCon
Micro-Frontends JSVidConMicro-Frontends JSVidCon
Micro-Frontends JSVidConAmir Zuker
 
Convert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hour
Convert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hourConvert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hour
Convert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hourBrian Culver
 
GWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO ToolsGWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO Toolsbarciszewski
 
Gwt session
Gwt sessionGwt session
Gwt sessionMans Jug
 
Add the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitAdd the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitIgalia
 

Similar a Gwt Deep Dive (20)

Crosswalk and the Intel XDK
Crosswalk and the Intel XDKCrosswalk and the Intel XDK
Crosswalk and the Intel XDK
 
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
 
전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가 토크릴레이 1탄 html5 전망 (전종홍 박사)
 
Easing offline web application development with GWT
Easing offline web application development with GWTEasing offline web application development with GWT
Easing offline web application development with GWT
 
Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5
 
Mobile Web Apps and the Intel® XDK
Mobile Web Apps and the Intel® XDKMobile Web Apps and the Intel® XDK
Mobile Web Apps and the Intel® XDK
 
Kunal bhatia resume mass
Kunal bhatia   resume massKunal bhatia   resume mass
Kunal bhatia resume mass
 
Phonegap android angualr material design
Phonegap android angualr material designPhonegap android angualr material design
Phonegap android angualr material design
 
Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2
 
qooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Frameworkqooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Framework
 
Mobile Web Applications using HTML5 [IndicThreads Mobile Application Develop...
Mobile Web Applications using HTML5  [IndicThreads Mobile Application Develop...Mobile Web Applications using HTML5  [IndicThreads Mobile Application Develop...
Mobile Web Applications using HTML5 [IndicThreads Mobile Application Develop...
 
A164 enterprise javascript ibm node sdk
A164 enterprise javascript ibm node sdkA164 enterprise javascript ibm node sdk
A164 enterprise javascript ibm node sdk
 
Front-end. Global domination
Front-end. Global dominationFront-end. Global domination
Front-end. Global domination
 
Frontend. Global domination.
Frontend. Global domination.Frontend. Global domination.
Frontend. Global domination.
 
Micro-Frontends JSVidCon
Micro-Frontends JSVidConMicro-Frontends JSVidCon
Micro-Frontends JSVidCon
 
Convert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hour
Convert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hourConvert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hour
Convert your Full Trust Solutions to the SharePoint Framework (SPFx) in 1 hour
 
GWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO ToolsGWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO Tools
 
AEM 6.X (With Basics) Training Syllabus
AEM 6.X (With Basics) Training SyllabusAEM 6.X (With Basics) Training Syllabus
AEM 6.X (With Basics) Training Syllabus
 
Gwt session
Gwt sessionGwt session
Gwt session
 
Add the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitAdd the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKit
 

Más de Return on Intelligence

Introduction to Backbone.js & Marionette.js
Introduction to Backbone.js & Marionette.jsIntroduction to Backbone.js & Marionette.js
Introduction to Backbone.js & Marionette.jsReturn on Intelligence
 
Types of testing and their classification
Types of testing and their classificationTypes of testing and their classification
Types of testing and their classificationReturn on Intelligence
 
Apache cassandra - future without boundaries (part3)
Apache cassandra - future without boundaries (part3)Apache cassandra - future without boundaries (part3)
Apache cassandra - future without boundaries (part3)Return on Intelligence
 
Apache cassandra - future without boundaries (part2)
Apache cassandra - future without boundaries (part2)Apache cassandra - future without boundaries (part2)
Apache cassandra - future without boundaries (part2)Return on Intelligence
 
Apache cassandra - future without boundaries (part1)
Apache cassandra - future without boundaries (part1)Apache cassandra - future without boundaries (part1)
Apache cassandra - future without boundaries (part1)Return on Intelligence
 

Más de Return on Intelligence (20)

Clean Code Approach
Clean Code ApproachClean Code Approach
Clean Code Approach
 
Code Coverage
Code CoverageCode Coverage
Code Coverage
 
Effective Communication in english
Effective Communication in englishEffective Communication in english
Effective Communication in english
 
Anti-patterns
Anti-patternsAnti-patterns
Anti-patterns
 
Conflicts Resolving
Conflicts ResolvingConflicts Resolving
Conflicts Resolving
 
Database versioning with liquibase
Database versioning with liquibaseDatabase versioning with liquibase
Database versioning with liquibase
 
Effective Feedback
Effective FeedbackEffective Feedback
Effective Feedback
 
English for Negotiations 2016
English for Negotiations 2016English for Negotiations 2016
English for Negotiations 2016
 
Lean Software Development
Lean Software DevelopmentLean Software Development
Lean Software Development
 
Introduction to Backbone.js & Marionette.js
Introduction to Backbone.js & Marionette.jsIntroduction to Backbone.js & Marionette.js
Introduction to Backbone.js & Marionette.js
 
Types of testing and their classification
Types of testing and their classificationTypes of testing and their classification
Types of testing and their classification
 
Introduction to EJB
Introduction to EJBIntroduction to EJB
Introduction to EJB
 
Enterprise Service Bus
Enterprise Service BusEnterprise Service Bus
Enterprise Service Bus
 
Apache cassandra - future without boundaries (part3)
Apache cassandra - future without boundaries (part3)Apache cassandra - future without boundaries (part3)
Apache cassandra - future without boundaries (part3)
 
Apache cassandra - future without boundaries (part2)
Apache cassandra - future without boundaries (part2)Apache cassandra - future without boundaries (part2)
Apache cassandra - future without boundaries (part2)
 
Apache cassandra - future without boundaries (part1)
Apache cassandra - future without boundaries (part1)Apache cassandra - future without boundaries (part1)
Apache cassandra - future without boundaries (part1)
 
Career development in exigen services
Career development in exigen servicesCareer development in exigen services
Career development in exigen services
 
Introduction to selenium web driver
Introduction to selenium web driverIntroduction to selenium web driver
Introduction to selenium web driver
 
Enterprise service bus part 2
Enterprise service bus part 2Enterprise service bus part 2
Enterprise service bus part 2
 
Enterprise service bus part 1
Enterprise service bus part 1Enterprise service bus part 1
Enterprise service bus part 1
 

Último

Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfYashikaSharma391629
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...Akihiro Suda
 

Último (20)

Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
 

Gwt Deep Dive

  • 1. GWT Deep Dive Part 1: UiBinder, CellWidgets, Activities&Places Andrey Mormysh Java Developer a.mormysh@gmail.com November 02, 2011 www.ExigenServices.com
  • 2. GWT Google Web Toolkit 2 www.ExigenServices.com
  • 3. GWT /ˈɡwɪt / Google Web Toolkit 3 www.ExigenServices.com
  • 5. 5 www.ExigenServices.com GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration
  • 6. 6 www.ExigenServices.com GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration  Odnoklassniki (http://www.odnoklassniki.ru) - social network
  • 7. 7 www.ExigenServices.com GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration  Odnoklassniki (http://www.odnoklassniki.ru) - social network  Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events
  • 8. 8 www.ExigenServices.com GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration  Odnoklassniki (http://www.odnoklassniki.ru) - social network  Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events  Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider which enables you to deploy and scale load-balanced cloud server networks via a unique multi-server control panel.
  • 9. 9 www.ExigenServices.com GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration  Odnoklassniki (http://www.odnoklassniki.ru) - social network  Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events  Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider which enables you to deploy and scale load-balanced cloud server networks via a unique multi-server control panel.  Blueprint (https://blueprint.lombardi.com/index.html) - business process mapping tool
  • 10. 10 www.ExigenServices.com GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration  Odnoklassniki (http://www.odnoklassniki.ru) - social network  Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events  Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider which enables you to deploy and scale load-balanced cloud server networks via a unique multi-server control panel.  Blueprint (https://blueprint.lombardi.com/index.html) - business process mapping tool  Scenechronize (https://www.scenechronize.com/) - a production management web application for film, television and commercials
  • 11. 11 www.ExigenServices.com GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration  Odnoklassniki (http://www.odnoklassniki.ru) - social network  Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events  Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider which enables you to deploy and scale load-balanced cloud server networks via a unique multi-server control panel.  Blueprint (https://blueprint.lombardi.com/index.html) - business process mapping tool  Scenechronize (https://www.scenechronize.com/) - a production management web application for film, television and commercials  Whirled (http://www.whirled.com/) - social virtual world website which includes multi-player games etc…
  • 12. 12 www.ExigenServices.com Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 …
  • 13. 13 www.ExigenServices.com Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 …
  • 14. 14 www.ExigenServices.com Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 …
  • 15. 15 www.ExigenServices.com Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 …
  • 16. 16 www.ExigenServices.com Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 …
  • 17. 17 www.ExigenServices.com Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 …
  • 18. 18 www.ExigenServices.com Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 …
  • 19. 19 www.ExigenServices.com Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 …
  • 20. 20 www.ExigenServices.com Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 …
  • 21. 21 www.ExigenServices.com Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 …
  • 22. 22 www.ExigenServices.com Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 …
  • 23. 23 www.ExigenServices.com Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 …
  • 27. 27 www.ExigenServices.com JSNI Java Script Native Interface Access JS code from Java code and vice versa
  • 28. 28 www.ExigenServices.com JSNI Java Script Native Interface Access JS code from Java code and vice versa Wrap your own or third-party JS-widgets with JSNI: • Google Maps • Flash objects • etc.
  • 29. 29 www.ExigenServices.com JSNI Java Script Native Interface Access JS code from Java code and vice versa Wrap your own or third-party JS-widgets with JSNI: • Google Maps • Flash objects • etc. Example 1: public static native void alert(String msg) /*-{ $wnd.alert(msg); }-*/;
  • 30. 30 www.ExigenServices.com JSNI Example 2: package mypackage; public MyClass{ public static int foo() { ... } public static native void exportStaticMethod() /*-{ $wnd.foo = $entry(@mypackage.MyClass::foo()); }-*/; }
  • 31. 31 www.ExigenServices.com Deferred binding It is a pluggable compile-time type substitution and code generation mechanism.
  • 32. 32 www.ExigenServices.com Deferred binding It is a pluggable compile-time type substitution and code generation mechanism. Example: Static binding Foo f = new Foo(); Dynamic Binding Class c = Class.forName(fooImplName); Foo f = (Foo) c.newInstance(); Deferred Binding Foo f = (Foo) GWT.create(Foo.class);
  • 33. 33 www.ExigenServices.com Deferred binding Goal - send exactly the right code to client, depending on • User’s browser • Locale • Mode (debug / production) • Network characteristics • etc.
  • 34. 34 www.ExigenServices.com Deferred binding Goal - send exactly the right code to client, depending on • User’s browser • Locale • Mode (debug / production) • Network characteristics • etc. Facilities • Make fewer Http Requests • Eliminate dead code • Avoid polymorphic dispatch • Avoid synchronous XHR • Avoid spaghetti code (if-s in JS-code) • Try to use only inline code “elem.innerText = str” • etc.
  • 36. 36 www.ExigenServices.com Permutations Example: Input: DOMImpl dom = GWT.create(DOMImpl.class);
  • 37. 37 www.ExigenServices.com Permutations Example: Input: DOMImpl dom = GWT.create(DOMImpl.class); Implementations: DOMImplInternetExplorer DOMImplMozilla DOMImplOpera Property: user_agent = “IE”
  • 38. 38 www.ExigenServices.com Permutations Example: Input: DOMImpl dom = GWT.create(DOMImpl.class); Implementations: DOMImplInternetExplorer DOMImplMozilla DOMImplOpera Property: user_agent = “IE” Output: DOM dom = new DOMImplInternetExplorer();
  • 41. 41 www.ExigenServices.com Perfect Caching Bootstrap selection script loads Javascript ‘executable’ containing correct set of bindings for given request. <module>.nocache.js - small <md5>.cache.js – big
  • 42. 42 www.ExigenServices.com Perfect Caching Bootstrap selection script loads Javascript ‘executable’ containing correct set of bindings for given request. <module>.nocache.js - small <md5>.cache.js – big Apache HTTP server .htaccess configuration: <Files *.nocache.*> ExpiresActive on ExpiresDefault "now" Header merge Cache-Control "public, max-age=0, must-revalidate" </Files> <Files *.cache.*> ExpiresActive on ExpiresDefault "now plus 1 year" </Files>
  • 44. 44 www.ExigenServices.com Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator
  • 45. 45 www.ExigenServices.com Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator Example: Shape shape = new Square(4); 1) int area = shape.getArea();
  • 46. 46 www.ExigenServices.com Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator Example: Shape shape = new Square(4); 1) int area = shape.getArea(); 2) int area = Shape_getArea(shape);
  • 47. 47 www.ExigenServices.com Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator Example: Shape shape = new Square(4); 1) int area = shape.getArea(); 2) int area = Shape_getArea(shape); 3) int area = shape.len * shape.len;
  • 48. 48 www.ExigenServices.com Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator Example: Shape shape = new Square(4); 1) int area = shape.getArea(); 2) int area = Shape_getArea(shape); 3) int area = shape.len * shape.len; 4) int area = 16;
  • 50. 50 www.ExigenServices.com Client Bundle Problem: 1) HTTP 1.1 limit: 2 outgoing connections per domain/port
  • 51. 51 www.ExigenServices.com Client Bundle Problem: 1) HTTP 1.1 limit: 2 outgoing connections per domain/port 2) HTTP request has to be sent to the server for each resource (e.g. image)
  • 52. 52 www.ExigenServices.com Client Bundle Problem: 1) HTTP 1.1 limit: 2 outgoing connections per domain/port 2) HTTP request has to be sent to the server for each resource (e.g. image) 3) Request for status 304 ("Not Modified")
  • 53. 53 www.ExigenServices.com Client Bundle Solution: interface Resources extends ClientBundle { @Source("logo.png") ImageResource logo(); @Source("arrow.png") @ImageOptions(flipRtl = true) ImageResource pointer(); }
  • 54. 54 www.ExigenServices.com Client Bundle Solution: interface Resources extends ClientBundle { @Source("logo.png") ImageResource logo(); @Source("arrow.png") @ImageOptions(flipRtl = true) ImageResource pointer(); } Resources resources = GWT.create(Resources.class); Image img = new Image(resources.logo());
  • 55. 55 www.ExigenServices.com Code Splitting public class Hello implements EntryPoint { public void onModuleLoad() { Button b = new Button("Click me", new ClickHandler() { public void onClick(ClickEvent event) { Window.alert("Hello, AJAX"); } }); RootPanel.get().add(b); } }
  • 56. 56 www.ExigenServices.com Code Splitting public class Hello implements EntryPoint { public void onModuleLoad() { Button b = new Button("Click me", new ClickHandler() { public void onClick(ClickEvent event) { Window.alert("Hello, AJAX"); } }); RootPanel.get().add(b); } }
  • 57. 57 www.ExigenServices.com Code Splitting public class Hello implements EntryPoint { public void onModuleLoad() { Button b = new Button("Click me", new ClickHandler() { public void onClick(ClickEvent event) { GWT.runAsync(new RunAsyncCallback() { public void onFailure(Throwable caught) { Window.alert("Code download failed"); } public void onSuccess() { Window.alert("Hello, AJAX"); } }); } }); RootPanel.get().add(b); } }
  • 58. 58 www.ExigenServices.com GWT – it is a set of tools … N+1) UiBinder N+2) CellWidgets N+3) Activities & Places …
  • 59. 59 www.ExigenServices.com UiBinder Introduced in 2.0 (2010) GWT app is a Web Page Web page is HTML+CSS The best way to do is the easy one: 1) build your apps as HTML pages with GWT widgets sprinkled throughout them 2) do it more efficient (uses innerHTML, not DOM API calls)
  • 60. 60 www.ExigenServices.com UiBinder 1) Widgets have overhead 2) Use UiBinder to replace Widgets with HTML 2.1) when don’t need to respond to events 2.2) or when events can be caught by a parent Widget 2.3) caution: can’t add Widgets to HTML elements, so leaf Widgets require a parent Widget hierarchy to the top
  • 61. 61 www.ExigenServices.com UiBinder – “IS” 1) helps productivity and maintainability 2) collaboration with UI designers on theis language 3) mocking; 4) separation UI from its behavior 5) compile-time checking 6) direct support for internationalization 7) encourages more efficient use of browser’s power
  • 62. 62 www.ExigenServices.com UiBinder – “IS NOT” 1) it is not a renderer 2) there are no loops, no conditionals, no if statements in its markup, and only a very limited expression language 3) UiBinder allows you to lay out your user interface. It's still up to the widgets or other controllers themselves to convert rows of data into rows of HTML
  • 63. 63 www.ExigenServices.com UiBinder – “Hello” example 1) Template (Hello.ui.xml) 1.1) For this example – it is pure HTML 1.2) Associate fields: ui:field='name' 2) Owner class (Hello.java) 2.1) Declare root (DivElement) and owner (Hello) interface MyUiBinder extends UiBinder<DivElement, Hello> 2.2) Use deffered binding to instanciate it: MyUiBinder uiBinder = GWT.create(MyUiBinder.class) 2.3) Create Element: uiBinder.createAndBindUi(this); (todo: show generated code)
  • 64. 64 www.ExigenServices.com UiBinder – “Hello” example Namespaces xmlns:s=“urn:import:com.nimbleteam.gwt.client.mvp.view.uibinder” <s:HelloWidget/> Method access Every one of the widget's methods that follow JavaBean-style conventions for setting a property can be used this way. 1) public void setName(String name) public void setValues(String values) 2) <s:HelloWidget name="default text" values="Andrew,Nikita,Yura"/>
  • 65. 65 www.ExigenServices.com UiBinder – Panels New LayoutPanels more efficient 1) Layout mostly delegated to browser 2) Less use of tables (except TabLayoutPanel) 3) Any panel (or anything that implements HasWidgets) can be used in a template file, and can have other panels inside of it. 4) Can contain only widgets (the restriction may be removed at 2.4+, workaround: enclose in HTML or HTMLPanel widgets)
  • 66. 66 www.ExigenServices.com UiBinder – Panels <g:DockLayoutPanel unit='EM'> <g:north size='5'> <g:Label>Top</g:Label> </g:north> <g:center> <g:Label>Body</g:Label> </g:center> <g:west size='10'> <g:HTML> <ul> <li>Sidebar</li> <li>Sidebar</li> </ul> </g:HTML> </g:west> </g:DockLayoutPanel>
  • 67. 67 www.ExigenServices.com UiBinder – Event Handling Old style: titleListBox.addChangeHandler( new ChangeHandler() { public void onChange( ChangeEvent event ) { Window.alert( "Old style" ); } } ); New style: @UiHandler( "titleListBox" ) void titleListBoxValueChanged(ChangeEvent e) { Window.alert( "New style" ); } (you can only use @UiHandler with events thrown by widget objects, not DOM elements)
  • 68. 68 www.ExigenServices.com UiBinder – ClientBundle It is a way to minimize trips for images, CSS Takes all other stuff that makes up your app and inject it into the code: Images CSS Text or anyhing you need Fewer roundtrips Built in image spriting Name spaces (no global name issues) Utilize CSS as engineering tool
  • 69. 69 www.ExigenServices.com UiBinder – Resources CssResource (see example) • ImageResource Options: 1) separate cacheable files 2) inline base64-encoded data 3) monolith image (will be sprited) • TextResource/ExternalTextResource • DataResource (non-text, with provided MIME type)
  • 70. 70 www.ExigenServices.com UiBinder – I18n Before: <div>Hello, world.</div> After: <div><ui:msg description="Greeting">Hello</ui:msg></div> Properties: ui:generateFormat, ui:generateKeys, ui:generateLocales Result: # Description: Greeting 8B1A9953C4611296A827ABF8C47804D7=Bonjour *Some widgets are i18n-ed out of the box (DatePicker)
  • 71. 71 www.ExigenServices.com CellWidgets Objective: In general, all widgets are slow (too much JavaScript) Old layout widgets are too static
  • 72. 72 www.ExigenServices.com CellWidgets - Features High-performance and lightweight (flyweight pattern) Renders interface as an HTML string (uses innerHTML, not DOM) Can handle events (fewer events == faster) Editable (Text, Number, Date-picker, etc.) Dataproviders support (sync and async)
  • 73. 73 www.ExigenServices.com CellWidgets - Showcase CellList, CellTable, DataGrid, CellTree, CellBrowser, … CellTable Features: Can render large amounts of data efficiently Pagination Multiple selection Sorting Keyboard navigation Editable cells
  • 74. 74 www.ExigenServices.com Activities&Places Browser’s history management approach Natural place for using code-splitting for UI optimization
  • 75. 75 www.ExigenServices.com Activities&Places - Place Represents particular state that can be bookmarked Provides a way for bidirectional serialization of URL (PlaceTokenizer) Managed by PlaceController (listens eventBus)
  • 76. 76 www.ExigenServices.com Activities&Places - PlaceHistoryMapper Declares all the Places available in application GWT compiler will link PlaceHistoryHandler with PlaceTokenizer-s Example: SamplePlaceHistoryMapper
  • 77. 77 www.ExigenServices.com Activities&Places – Use case 1: goTo() Program calls to change place -> new place created and remembers it’s token
  • 78. Activities&Places – Use case 2: history event User navigates to some URL -> Controller changes the place 78 www.ExigenServices.com
  • 79. 79 www.ExigenServices.com Activities&Places - Activity • Represents something the user is doing • Contains no Widgets or UI code • As some level it can be a “Presenter” in MVP pattern • Typical responsibility: • restore state ("wake up") • perform initialization ("set up") • load a corresponding UI ("show up") • Started and stopped by an ActivityManager (each per container) • May warn user before leaving
  • 80. 80 www.ExigenServices.com Activities&Places - ActivityMapper Maps each Place to its corresponding Activity "if (place instanceof SomePlace) return new SomeActivity(place)" Use case 1 – Provides brand new Activity for each call Use case 2 – Refreshes previous (singleton) activity
  • 81. 81 www.ExigenServices.com Activities&Places - View • Part of the UI associated with an Activity • Is a Widget (e.g. implements IsWidget interface) • Is a View in MVP pattern • Has 1 interface and >=1 implementations • Support for different views (e.g. desktop/mobile) • Easy JUnit testing (mocking) • Can be reused (recommended)
  • 83. 83 www.ExigenServices.com Sources GoogleIO videos: http://www.youtube.com/watch?v=g2XclEOJdIc&feature=player_embedded http://www.youtube.com/watch?v=0F5zc1UAt2Y&cc=1#t=554s http://www.youtube.com/watch?v=qT6ZsQBM7kY&cc=1#t=2084s http://www.youtube.com/watch?v=oiNfPjV72lg&feature=related Documents: http://code.google.com/webtoolkit/doc/latest/DevGuideUi.html http://code.google.com/webtoolkit/doc/latest/DevGuideUiBinder.html http://code.google.com/webtoolkit/doc/latest/DevGuideUiCellWidgets.html http://code.google.com/webtoolkit/doc/latest/DevGuideMvpActivitiesAndPlaces.html