SlideShare a Scribd company logo
GWT Architectures and 	

Lessons Learned
Dipl. Wi.-Ing. Papick Garcia Taboada	

pgt technology scouting GmbH!
http://pgt.de
Orientation in Objects GmbH!
http://oio.de
‣GWT Development
‣Basics
‣Structuring the UI
‣Talking to the server
Shift
happened
Java development, 	

JS deployment, 	

Async,	

RPC,	

RIA/ single page,	

...
Web 2.0 ?
development 

is all about…	

!
…js	

…html	

…css	

!
none of it	

!
…jcp	

…oracle	

… IBM	

… backend
what is a GWT
application?
a chunk of JS that does a lot of DOM
manipulation to create web
applications
Widget t = new TextBox();	

!
RootPanel.get().add(t);
UI component model
Browser Composite
Components
Architecture shift
Web applications
Model 2 web applications
Rich internet applications
+ testability!
+ maintainance!
+ product development
Browser Server
user action
full html response
full html response
full html response
user action
user action
classic web
!
developm
ent
Browser Server
event
first request
full html response
data
data request
data
data request
event
event
event
RIA
web


developm
ent
Web frameworks
low level, generic tools
let‘s build big things
TextBox t0 = new TextBox();	

TextBox t1 = new TextBox();	

TextBox t2 = new TextBox();	

TextBox t3 = new TextBox();	

TextBox t4 = new TextBox();	

VerticalPanel...	

SplitPanel...	

ScrollPanel	

RootPanel.get().add(mainPanel);
maintainance hell
MacGyver
All he needed was a ballpoint 

pen and a paper clip
Ops
Widget t = new TextBox();	

!
RootPanel.get().add(t);
not enough…
app-framework wizardry needed
‣GWT Development
‣Basics
‣Structuring the UI
‣Talking to the server
GWT DEVELOPMENT IS COMPLICATED
HOT NEW STUFF.
NOT REALLY
GWT development is not new, 	

but different
WHY?
WEB DEVELOPMENT 	

IS NOT NEW...
1)
THERE IS NOT A MOMENT TO LOOSETHERE IS NOT A MOMENT TO LOOSE
Jan 2000 Jan 2005
XHTML 1.0
Jan 2000
HTML 4.0.1
Dez 1999
CSS 2
Mai 1998
HTML 4.0 update
April 1998
XHTML 1.1
Mai 2001
HTML 2.0
November 1995
HTML 4.0
Dezember 1997
Java EE 1.2
Dez 1999
JDK 1.1
Feb 1997
Internet Explorer 6
Aug 2001
JDK 1.0
Jan 1996
CSS 2.1
Feb 2004 – Jun 2011
CSS level 2 revision 1, often referred to as "CSS 2.1", fixes
errors in CSS 2, removes poorly supported or not fully
interoperable features and adds already-implemented
browser extensions to the specification. In order to comply
with the W3C Process for standardizing technical
specifications, CSS 2.1 went back and forth between
Working Draft status and Candidate Recommendation
status for many years.
J2SE 1.2
Dez 1998
J2SE 1.3
Mai 2000
CSS 1
Dez 1996
HTML 3.2
Januar 1997
RICH CLIENT 	

DEVELOPMENT 	

IS NOT NEW EITHER
2)
nothing new here
nothing new here too
Jan 2007
Look!YES! This is my code!
It’s all about

software 

engineering
Just a 

few tips
USE MVP!
You will get
used to it
event bus please
http://jarrettws.blogspot.de/2010/05/public-transport.html
eventbus.fireEvent(
NotificationEvent.info(
"Daten wurden erfolgreich gespeichert"
)
);
SINGLETON	

