SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
Developer DayGoogle 2010
Monday, September 27, 2010
Developer DayGoogle 2010
Fred Sauer
Tokyo, September 28, 2010
Architecting GWT applications for
production at Google
Monday, September 27, 2010
Developer DayGoogle 2010
Answering two questions
• How does Google architect its web apps?
• How are GWT 2.1 and Spring Roo going to help me do the
same?
– com.google.gwt.app
– com.google.gwt.requestfactory
3
Monday, September 27, 2010
Developer DayGoogle 2010
If you like this talk, you’ll love…
Building on last year’s Best Practices for Architecting
http://code.google.com/events/io/2009/sessions/GoogleWebToolkitBestPractices.html
4
Model
Presenter
View
Monday, September 27, 2010
Developer DayGoogle 2010
Production Ready
Monday, September 27, 2010
Developer DayGoogle 2010
“Production ready” means…
• Well tested
• Secure
• Monitored
– What’s broke
– What’s slow
• Scalable
– Lots of users
– Lots of developers
• Bookmark friendly
• Crawlable
• Localized
6
Monday, September 27, 2010
Developer DayGoogle 2010
Isolation
• Well tested ✔
• Secure
• Monitored
– What’s broke
– What’s slow
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
• Localized
7
Monday, September 27, 2010
Developer DayGoogle 2010
Instrumentation
• Well tested ✔
• Secure
• Monitored ✔
– What’s broke ✔
– What’s slow ✔
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
• Localized
8
Monday, September 27, 2010
Developer DayGoogle 2010
Suspicion
• Well tested ✔
• Secure ✔
• Monitored ✔
– What’s broke ✔
– What’s slow ✔
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
• Localized
9
Monday, September 27, 2010
Developer DayGoogle 2010
Discussed at Google I/O
• Well tested ✔
• Secure ✔
• Monitored ✔
– What’s broke ✔
– What’s slow ✔
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
• Localized ✔
10
GWT's UI overhaul
http://bit.ly/io2010-gwt5
Monday, September 27, 2010
Developer DayGoogle 2010
Isolation
Monday, September 27, 2010
Developer DayGoogle 2010
MVP
12
Effective Testing
Daniel Danilatos…
http://bit.ly/io2010-gwt7
Model
Presenter
View
Monday, September 27, 2010
Developer DayGoogle 2010
MVP
12
Effective Testing
Daniel Danilatos…
http://bit.ly/io2010-gwt7
Model
Presenter
View
DTO
Monday, September 27, 2010
DTO
Presenter
View
DTO
Domain Obj
XHR
Developer DayGoogle 2010
Waaah, DTOs violate DRY*
13
*DRY = Do not RepeatYourself
Monday, September 27, 2010
DTO
!
Request Factory
Servlet
Presenter
View
DTO
Domain Obj
XHR
!
Developer DayGoogle 2010
Repetition via tools
14
Monday, September 27, 2010
RF
Servlet
JSON
Request
Factory
!
Presenter
View
Employee
Request
!
Employee
Record
!
Employee
Developer DayGoogle 2010
cRud (=Read)
15
Monday, September 27, 2010
RF
Servlet
JSON
Request
Factory
!
Presenter
View
Sync
Request
Employee
Record
!
Employee
Event Bus
Employee
Changed
!
Developer DayGoogle 2010
CrUD (=Create, Update, Delete)
16
Monday, September 27, 2010
DTO
!
Presenter
View
Developer DayGoogle 2010
Waaah, presenter is too much boilerplate
17
Monday, September 27, 2010
DTO
!
Presenter
View
Developer DayGoogle 2010
Waaah, presenter is too much boilerplate
17
Activity
!
Monday, September 27, 2010
Place Change Event
Request
Factory
!
Activity
Manager
Event Bus
start()
Activity
!showWidget()
XHR
Activity
!
onStop()
Developer DayGoogle 2010
Activity life cycle
18
Monday, September 27, 2010
Developer DayGoogle 2010
Activity in test
19
Mock RFMock AM
start()
Activity
!
showWidget()
Monday, September 27, 2010
Developer DayGoogle 2010
Isolated activity is crawlable activity
• Activity life cycle tied to history changes
• History changes tied to discrete URLs — bookmarkable
– http://example.com/#report:123456
• Add a bang and a headless server — crawlable
– http://example.com/#!report:123456
• http://code.google.com/web/ajaxcrawling/docs/getting-started.html
20
Monday, September 27, 2010
DTO
!
Presenter
View
Developer DayGoogle 2010
Waaah, too boring to test is too boring to write
21
Activity
!
Monday, September 27, 2010
DTO
!
Presenter
View
Developer DayGoogle 2010
Waaah, too boring to test is too boring to write
21
Activity
!
!Editor
Support
Monday, September 27, 2010
Developer DayGoogle 2010
Selections of EditView<EmployeeRecord>
22
private static final EditorSupport SUPPORT =
GWT.create(EditorSupport.class);
@UiField TextBox displayName;
@UiField TextBox userName;
public void setValue(EmployeeRecord value) {
this.record = value;
SUPPORT.setValue(this, value);
}
public boolean isChanged() {
return SUPPORT.isChanged(this);
}
Monday, September 27, 2010
Developer DayGoogle 2010
All isolation promises kept but one
• Well tested ✔
• Secure
• Monitored
– What’s broke
– What’s slow
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
• Localized
23
Monday, September 27, 2010
JPA for real
Anywhere but GAE
Scalable enough
JPA--
No reference fields
(No joins)
Super portable
Super scalable
Developer DayGoogle 2010
Give me convenience or give me scale
24
Monday, September 27, 2010
Developer DayGoogle 2010
Instrumentation
Monday, September 27, 2010
Developer DayGoogle 2010
Your eyes on the browser
• Logging
• Stack traces
• User Actions
26
Monday, September 27, 2010
Developer DayGoogle 2010
Logging: phone home
• Client side logger with remote logging service
– http://code.google.com/p/gwt-log/ GWT *.*
– java.util.logging in GWT 2.1
• Accumulate logs client side
• Watch for request batches and ride along, or flush on timer
27
Monday, September 27, 2010
Developer DayGoogle 2010
Stack Traces
• Method level for free on most modern browsers
• Get it to the server
– HttpThrowableReporter to send JSON formatted via XHR
– In gwt-log, use RemoteLoggerService
• Re-symbolize obfuscated traces server side
– http://code.google.com/p/google-web-toolkit/wiki/WebModeExceptions
– Fair warning: that page is terse to the point of encryption
28
Monday, September 27, 2010
Developer DayGoogle 2010
Emulated Stack Traces
• For line-level traces
– and anything at all on less modern browsers
<set-property name="compiler.emulatedStack" value="true" />
<set-configuration-property
name="compiler.recordLineNumbers" value="true" />
<set-configuration-property
name="compiler.recordFileNames" value="true" />
• But your app is fatter and slower
29
Monday, September 27, 2010
Developer DayGoogle 2010
Emulated stack traces in production
<!-- gwt-log logging is `OFF` by default -->
<inherits name="com.allen_sauer.gwt.log.gwt-log-OFF" />
<!-- also compile your application at `INFO` level -->
<extend-property name="log_level" values="INFO"/>
Provide link to your users to enable logging:
http[s]://hostame:port/path/to/Module.html?log_level=INFO
30
Let your uses opt in (using gwt-log)
Monday, September 27, 2010
Developer DayGoogle 2010
User Actions
• Unique strings associated with each interesting UI element
– links, buttons
– maybe in ui.xml
• User gestures (clicks a link, say), User Action event posted
on Event Bus
– Time is noted
– RPCs queued in this event loop are attributed to this Action
• When all RPCs return, time is tallied, logs trickle to server
• Planned for GWT 2.1
31
Monday, September 27, 2010
Developer DayGoogle 2010
Suspicion
Monday, September 27, 2010
Developer DayGoogle 2010
Secure: guard against cross site scripting
attacks
• RemoteServiceServlet watching for X-GWT-Permutation
header for XSRF paranoia
– New in GWT 2.1
– Only XHR can set a header, and XHR is from your domain
• SafeHTML
– Debuts as open source in new web-based Wave FedOne client
– http://code.google.com/p/wave-protocol/
– Destined for GWT 2.<something>
33
Monday, September 27, 2010
Developer DayGoogle 2010
SafeHtml: because setHtml() isn’t
• If the user typed it, you must not render it as HTML
– prefer HasText#setText to HasHTML#setHTML
– prefer Element#setInnerText to Element#setInnerHTML
• SafeHtml interface promises its asString() produces
harmless HTML
• SafeHtmlBuilder and SimpleHtmlSanitizer
• for assembling untrusted strings into SafeHtml instances
• SafeHtml aware widgets that replace setHTML() with
setSafeHtml()
34
Monday, September 27, 2010
Developer DayGoogle 2010
Recap
Monday, September 27, 2010
Developer DayGoogle 2010
“Production ready” means…
• Well tested
• Secure
• Monitored
– What’s broke
– What’s slow
• Scalable
– Lots of users
– Lots of developers
• Bookmark friendly
• Crawlable
36
Monday, September 27, 2010
Developer DayGoogle 2010
“Production ready” means…
• Well tested ✔
• Secure
• Monitored
– What’s broke
– What’s slow
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
37
• Be isolated
Monday, September 27, 2010
Developer DayGoogle 2010
“Production ready” means…
• Well tested ✔
• Secure
• Monitored ✔
– What’s broke ✔
– What’s slow ✔
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
38
• Be isolated
• Be instrumented
Monday, September 27, 2010
Developer DayGoogle 2010
“Production ready” means…
• Well tested ✔
• Secure ✔
• Monitored ✔
– What’s broke ✔
– What’s slow ✔
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
39
• Be isolated
• Be instrumented
• Be suspicious
Monday, September 27, 2010
Model
Presenter
View
Developer DayGoogle 2010
Don’t work so hard
40
Monday, September 27, 2010
DTO
!
Presenter
View
Activity
!
!Editor
Support
Developer DayGoogle 2010
Don’t work so hard
40
Monday, September 27, 2010
Developer DayGoogle 2010
Monday, September 27, 2010

