YaJUG: What's new in GWT2

Olivier Gérardin
Olivier GérardinTechnical Director at Sfeir Benelux
GWT 2 = Easier AJAX,[object Object],YaJUG,[object Object],11/5/2010,[object Object]
Who am I?,[object Object],Olivier Gérardin,[object Object],Technical Director, Sfeir Benelux (groupe Sfeir),[object Object],Java / Web architect,[object Object],13+ years Java,[object Object],3 years GWT,[object Object]
Agenda,[object Object],GWT reminders,[object Object],New in GWT 2.0,[object Object],SpeedTracer,[object Object],In-browser development mode,[object Object],Code splitting & compile report,[object Object],UiBinder,[object Object],Client bundle,[object Object],Layout panels,[object Object],Misc.,[object Object],Pointers, Conclusion, Q&A,[object Object]
Reminders,[object Object]
GWT solves all your problems,[object Object],GWT gives you AJAX without the pain of JavaScript development,[object Object],Takes care of cross-browser issues,[object Object],Allows full debugging (breakpoints, step by step, inspecting/watching variables),[object Object],Strong static typing early error detection,[object Object],Full refactoring options,[object Object],No browser plugin or mandatory IDE,[object Object],Short learning curve,[object Object],Simple RPC mechanism built in,[object Object],But can communicate with any server technology,[object Object]
Program in Java…,[object Object],GWT allows developing client-side web apps in full Java (with only a few restrictions),[object Object],Leverage existing Java tools and skills,[object Object],Use any IDE (Eclipse, NetBeans, IntelliJ, …),[object Object],Program like a traditional graphical client (Swing, SWT, …),[object Object],Widgets, containers, listeners, etc.,[object Object],Use OO patterns (MVC, MVP, observer, composite, etc.),[object Object],Test like any Java app,[object Object],Use standard Java debuggers,[object Object],Test with JUnit,[object Object]
… deploy in JavaScript,[object Object],JavaScript is only generated:,[object Object],For deployment,[object Object],To test in actual web mode,[object Object],GWT guarantees that the generated JavaScript app behaves exactly like the Java app ,[object Object],And it does (most of the time),[object Object]
4 easy pieces,[object Object],Java-to-JavaScript compiler,[object Object],Generates JS code from Java source,[object Object],Performs many optimization,[object Object],JRE emulation library,[object Object],GWT compatible version of most used Java core classes (java.lan, java.util),[object Object],Java libraries,[object Object],Utility classes (JSON, I18N, …),[object Object],Widget library,[object Object],Hosted Development mode,[object Object],Run/debug the app as Java bytecode,[object Object]
Key benefits,[object Object]
Easy development,[object Object],During development, you are writing and running a classic Java app,[object Object],Use your favorite IDE,[object Object],All IDE features available (code completion, code analysis, refactoring, links, Javadoc, …),[object Object],Plugins help GWT-specific tasks,[object Object],launching development mode,[object Object],compiling,[object Object],refactoring,[object Object],creating projects, modules, RPC services, …,[object Object],even design GUI (GWT Designer from Instantiations),[object Object]
More benefits,[object Object],Easy RPC implementation / consumption / deployment,[object Object],Easy JSON / XML parsing,[object Object],Easy UI building / widget reuse,[object Object],Easy history support,[object Object],Easy i18n,[object Object],Easy debugging ,[object Object],Easy testing,[object Object]
Any room for improvement???,[object Object],Of course…,[object Object]
New in GWT 2.0,[object Object]
Speed tracer,[object Object],Performance analysis tool,[object Object],Visualize where your app spends time:,[object Object],JS execution,[object Object],Browser rendering,[object Object],CSS handling (style selection/calculation),[object Object],DOM handling / event processing,[object Object],Resource loading,[object Object]
Speed Tracer: example,[object Object]
In-browser development mode,[object Object],Before 2.0: hosted mode uses customized browser engine,[object Object],Heavily customized,[object Object],Only one supported browser per platform (IE on Windows, WebKit on Mac, Mozilla on Linux),[object Object],Difficult to keep up-to-date,[object Object],Includes platform-specific code (SWT),[object Object],Browser and hosted application share the same process,[object Object],Most plugins don’t work (including Google Gears…),[object Object]
In-browser development mode,[object Object],now:,[object Object],Hosted mode shell runs outside browser,[object Object],Communicates with browser using plugin through TCP,[object Object]
In-browser development mode,[object Object],Benefits,[object Object],Use any (supported) browser/version on any platform,[object Object],Currently Safari, Firefox, IE, Chrome (not on OS X!),[object Object],Behavior closer to web mode,[object Object],No interference with browser plugins,[object Object],No more platform-specific stuff in GWT (one jar for all!),[object Object],Network protocol between shell and browser  cross-platform dev possible,[object Object],Dev mode shell on machine X, slave browser on machine Y,[object Object],E.g. dev on Linux, test in IE on Windows…,[object Object]
Initiating dev mode,[object Object]
Plugin installation,[object Object]
Code splitting,[object Object],Before: monolithic download can become very big,[object Object],Slow startup times,[object Object],After: ,[object Object],Programmer can insert “split points” in code,[object Object],Hints for the compiler to place everything not required up to split point in separate download,[object Object],Compiler divides code in several “chunks”, which are loaded on-demand,[object Object],Benefits:,[object Object],Initial loading time reduced 50% on average with a single split point,[object Object],Allows on-demand module loading (provider pattern),[object Object]
Specifying a split point,[object Object],GWT.runAsync(newRunAsyncCallback() {,[object Object],publicvoidonFailure(Throwable reason) {,[object Object],// …,[object Object],		},[object Object],		public void onSuccess() {,[object Object],// ..,[object Object],},[object Object],	});,[object Object]
Pattern: AsyncProvider,[object Object],publicinterfaceAsyncClient<P> {,[object Object],	voidonUnavailable(Throwable reason);,[object Object],	void onAvailable(P instance);,[object Object],},[object Object]
Async provider: Implementing the provider,[object Object],publicclass Provider {,[object Object],privatestatic Provider instance = null;,[object Object],public static void getAsync(finalAsyncClient<Provider> client) {,[object Object],GWT.runAsync(newRunAsyncCallback() {,[object Object],			public void onFailure(Throwable reason) {,[object Object],client.onUnavailable(reason);,[object Object],			},[object Object],			public void onSuccess() {,[object Object],			if (instance == null) {,[object Object],instance = new Provider();,[object Object],				},[object Object],client.onAvailable(instance);,[object Object],			},[object Object],	});,[object Object],	},[object Object]
Async provider: Loading the provider,[object Object],privatevoidloadProvider() {,[object Object],Provider.getAsync(newAsyncClient<Provider>() {,[object Object],		publicvoidonAvailable(Provider provider) {,[object Object],provider.doSomething();,[object Object],		},[object Object],		publicvoidonUnavailable(Throwable reason) {,[object Object],Window.alert(”Failed: " + reason);,[object Object],		},[object Object],	});,[object Object],},[object Object]
Compile Report (formerly: SOYC),[object Object],Better understanding of the compilation process,[object Object],Helps tuning code splitting,[object Object],Simple compiler flag,[object Object],Produces HTML report,[object Object],Shows:,[object Object],Permutations,[object Object],Sizes per chunk, package, etc.,[object Object],Dependencies,[object Object],Compiler flag: -compileReport,[object Object]
Compile Report: output,[object Object]
Declarative UI: UiBinder,[object Object],Declarative construction of GUI using XML grammar,[object Object],Mix HTML and widgets,[object Object],Benefits:,[object Object],Clearly separate responsibilities  better collaboration,[object Object],Static UI construction (XML),[object Object],Dynamic UI behavior (Java),[object Object],More efficient,[object Object],HTML vs DOM API calls,[object Object],Easy to transition from static HTML to dynamic,[object Object]
UiBinder: define layout,[object Object],XML file (xx.ui.xml),[object Object],<ui:UiBinder,[object Object],xmlns:ui='urn:ui:com.google.gwt.uibinder',[object Object],xmlns:gwt='urn:import:com.google.gwt.user.client.ui'>,[object Object],		<gwt:HorizontalPanel>,[object Object],			<gwt:Labeltext="Sexe :" />,[object Object],			<gwt:VerticalPanel>,[object Object],			<gwt:RadioButtonname='sexeradio' text='M’ />,[object Object],			<gwt:RadioButtonname='sexeradio' text='F’ />,[object Object],		</gwt:VerticalPanel>,[object Object],	</gwt:HorizontalPanel>,[object Object],</ui:UiBinder>,[object Object]
UiBinder: instantiate,[object Object],publicclass SexeRadio2 extends Composite {,[object Object],@UiTemplate("SexeRadio2.ui.xml"),[object Object],interfaceMyUiBinder,[object Object],extendsUiBinder<Panel, SexeRadio2> {},[object Object],privatestaticfinalMyUiBinderbinder = GWT.create(MyUiBinder.class);,[object Object],public SexeRadio2() {,[object Object],	finalPanel panel =binder.createAndBindUi(this);,[object Object],initWidget(panel);,[object Object],},[object Object]
UiBinder: bind fields,[object Object],Automatically assign references to dynamically created widgets to designated Java fields (@UiField),[object Object],XML :,[object Object],<gwt:RadioButtonname='sexeradio' text='M’ ui:field='maleRadio' />,[object Object],<gwt:RadioButtonname='sexeradio' text='F’ ui:field='femaleRadio'/>,[object Object],Code: ,[object Object],@UiField,[object Object],RadioButtonmaleRadio;,[object Object],@UiField,[object Object],RadioButtonfemaleRadio;,[object Object]
UiBinder: bind handlers,[object Object],Automatically attach event handlers (@UiHandler),[object Object],Widgets only (not DOM elements),[object Object],Handler type inferred from parameter type,[object Object],Code:,[object Object],@UiHandler("maleRadio"),[object Object],voidmaleClicked(ClickEvent event) {,[object Object],GWT.log("C'est un garçon!", null);,[object Object],},[object Object]
More UiBinder goodness,[object Object],Mix HTML and widgets in same XML file,[object Object],Define CSS styles with <ui:style>,[object Object],Inline / external,[object Object],Apply to widgets with attributes styleNames / addStyleNames,[object Object],Programmatic access to styles (works with CssResource),[object Object],Use external resources (images, CSS stylesheets, …) declared as client bundles with <ui:with>,[object Object],Instantiate widgets that don’t have zero-arg constructor with @UiFactory,[object Object]
Resource bundles,[object Object],Download multiple heterogeneous resources from server in a single request,[object Object],Images (similar to ImageBundle in 1.x),[object Object],CSS,[object Object],Text,[object Object],Any other resource,[object Object],Benefits:,[object Object],Fewer round trips to the server,[object Object],Less overhead,[object Object],More responsive interface,[object Object]
Resource bundles: general mechanism,[object Object],Familiar mechanism,[object Object],Coding time: define interface,[object Object],Method type constrains resource type,[object Object],Method name (accessor) designates resource,[object Object],Annotation @source specifies resource content,[object Object],If unspecified, source is derived from accessor,[object Object],I18N aware (append _fr, _fr_FR),[object Object],Runtime: access resource,[object Object],Obtain instance via GWT.create(interface.class) and call accessor directly,[object Object],Reference accessor through other mechanism (CSS injection @sprite, etc.),[object Object]
Resource bundles: DataResource,[object Object],Works with any kind of source,[object Object],Make the resource available through a URL,[object Object],Rename file to make resulting URL strongly-cacheable if appropriate,[object Object],XXX.pdf AAA12345.cache.pdf,[object Object],Webserver should be configured accordingly,[object Object]
Resource bundles: TextResource,[object Object],Access to static text content,[object Object],TextResource is inlined into JavaScript,[object Object],ExternalTextResource is fetched asynchronously,[object Object],interface Resources extendsClientBundle {,[object Object],    Resources INSTANCE = GWT.create(Resources.class);,[object Object],@Source(“text1.txt"),[object Object],TextResource text1();,[object Object],@Source(“text2.txt"),[object Object],ExternalTextResource text2();,[object Object],},[object Object]
Accessing TextResouce,[object Object],// TextResource,[object Object],myTextArea.setInnerText(,[object Object],		Resources.INSTANCE.text1().getText());,[object Object],//ExternalTextResource,[object Object],  Resources.INSTANCE.text2().getText(,[object Object],newResourceCallback<TextResource>() {,[object Object],publicvoidonError(ResourceExceptione) 			{ ... },[object Object],publicvoidonSuccess(TextResourcer) {,[object Object],myTextArea.setInnerText(r.getText());,[object Object], 		},[object Object],  });,[object Object]
Resource bundles: ImageResource,[object Object],Optimize runtime access to image data,[object Object],Transparently group /split images,[object Object],Uses ImageIO library,[object Object],Use in injected CSS with @sprite directive ,[object Object],Supports most image formats,[object Object],Including animated GIF,[object Object],Not an image-processing library!,[object Object]
Resource bundles: CssResource,[object Object],Define an extension of CSS,[object Object],Syntax validations / compile-time optimizations,[object Object],Injected at runtime	,[object Object],Usage:,[object Object],Write CSS stylesheet,[object Object],Extend CssResource,[object Object],	interfaceMyCssextendsCssResource {,[object Object],	},[object Object],Include in ClientBundle,[object Object],interfaceMyResourcesextendsClientBundle {,[object Object],@Source("my.css"),[object Object],MyCsscss();,[object Object],},[object Object],Use GWT.create(MyResources.class) to obtain instance of bundle,[object Object],Call CssResource.ensureInjected() to inject stylesheet in page,[object Object]
CSS extensions,[object Object],Sprites with @sprite,[object Object],Bundle:,[object Object],classMyResourcesextendsClientBundle {,[object Object],@Source("my.css"),[object Object],MyCssResourcecss();,[object Object],@Source("some.png"),[object Object],ImageResourceimageAccessor();,[object Object],},[object Object],my.css:,[object Object],@sprite .mySpriteClass{ ,[object Object],gwt-image: "imageAccessor” ,[object Object],		},[object Object]
CSS extensions,[object Object],Constants with @def,[object Object],Runtime evaluation with @eval and value(),[object Object],Conditional CSS with @if/@elif/@else,[object Object]
Layout panels,[object Object],Layout panels,[object Object],Predictable, consistent layout,[object Object],Constraint based system built on top of CSS,[object Object],Plays nice with custom CSS styles,[object Object],Each child must have 0 or 2 constraints per axis,[object Object],Horizontal: none, left/width, right/width, left/right,[object Object],Vertical: none, top/height, bottom/height, top/bottom,[object Object],no constraint = fill parent,[object Object],Any unit (%, px, …),[object Object],Must be added to an instance of ProvidesResize,[object Object],typically RootLayoutPanel,[object Object]
Layout Panels,[object Object],[object Object],<g:layer left=‘25% right=‘25%’ top=‘10px’ bottom=‘0’>,[object Object],<g:Label>Label</g:Label>,[object Object],</g:layer>,[object Object],Bunch of specialized panels implemented as LayoutPanels:,[object Object],DockLayoutPanel, SplitLayoutPanel, StackLayoutPanel, TabLayoutPanel,[object Object]
And also…,[object Object],Compiler optimizations,[object Object],Most notably reduces generated JS size (expect 3-20 %),[object Object],Draft compile mode: flag  -drafCompile,[object Object],No optimizations / Faster builds,[object Object],Not for deployment!,[object Object],GWTTestCase,[object Object],No more dependency on SWT,[object Object],No native code / browser required,[object Object],HtmlUnit: GUI-less browser written in Java,[object Object]
Pointers, Conclusion, etc.,[object Object]
Pointers,[object Object],GWT home (downloads, docs, FAQs, guides, etc.),[object Object],http://code.google.com/toolkit,[object Object],Google groups “GWT” group,[object Object],http://groups.google.com/group/Google-Web-Toolkit,[object Object],onGWT: fresh news about GWT,[object Object],http://www.ongwt.com,[object Object],LinkedIn “GWT Users” group,[object Object],http://www.linkedin.com/groups?gid=129889,[object Object]
Shameless self-promotion,[object Object]
Thank you,[object Object],Questions?,[object Object],gerardin.o@sfeir.lu,[object Object],blog.gerardin.info,[object Object],twitter: @ogerardin,[object Object]
1 of 49

Recommended

Integration tests: use the containers, Luke! by
Integration tests: use the containers, Luke!Integration tests: use the containers, Luke!
Integration tests: use the containers, Luke!Roberto Franchini
1.9K views75 slides
OrientDB - The 2nd generation of (multi-model) NoSQL by
OrientDB - The 2nd generation of  (multi-model) NoSQLOrientDB - The 2nd generation of  (multi-model) NoSQL
OrientDB - The 2nd generation of (multi-model) NoSQLRoberto Franchini
791 views55 slides
drmaatutggf12 by
drmaatutggf12drmaatutggf12
drmaatutggf12tutorialsruby
239 views23 slides
Qt test framework by
Qt test frameworkQt test framework
Qt test frameworkICS
10.1K views51 slides
Devfest09 Cschalk Gwt by
Devfest09 Cschalk GwtDevfest09 Cschalk Gwt
Devfest09 Cschalk GwtChris Schalk
649 views48 slides
GWT 2 Is Smarter Than You by
GWT 2 Is Smarter Than YouGWT 2 Is Smarter Than You
GWT 2 Is Smarter Than YouRobert Cooper
1.3K views29 slides

More Related Content

What's hot

Spring 4 advanced final_xtr_presentation by
Spring 4 advanced final_xtr_presentationSpring 4 advanced final_xtr_presentation
Spring 4 advanced final_xtr_presentationsourabh aggarwal
650 views48 slides
How to build to do app using vue composition api and vuex 4 with typescript by
How to build to do app using vue composition api and vuex 4 with typescriptHow to build to do app using vue composition api and vuex 4 with typescript
How to build to do app using vue composition api and vuex 4 with typescriptKaty Slemon
73 views29 slides
Qt for Python by
Qt for PythonQt for Python
Qt for PythonICS
2.4K views21 slides
Best Practices in Qt Quick/QML - Part 2 by
Best Practices in Qt Quick/QML - Part 2Best Practices in Qt Quick/QML - Part 2
Best Practices in Qt Quick/QML - Part 2Janel Heilbrunn
113 views38 slides
netbeans by
netbeansnetbeans
netbeanstutorialsruby
376 views22 slides
In the Brain of Hans Dockter: Gradle by
In the Brain of Hans Dockter: GradleIn the Brain of Hans Dockter: Gradle
In the Brain of Hans Dockter: GradleSkills Matter
1.5K views57 slides

What's hot(20)

Spring 4 advanced final_xtr_presentation by sourabh aggarwal
Spring 4 advanced final_xtr_presentationSpring 4 advanced final_xtr_presentation
Spring 4 advanced final_xtr_presentation
sourabh aggarwal650 views
How to build to do app using vue composition api and vuex 4 with typescript by Katy Slemon
How to build to do app using vue composition api and vuex 4 with typescriptHow to build to do app using vue composition api and vuex 4 with typescript
How to build to do app using vue composition api and vuex 4 with typescript
Katy Slemon73 views
Qt for Python by ICS
Qt for PythonQt for Python
Qt for Python
ICS2.4K views
Best Practices in Qt Quick/QML - Part 2 by Janel Heilbrunn
Best Practices in Qt Quick/QML - Part 2Best Practices in Qt Quick/QML - Part 2
Best Practices in Qt Quick/QML - Part 2
Janel Heilbrunn113 views
In the Brain of Hans Dockter: Gradle by Skills Matter
In the Brain of Hans Dockter: GradleIn the Brain of Hans Dockter: Gradle
In the Brain of Hans Dockter: Gradle
Skills Matter1.5K views
Kubernetes #4 volume &amp; stateful set by Terry Cho
Kubernetes #4   volume &amp; stateful setKubernetes #4   volume &amp; stateful set
Kubernetes #4 volume &amp; stateful set
Terry Cho2.3K views
Best Practices in Qt Quick/QML - Part I by ICS
Best Practices in Qt Quick/QML - Part IBest Practices in Qt Quick/QML - Part I
Best Practices in Qt Quick/QML - Part I
ICS14.4K views
Best Practices in Qt Quick/QML - Part III by ICS
Best Practices in Qt Quick/QML - Part IIIBest Practices in Qt Quick/QML - Part III
Best Practices in Qt Quick/QML - Part III
ICS16.4K views
Best Practices in Qt Quick/QML - Part 3 by ICS
Best Practices in Qt Quick/QML - Part 3Best Practices in Qt Quick/QML - Part 3
Best Practices in Qt Quick/QML - Part 3
ICS3.1K views
Java EE 01-Servlets and Containers by Fernando Gil
Java EE 01-Servlets and ContainersJava EE 01-Servlets and Containers
Java EE 01-Servlets and Containers
Fernando Gil2.2K views
Communication in Node.js by Edureka!
Communication in Node.jsCommunication in Node.js
Communication in Node.js
Edureka!2.8K views
Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO... by Christian Schneider
Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO...Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO...
Security DevOps - Wie Sie in agilen Projekten trotzdem sicher bleiben // DevO...
NTT SIC marketplace slide deck at Tokyo Summit by Toshikazu Ichikawa
NTT SIC marketplace slide deck at Tokyo SummitNTT SIC marketplace slide deck at Tokyo Summit
NTT SIC marketplace slide deck at Tokyo Summit
Toshikazu Ichikawa525 views

Similar to YaJUG: What's new in GWT2

GWT by
GWTGWT
GWTLorraine JUG
626 views68 slides
Google Web Toolkit Introduction - eXo Platform SEA by
Google Web Toolkit Introduction - eXo Platform SEAGoogle Web Toolkit Introduction - eXo Platform SEA
Google Web Toolkit Introduction - eXo Platform SEAnerazz08
1.1K views40 slides
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit by
Java Web Programming on Google Cloud Platform [3/3] : Google Web ToolkitJava Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web ToolkitIMC Institute
561 views55 slides
Google Web Toolkit by
Google Web ToolkitGoogle Web Toolkit
Google Web ToolkitSoftware Park Thailand
1.8K views55 slides
Gwt session by
Gwt sessionGwt session
Gwt sessionAhmed Akl
884 views44 slides
Gwt session by
Gwt sessionGwt session
Gwt sessionMans Jug
1.7K views44 slides

Similar to YaJUG: What's new in GWT2(20)

Google Web Toolkit Introduction - eXo Platform SEA by nerazz08
Google Web Toolkit Introduction - eXo Platform SEAGoogle Web Toolkit Introduction - eXo Platform SEA
Google Web Toolkit Introduction - eXo Platform SEA
nerazz081.1K views
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit by IMC Institute
Java Web Programming on Google Cloud Platform [3/3] : Google Web ToolkitJava Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
IMC Institute561 views
Gwt session by Ahmed Akl
Gwt sessionGwt session
Gwt session
Ahmed Akl884 views
Gwt session by Mans Jug
Gwt sessionGwt session
Gwt session
Mans Jug1.7K views
Javascript as a target language - GWT KickOff - Part 2/2 by JooinK
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
JooinK699 views
eXo Platform SEA - Play Framework Introduction by vstorm83
eXo Platform SEA - Play Framework IntroductioneXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework Introduction
vstorm83954 views
Google Web Toolkits by Yiguang Hu
Google Web ToolkitsGoogle Web Toolkits
Google Web Toolkits
Yiguang Hu1.4K views
Developing your first application using FIWARE by FIWARE
Developing your first application using FIWAREDeveloping your first application using FIWARE
Developing your first application using FIWARE
FIWARE1.7K views
CloudConnect 2011 - Building Highly Scalable Java Applications on Windows Azure by David Chou
CloudConnect 2011 - Building Highly Scalable Java Applications on Windows AzureCloudConnect 2011 - Building Highly Scalable Java Applications on Windows Azure
CloudConnect 2011 - Building Highly Scalable Java Applications on Windows Azure
David Chou4.5K views
Jdk Tools For Performance Diagnostics by Dror Bereznitsky
Jdk Tools For Performance DiagnosticsJdk Tools For Performance Diagnostics
Jdk Tools For Performance Diagnostics
Dror Bereznitsky1.8K views
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13 by Fred Sauer
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
Fred Sauer1.5K views
T 0230 Google Wave Powered By Gwt by supertoy2015
T 0230 Google Wave Powered By GwtT 0230 Google Wave Powered By Gwt
T 0230 Google Wave Powered By Gwt
supertoy2015680 views
Mastering Test Automation: How To Use Selenium Successfully by SpringPeople
Mastering Test Automation: How To Use Selenium SuccessfullyMastering Test Automation: How To Use Selenium Successfully
Mastering Test Automation: How To Use Selenium Successfully
SpringPeople1.5K views

Recently uploaded

Digital Personal Data Protection (DPDP) Practical Approach For CISOs by
Digital Personal Data Protection (DPDP) Practical Approach For CISOsDigital Personal Data Protection (DPDP) Practical Approach For CISOs
Digital Personal Data Protection (DPDP) Practical Approach For CISOsPriyanka Aash
103 views59 slides
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates by
Keynote Talk: Open Source is Not Dead - Charles Schulz - VatesKeynote Talk: Open Source is Not Dead - Charles Schulz - Vates
Keynote Talk: Open Source is Not Dead - Charles Schulz - VatesShapeBlue
178 views15 slides
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc
130 views29 slides
20231123_Camunda Meetup Vienna.pdf by
20231123_Camunda Meetup Vienna.pdf20231123_Camunda Meetup Vienna.pdf
20231123_Camunda Meetup Vienna.pdfPhactum Softwareentwicklung GmbH
49 views73 slides
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue by
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlueCloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlueShapeBlue
68 views13 slides
DRBD Deep Dive - Philipp Reisner - LINBIT by
DRBD Deep Dive - Philipp Reisner - LINBITDRBD Deep Dive - Philipp Reisner - LINBIT
DRBD Deep Dive - Philipp Reisner - LINBITShapeBlue
110 views21 slides

Recently uploaded(20)

Digital Personal Data Protection (DPDP) Practical Approach For CISOs by Priyanka Aash
Digital Personal Data Protection (DPDP) Practical Approach For CISOsDigital Personal Data Protection (DPDP) Practical Approach For CISOs
Digital Personal Data Protection (DPDP) Practical Approach For CISOs
Priyanka Aash103 views
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates by ShapeBlue
Keynote Talk: Open Source is Not Dead - Charles Schulz - VatesKeynote Talk: Open Source is Not Dead - Charles Schulz - Vates
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates
ShapeBlue178 views
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by TrustArc
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc130 views
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue by ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlueCloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
ShapeBlue68 views
DRBD Deep Dive - Philipp Reisner - LINBIT by ShapeBlue
DRBD Deep Dive - Philipp Reisner - LINBITDRBD Deep Dive - Philipp Reisner - LINBIT
DRBD Deep Dive - Philipp Reisner - LINBIT
ShapeBlue110 views
Confidence in CloudStack - Aron Wagner, Nathan Gleason - Americ by ShapeBlue
Confidence in CloudStack - Aron Wagner, Nathan Gleason - AmericConfidence in CloudStack - Aron Wagner, Nathan Gleason - Americ
Confidence in CloudStack - Aron Wagner, Nathan Gleason - Americ
ShapeBlue58 views
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue by ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlueVNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
ShapeBlue134 views
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda... by ShapeBlue
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
ShapeBlue93 views
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue by ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlueCloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
ShapeBlue63 views
NTGapps NTG LowCode Platform by Mustafa Kuğu
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform
Mustafa Kuğu287 views
Business Analyst Series 2023 - Week 4 Session 7 by DianaGray10
Business Analyst Series 2023 -  Week 4 Session 7Business Analyst Series 2023 -  Week 4 Session 7
Business Analyst Series 2023 - Week 4 Session 7
DianaGray10110 views
The Power of Heat Decarbonisation Plans in the Built Environment by IES VE
The Power of Heat Decarbonisation Plans in the Built EnvironmentThe Power of Heat Decarbonisation Plans in the Built Environment
The Power of Heat Decarbonisation Plans in the Built Environment
IES VE67 views
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT by ShapeBlue
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITUpdates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
ShapeBlue138 views
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue by ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueWhat’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
ShapeBlue191 views
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by ShapeBlue
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online
ShapeBlue154 views
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by ShapeBlue
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
ShapeBlue120 views
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by Network Automation Forum
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by ShapeBlue
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
ShapeBlue128 views

YaJUG: What's new in GWT2

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.