don‘t public static instance
BUT ON IE 6 IT IS SO SLOW!
BUT ON IE 7 IT IS SO SLOW!
BUT ON IE 8 IT IS SO SLOW!
BUT ON IE 9 IT IS SO SLOW!
DID ANYONE TEST ON IE / SURFACE?
browsers day to day job
too many HTTP requests
WTF?
> 2400 DOM elements
too many widgets
use large HTML chunks
use large HTML chunks
too many widgets ain‘t good
a Widget is a JS thing holding a
DOM element
<div />
CREATE CUSTOM WIDGETS
don‘t extend FlextTable
don‘t extendVerticalPanel
don‘t extend SimplePanel
CREATE CUSTOM EVENTS
extend composite!!!
the new native, do it in CSS
@-webkit-keyframes redPulse
{
from
{
box-shadow: 0px 0px 2px #ff0033;
}
50%
{
box-shadow: 0px 0px 10px #ff0033;
}
to
{
box-shadow: 0px 0px 2px #ff0033;
}
}
use LayoutPanel
<g:LayoutPanel styleName="{B.style.mainContent}">
<g:layer left="0" right="340px" top="0" height="50%">
<g:SimpleLayoutPanel styleName="{B.style.mainWidget}" addStyleNames="{B.style.termineGlow}"
<ux:DashboardTermineDataGrid ui:field="terminetable" styleName="{B.style.mainWidgetConten
</g:SimpleLayoutPanel>
</g:layer>
<g:layer right="0" width="340px" top="0" height="50%">
<g:SimpleLayoutPanel styleName="{B.style.mainWidget}" addStyleNames="{B.style.finanzenGlow}
<ux:KWStatsDataGrid ui:field="statstable" styleName="{B.style.mainWidgetContent}" />
</g:SimpleLayoutPanel>
</g:layer>
<g:layer right="0" left="0" bottom="0" height="50%">
<g:SimpleLayoutPanel styleName="{B.style.mainWidget}" addStyleNames="{B.style.uebersichtGlo
<ux:WartelisteDataGrid ui:field="wartelistetable" styleName="{B.style.mainWidgetContent}"
</g:SimpleLayoutPanel>
</g:layer>
</g:LayoutPanel>
‣GWT Development
‣Basics
‣Structuring the UI
‣Talking to the server
„just do it“ pattern
„View A“
„View B“
mainPanel.setWiget( aWidget );
mainPanel.setWiget( bWidget );
some action
?
hard to maintain
history
management
from day one!	

!
back button and refresh as a
feature 	

(not a catastrophe)
Keep It Stupid Simple
• use PLACES framework
for main level navigation	

• if you really need to,
nest activities for a
second level. 

try not to.	

• use dialogs for user
input, showing data.
dialogs are easily reused.
EXAMPLE
Javaland 2014 / GWT architectures and lessons learned
top menue bound to places framework
switching between places with fade in and out
teach user to wait until application is ready again
gives us enough time to load the required content
300ms out 500ms in
Javaland 2014 / GWT architectures and lessons learned
Components
inside of
„activity“ fire
non public,
custom
events
datepicker
sends WEEK
selected event
presenter may
goto itself, view
may be cached
#ashtag?!?
STATELESS
VIEW	

!
URL contains
EVERYTHING
needed to
rebuild view
user hits 

reload
GWT apps
starts, activity
gets fired
presenter loads
data from
server
view is back
again
some actions don‘t require PLACE navigation at all
use POPUPS/ DIALOGS to stay ABOVE navigation
let POPUPS/
DIALOGS move
slowly into view
pin POPUPS to
one side of the
window
Don‘t move your user
away from his „PLACE“
unless you have to.
Search DIALOG
slides in from right
side, stays on TOP
Navigation should not hurt
• The application shown uses only 3
levels of navigation, 

DOES NOT NEED MORE	

• PLACES used for bookmarkable
entry points/ back button
navigation consistency	

• Activities should be STATELESS, to
survive page reloads	

• Learn from OTHERS, lookout for
hashtags…
Once upon a time, 	

a young good designer did a good looking design...	

‣ he will be using photoshop
or dreamweaver	

!
‣ he will not use the
software	

!
‣ he will not build the
software	