Contenu connexe

Plus de Google Developer Relations Team

Plus de Google Developer Relations Team (10)

Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)
Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)
Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)
 
Google Developer Day 2010 Japan: 「App Engine 開発者コミュニティ「appengine ja night」とフレ...
Google Developer Day 2010 Japan: 「App Engine 開発者コミュニティ「appengine ja night」とフレ...Google Developer Day 2010 Japan: 「App Engine 開発者コミュニティ「appengine ja night」とフレ...
Google Developer Day 2010 Japan: 「App Engine 開発者コミュニティ「appengine ja night」とフレ...
 
Google Developer Day 2010 Japan: Google App Engine についての最新情報 (松尾貴史)
Google Developer Day 2010 Japan: Google App Engine についての最新情報 (松尾貴史)Google Developer Day 2010 Japan: Google App Engine についての最新情報 (松尾貴史)
Google Developer Day 2010 Japan: Google App Engine についての最新情報 (松尾貴史)
 
Google Developer Day 2010 Japan: Google Chrome の Developer Tools (ミカイル ナガノフ, ...
Google Developer Day 2010 Japan: Google Chrome の Developer Tools (ミカイル ナガノフ, ...Google Developer Day 2010 Japan: Google Chrome の Developer Tools (ミカイル ナガノフ, ...
Google Developer Day 2010 Japan: Google Chrome の Developer Tools (ミカイル ナガノフ, ...
 
Google Developer Day 2010 Japan: Android や iPhone で活用する Maps API のモバイル端末向け新機能...
Google Developer Day 2010 Japan: Android や iPhone で活用する Maps API のモバイル端末向け新機能...Google Developer Day 2010 Japan: Android や iPhone で活用する Maps API のモバイル端末向け新機能...
Google Developer Day 2010 Japan: Android や iPhone で活用する Maps API のモバイル端末向け新機能...
 
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
 
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)
 
Google Developer Day 2010 Japan: クールな Android アプリを作るには (安生真, 山下盛史, 江川崇)
Google Developer Day 2010 Japan: クールな Android アプリを作るには (安生真, 山下盛史, 江川崇)Google Developer Day 2010 Japan: クールな Android アプリを作るには (安生真, 山下盛史, 江川崇)
Google Developer Day 2010 Japan: クールな Android アプリを作るには (安生真, 山下盛史, 江川崇)
 
Google Developer Day 2010 Japan: マーケットライセンシングを使って Android アプリケーションを守るには (トニー ...
Google Developer Day 2010 Japan: マーケットライセンシングを使って Android アプリケーションを守るには (トニー ...Google Developer Day 2010 Japan: マーケットライセンシングを使って Android アプリケーションを守るには (トニー ...
Google Developer Day 2010 Japan: マーケットライセンシングを使って Android アプリケーションを守るには (トニー ...
 
Google Developer Day 2010 Japan: 高性能な Android アプリを作るには (ティム ブレイ)
Google Developer Day 2010 Japan: 高性能な Android アプリを作るには (ティム ブレイ)Google Developer Day 2010 Japan: 高性能な Android アプリを作るには (ティム ブレイ)
Google Developer Day 2010 Japan: 高性能な Android アプリを作るには (ティム ブレイ)
 

Dernier

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Dernier (20)

Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

Google Developer Day 2010 Japan: 製品レベルの GWT アプリケーション - Google での設計手法 (フレッド ソオー)

  • 1. Developer DayGoogle 2010 Monday, September 27, 2010
  • 2. Developer DayGoogle 2010 Fred Sauer Tokyo, September 28, 2010 Architecting GWT applications for production at Google Monday, September 27, 2010
  • 3. Developer DayGoogle 2010 Answering two questions • How does Google architect its web apps? • How are GWT 2.1 and Spring Roo going to help me do the same? – com.google.gwt.app – com.google.gwt.requestfactory 3 Monday, September 27, 2010
  • 4. Developer DayGoogle 2010 If you like this talk, you’ll love… Building on last year’s Best Practices for Architecting http://code.google.com/events/io/2009/sessions/GoogleWebToolkitBestPractices.html 4 Model Presenter View Monday, September 27, 2010
  • 5. Developer DayGoogle 2010 Production Ready Monday, September 27, 2010
  • 6. Developer DayGoogle 2010 “Production ready” means… • Well tested • Secure • Monitored – What’s broke – What’s slow • Scalable – Lots of users – Lots of developers • Bookmark friendly • Crawlable • Localized 6 Monday, September 27, 2010
  • 7. Developer DayGoogle 2010 Isolation • Well tested ✔ • Secure • Monitored – What’s broke – What’s slow • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ • Localized 7 Monday, September 27, 2010
  • 8. Developer DayGoogle 2010 Instrumentation • Well tested ✔ • Secure • Monitored ✔ – What’s broke ✔ – What’s slow ✔ • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ • Localized 8 Monday, September 27, 2010
  • 9. Developer DayGoogle 2010 Suspicion • Well tested ✔ • Secure ✔ • Monitored ✔ – What’s broke ✔ – What’s slow ✔ • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ • Localized 9 Monday, September 27, 2010
  • 10. Developer DayGoogle 2010 Discussed at Google I/O • Well tested ✔ • Secure ✔ • Monitored ✔ – What’s broke ✔ – What’s slow ✔ • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ • Localized ✔ 10 GWT's UI overhaul http://bit.ly/io2010-gwt5 Monday, September 27, 2010
  • 12. Developer DayGoogle 2010 MVP 12 Effective Testing Daniel Danilatos… http://bit.ly/io2010-gwt7 Model Presenter View Monday, September 27, 2010
  • 13. Developer DayGoogle 2010 MVP 12 Effective Testing Daniel Danilatos… http://bit.ly/io2010-gwt7 Model Presenter View DTO Monday, September 27, 2010
  • 14. DTO Presenter View DTO Domain Obj XHR Developer DayGoogle 2010 Waaah, DTOs violate DRY* 13 *DRY = Do not RepeatYourself Monday, September 27, 2010
  • 15. DTO ! Request Factory Servlet Presenter View DTO Domain Obj XHR ! Developer DayGoogle 2010 Repetition via tools 14 Monday, September 27, 2010
  • 18. DTO ! Presenter View Developer DayGoogle 2010 Waaah, presenter is too much boilerplate 17 Monday, September 27, 2010
  • 19. DTO ! Presenter View Developer DayGoogle 2010 Waaah, presenter is too much boilerplate 17 Activity ! Monday, September 27, 2010
  • 20. Place Change Event Request Factory ! Activity Manager Event Bus start() Activity !showWidget() XHR Activity ! onStop() Developer DayGoogle 2010 Activity life cycle 18 Monday, September 27, 2010
  • 21. Developer DayGoogle 2010 Activity in test 19 Mock RFMock AM start() Activity ! showWidget() Monday, September 27, 2010
  • 22. Developer DayGoogle 2010 Isolated activity is crawlable activity • Activity life cycle tied to history changes • History changes tied to discrete URLs — bookmarkable – http://example.com/#report:123456 • Add a bang and a headless server — crawlable – http://example.com/#!report:123456 • http://code.google.com/web/ajaxcrawling/docs/getting-started.html 20 Monday, September 27, 2010
  • 23. DTO ! Presenter View Developer DayGoogle 2010 Waaah, too boring to test is too boring to write 21 Activity ! Monday, September 27, 2010
  • 24. DTO ! Presenter View Developer DayGoogle 2010 Waaah, too boring to test is too boring to write 21 Activity ! !Editor Support Monday, September 27, 2010
  • 25. Developer DayGoogle 2010 Selections of EditView<EmployeeRecord> 22 private static final EditorSupport SUPPORT = GWT.create(EditorSupport.class); @UiField TextBox displayName; @UiField TextBox userName; public void setValue(EmployeeRecord value) { this.record = value; SUPPORT.setValue(this, value); } public boolean isChanged() { return SUPPORT.isChanged(this); } Monday, September 27, 2010
  • 26. Developer DayGoogle 2010 All isolation promises kept but one • Well tested ✔ • Secure • Monitored – What’s broke – What’s slow • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ • Localized 23 Monday, September 27, 2010
  • 27. JPA for real Anywhere but GAE Scalable enough JPA-- No reference fields (No joins) Super portable Super scalable Developer DayGoogle 2010 Give me convenience or give me scale 24 Monday, September 27, 2010
  • 29. Developer DayGoogle 2010 Your eyes on the browser • Logging • Stack traces • User Actions 26 Monday, September 27, 2010
  • 30. Developer DayGoogle 2010 Logging: phone home • Client side logger with remote logging service – http://code.google.com/p/gwt-log/ GWT *.* – java.util.logging in GWT 2.1 • Accumulate logs client side • Watch for request batches and ride along, or flush on timer 27 Monday, September 27, 2010
  • 31. Developer DayGoogle 2010 Stack Traces • Method level for free on most modern browsers • Get it to the server – HttpThrowableReporter to send JSON formatted via XHR – In gwt-log, use RemoteLoggerService • Re-symbolize obfuscated traces server side – http://code.google.com/p/google-web-toolkit/wiki/WebModeExceptions – Fair warning: that page is terse to the point of encryption 28 Monday, September 27, 2010
  • 32. Developer DayGoogle 2010 Emulated Stack Traces • For line-level traces – and anything at all on less modern browsers <set-property name="compiler.emulatedStack" value="true" /> <set-configuration-property name="compiler.recordLineNumbers" value="true" /> <set-configuration-property name="compiler.recordFileNames" value="true" /> • But your app is fatter and slower 29 Monday, September 27, 2010
  • 33. Developer DayGoogle 2010 Emulated stack traces in production <!-- gwt-log logging is `OFF` by default --> <inherits name="com.allen_sauer.gwt.log.gwt-log-OFF" /> <!-- also compile your application at `INFO` level --> <extend-property name="log_level" values="INFO"/> Provide link to your users to enable logging: http[s]://hostame:port/path/to/Module.html?log_level=INFO 30 Let your uses opt in (using gwt-log) Monday, September 27, 2010
  • 34. Developer DayGoogle 2010 User Actions • Unique strings associated with each interesting UI element – links, buttons – maybe in ui.xml • User gestures (clicks a link, say), User Action event posted on Event Bus – Time is noted – RPCs queued in this event loop are attributed to this Action • When all RPCs return, time is tallied, logs trickle to server • Planned for GWT 2.1 31 Monday, September 27, 2010
  • 36. Developer DayGoogle 2010 Secure: guard against cross site scripting attacks • RemoteServiceServlet watching for X-GWT-Permutation header for XSRF paranoia – New in GWT 2.1 – Only XHR can set a header, and XHR is from your domain • SafeHTML – Debuts as open source in new web-based Wave FedOne client – http://code.google.com/p/wave-protocol/ – Destined for GWT 2.<something> 33 Monday, September 27, 2010
  • 37. Developer DayGoogle 2010 SafeHtml: because setHtml() isn’t • If the user typed it, you must not render it as HTML – prefer HasText#setText to HasHTML#setHTML – prefer Element#setInnerText to Element#setInnerHTML • SafeHtml interface promises its asString() produces harmless HTML • SafeHtmlBuilder and SimpleHtmlSanitizer • for assembling untrusted strings into SafeHtml instances • SafeHtml aware widgets that replace setHTML() with setSafeHtml() 34 Monday, September 27, 2010
  • 39. Developer DayGoogle 2010 “Production ready” means… • Well tested • Secure • Monitored – What’s broke – What’s slow • Scalable – Lots of users – Lots of developers • Bookmark friendly • Crawlable 36 Monday, September 27, 2010
  • 40. Developer DayGoogle 2010 “Production ready” means… • Well tested ✔ • Secure • Monitored – What’s broke – What’s slow • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ 37 • Be isolated Monday, September 27, 2010
  • 41. Developer DayGoogle 2010 “Production ready” means… • Well tested ✔ • Secure • Monitored ✔ – What’s broke ✔ – What’s slow ✔ • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ 38 • Be isolated • Be instrumented Monday, September 27, 2010
  • 42. Developer DayGoogle 2010 “Production ready” means… • Well tested ✔ • Secure ✔ • Monitored ✔ – What’s broke ✔ – What’s slow ✔ • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ 39 • Be isolated • Be instrumented • Be suspicious Monday, September 27, 2010
  • 43. Model Presenter View Developer DayGoogle 2010 Don’t work so hard 40 Monday, September 27, 2010
  • 45. Developer DayGoogle 2010 Monday, September 27, 2010