!
‣ he will not maintain the
software
BEFOREYOU ADD THE LOGO
TO THE TOP
how many pixels do your
USERS have?
the designer or marketing guy using
photoshop is probably sitting in front
of a 27“ apple cinema display
‣GWT Development
‣Basics
‣Structuring the UI
‣Talking to the server
GWT-RPC
is a good
solution if
handled
with care
SomeResult someMethodName(SomeParameter spo)
GWT-RPC
binds many
methods
into one
interface
Interface
Versioning is
a monstrous
thing
SomeResult someMethodName(SomeParameter spo)
this will be an object
this will be an object too
SomeResult someMethodName(SomeParameter spo)
the method names bind the requests to the result
typesafety all the way
USING GENERICS FOR 	

!
TYPESAFETY, 	

!
GET RID OF METHODS 	

!
AND INTERFACES

Java Generics FAQ !
400 pages.
PRO TIP:
<A extends Action<R>, R extends Result> R execute(A action);
now we just have one	

interface with one method
typesafety all the way
!
command
pattern
GOF Pattern	

!
commonly used in 	

Rich Clients	

!
someAction
someResult
someActionHandler
EXECUTE
someAction
someResult
someActionHandlerPOJOS
someAction
someResult
someActionHandler
GWT-RPC
client server
batching	

caching	

security
caching	

exception translation	

security
GWT client
someAction
someResult
someActionHandler
RMI / HTTPInvoker
client server
batching	

caching	

security
caching	

exception translation	

security
Java client
someAction
someResult
someActionHandler
JSON-servlet
client server
batching	

caching	

security
caching	

exception translation	

security
Mobile client
public class TerminLoadAction
implements Action<DataResult<TerminData>> {
!
private String terminId;
!
public TerminLoadAction(String terminId) {
this.terminId = terminId;
}
!
public String getTerminId() {
return terminId;
}
}
public class DataResult<DATA extends Data>
implements Result {
!
private DATA data;
!
public DataResult(DATA data) {
this.data = data;
}
!
public void setData(DATA data) {
this.data = data;
}
!
public DATA getData() {
return data;
}
!
}
aka DTOs
Action Result
Reusable
type safety
dispatch.execute(
!
new TerminLoadAction(terminId),
new AsyncCallback<DataResult<TerminData>>() {
!
@Override
public void onFailure(Throwable caught) {
}
!
@Override
public void onSuccess(DataResult<TerminData> result) {
}
!
}
!
);
<A extends Action<R>, R extends Result> 	

void execute(A action,AsyncCallback<R> callback)
public interface ActionHandler
<A extends Action<R>, R extends Result> {
!
Class<A> getActionType();
!
!
!
!
R execute(
A action,
ExecutionContext context)
throws DispatchException;
!
}
Server side
type safety	

again
handler to action
mapping
action execution
declared	

exception	

hiearchy
Execution context for server side
command execution
@ActionHandlerBean
@Transactional
public final class TerminDataLoadHandler
implements ActionHandler<TerminLoadAction, DataResult<TerminData>> {
!
@Autowired
private TerminDAO terminDao;
!
@Override
public DataResult<TerminData> execute(
TerminLoadAction action,
ExecutionContext context) throws DispatchException {
!
TerminBean termin = …
!
TerminData data = …
!
return new DataResult<TerminData>(data);
!
}
!
@Override
public Class<TerminLoadAction> getActionType() {
return TerminLoadAction.class;
}
!
}
Server side
custom annotationspring
access to backend
type safe result
business logic,	

etc…
interface	

versioning 	

hell?
public interface SomeNiceService
extends RemoteService {
!
String someService(String param);
!
String someServiceV2(String param);
!
String someServiceV3(String param);
}
public interface SomeNiceService
extends RemoteService {
!
String someService(String param);
!
}
!
public interface SomeNiceServiceV2
extends RemoteService {
!
String someService(String param);
!
}
!
public interface SomeNiceServiceV3
extends RemoteService {
!
String someService(String param);
!
}
easy way right way?
maintainability?
maintainability?
someAction
someResult
someActionHandlerPOJOS
someAction
someResult
someActionHandlermultiple

versions
someActionV2
someActionHandlerV2
same result
different versions can coexist!
someAction
someResult
someActionHandlermultiple

versions
someActionV2
someActionHandlerV2
someResultV2
different results
why batch?
solving common
problems•one batch call is better than 10
single calls	

•less data	

•less roundtrip latency	

•avoid connection bottleneck	

•ensure server side execution
order	

•less roundtrips
batchAction
someAction1
batchActionHandler
someAction2
someAction3
batchResult
someResult1
someResult2
someResult3
client server
batching can 

be manual or 	

automatic
server executes	

actions in given order
someAction1
someAction2
someAction3
automatic batching?
GWT code execution
IDLE
browser event loop
Scheduler.scheduleEntry(…)
Scheduler.scheduleFinally(…)
Scheduler.scheduleDeferred(…)
GWT code execution
IDLE
Scheduler.scheduleEntry(…)
Scheduler.scheduleFinally(…)
GWT code execution
IDLE
Scheduler.scheduleFinally(…)
collect commands
fire batch command
cmd 1!
cmd 2!
cmd 3!
cmd …
Scheduler.scheduleEntry(…)
ENABLES FINE GRAINED
COMMANDS AND REUSE	

!
+	

!
ENABLES ORDERING ACTIONS
FOR EXECUTION ON THE
SERVER
BATCH EXECUTION
toggleTerminMetadata
reloadDashboardTermine
BooleanResult
DataListResult<Termin>
toggleTerminMetadata
reloadTermin
BooleanResult
DataResult<Termin>
toggleTerminMetadata
loadMonthStats
BooleanResult
DataResult<MonthStats>
loadMonthTermine DataListResult<Termin>
Thanks!

More Related Content

PDF
GWT Architectures and Lessons Learned (WJAX 2013)
PDF
Curious Coders Java Web Frameworks Comparison
PDF
Effective Android Development. UA Mobile 2016.
PDF
Use groovy & grails in your spring boot projects
PDF
Front-End Modernization for Mortals
PPTX
不只自動化而且更敏捷的Android開發工具 gradle
PDF
GR8Conf 2015 - Spring Boot and Groovy. What more do you need?
PPTX
Pain Driven Development by Alexandr Sugak
GWT Architectures and Lessons Learned (WJAX 2013)
Curious Coders Java Web Frameworks Comparison
Effective Android Development. UA Mobile 2016.
Use groovy & grails in your spring boot projects
Front-End Modernization for Mortals
不只自動化而且更敏捷的Android開發工具 gradle
GR8Conf 2015 - Spring Boot and Groovy. What more do you need?
Pain Driven Development by Alexandr Sugak

What's hot (20)

PDF
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
PDF
When Web meet Native App
PDF
Testing and Software Writer a year later
PDF
Gears and HTML 5 @media Ajax London 2008
PPTX
Creating books app with react native
PDF
Comparing JVM Web Frameworks - February 2014
PDF
EuroPython 2011 - How to build complex web applications having fun?
PDF
Comparing JVM Web Frameworks - Rich Web Experience 2010
PPTX
ReactJS maakt het web eenvoudig
PDF
Wrangling Large Scale Frontend Web Applications
PPT
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
PDF
Django Deployer
PDF
Introduzione a React Native - Facebook Developer Circle Rome
PDF
Usability in the GeoWeb
PDF
HTML5 or Android for Mobile Development?
PPTX
Silverlight vs HTML5 - Lessons learned from the real world...
PDF
Infrastructure as Data with Ansible
PDF
Chasing the RESTful Trinity - Client CLI and Documentation
PDF
Spring Boot
PDF
React native first impression
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
When Web meet Native App
Testing and Software Writer a year later
Gears and HTML 5 @media Ajax London 2008
Creating books app with react native
Comparing JVM Web Frameworks - February 2014
EuroPython 2011 - How to build complex web applications having fun?
Comparing JVM Web Frameworks - Rich Web Experience 2010
ReactJS maakt het web eenvoudig
Wrangling Large Scale Frontend Web Applications
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
Django Deployer
Introduzione a React Native - Facebook Developer Circle Rome
Usability in the GeoWeb
HTML5 or Android for Mobile Development?
Silverlight vs HTML5 - Lessons learned from the real world...
Infrastructure as Data with Ansible
Chasing the RESTful Trinity - Client CLI and Documentation
Spring Boot
React native first impression
Ad

Similar to Javaland 2014 / GWT architectures and lessons learned (20)

PDF
Service worker API
PDF
Mobile is slow - Over the Air 2013
PDF
Jon Arne Sæterås - Give Responsive Design a mobile performance boost
PDF
An introduction to Titanium
PDF
Building a full-stack app with Golang and Google Cloud Platform in one week
PDF
Cross-platform Desktop application with AngularJS and build with Node-webkit
PDF
Angular (v2 and up) - Morning to understand - Linagora
PPT
GWT + Gears : The browser is the platform
ODP
HTML5 - The Python Angle (PyCon Ireland 2010)
PDF
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)
PDF
Rapid and Reliable Developing with HTML5 & GWT
PPTX
Doing Modern Web, aka JavaScript and HTML5 in the Enterprise NYC Code Camp
PPT
T2 Web Framework
PDF
IPhone Web Development With Grails from CodeMash 2009
PPTX
B4UConference_Sexy Angular Stack
PPTX
Seattle bestpractices2010
PDF
Angular js mobile jsday 2014 - Verona 14 may
PPTX
Single Page Applications: Your Browser is the OS!
PDF
Front end microservices: architectures and solution
PDF
Tom Germeau: Mobile Apps: Finding the balance between performance and flexibi...
Service worker API
Mobile is slow - Over the Air 2013
Jon Arne Sæterås - Give Responsive Design a mobile performance boost
An introduction to Titanium
Building a full-stack app with Golang and Google Cloud Platform in one week
Cross-platform Desktop application with AngularJS and build with Node-webkit
Angular (v2 and up) - Morning to understand - Linagora
GWT + Gears : The browser is the platform
HTML5 - The Python Angle (PyCon Ireland 2010)
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)
Rapid and Reliable Developing with HTML5 & GWT
Doing Modern Web, aka JavaScript and HTML5 in the Enterprise NYC Code Camp
T2 Web Framework
IPhone Web Development With Grails from CodeMash 2009
B4UConference_Sexy Angular Stack
Seattle bestpractices2010
Angular js mobile jsday 2014 - Verona 14 may
Single Page Applications: Your Browser is the OS!
Front end microservices: architectures and solution
Tom Germeau: Mobile Apps: Finding the balance between performance and flexibi...
Ad

More from pgt technology scouting GmbH (7)

PDF
GWT widget development
PDF
Client-Server-Kommunikation mit dem Command Pattern
PDF
GWT architecture best practices and lessons learned
KEY
GWT - building a better web
KEY
Modularization in java 8
KEY
Gwt, die bessere spinne
ZIP
Google Web Toolkit
GWT widget development
Client-Server-Kommunikation mit dem Command Pattern
GWT architecture best practices and lessons learned
GWT - building a better web
Modularization in java 8
Gwt, die bessere spinne
Google Web Toolkit

Recently uploaded (20)

PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
Big Data Technologies - Introduction.pptx
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
cuic standard and advanced reporting.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Modernizing your data center with Dell and AMD
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Empathic Computing: Creating Shared Understanding
Understanding_Digital_Forensics_Presentation.pptx
Big Data Technologies - Introduction.pptx
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
cuic standard and advanced reporting.pdf
Machine learning based COVID-19 study performance prediction
NewMind AI Monthly Chronicles - July 2025
20250228 LYD VKU AI Blended-Learning.pptx
Chapter 3 Spatial Domain Image Processing.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Modernizing your data center with Dell and AMD
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Advanced methodologies resolving dimensionality complications for autism neur...
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
NewMind AI Weekly Chronicles - August'25 Week I
“AI and Expert System Decision Support & Business Intelligence Systems”
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Building Integrated photovoltaic BIPV_UPV.pdf
Empathic Computing: Creating Shared Understanding

Javaland 2014 / GWT architectures and lessons learned