SlideShare a Scribd company logo
1 of 55
Download to read offline
Google Web Toolkit
Assoc.Prof. Dr.Thanachart Numnonda
 Asst.Prof. Thanisa Kruawaisayawan

    Mini Master of Java Technology
                KMITL
               July 2010
Agenda
RIA and AJAX

What is Google Web Toolkit?

GWT Implementation

GWT Components

GWT RPC
RIA and AJAX?
Rich Internet Applications
Web applications that have the features and functionality of
  traditional desktop applications
Typically transfer the processing necessary for the user
  interface to the web client but keep the bulk of the data back o
  n the application server.
Make asynchronous/synchronous calls to thebackend based
  on user actions/events
Thick Client Application.
Technologies for Building RIAs
Key Technologies
    –
        Adobe Flex
    –
        Microsoft Silverlight
    –
        Java
        Applets/WebStart
    –
        AJAX
Other Technologies and
 Frameworks
    –
       Java FX
    –
       Open Laszlo
What is AJAX?
Asynchronous JavaScript And XML.

DHTML plus Asynchronous communication capability through
 XMLHttpRequest.
Pros
        Most viable RIA technology so far
        Tremendous industry momentum
        Several toolkits and frameworks are emerging
        No need to download code & no plug-in required
Cons
        Still browser incompatibility
        JavaScript is hard to maintain and debug.
Why AJAX?
Intuitive and natural user interaction.
          No clicking required
          Mouse movement is a sufficient event trigger
Partial screen update replaces the "click, wait, and refresh"
  user interaction model

Asynchronous communication replaces "synchronous request/
  response model."
Interrupted user
operation while
the data is being
fetched




Uninterrupted
user operation
while data is
being fetched
Building RIAs using Java EE and AJAX
Client Side AJAX Development
        Presentation using HTML/JSP pages using client side
        frameworks such as Scriptaculous, JQuery, Dojo client side
        components.
        Presentation logic using JavaScript.
        Server Side development using traditional Java EE Servlets/
        Services exposing backend services as REST, XML RPC Web
        Services.
        Call backend business logic in the background using the
        JavaScript language and XMLHttpRequest object built into the
        browser.
Building RIAs using Java EE and AJAX
Server Side AJAX Development
        Presentation using component frameworks JSTL tag libraries
        such as Jboss RichFaces, Icesoft Icefaces built on on top of
        JSF
        Presentation logic done as event handlers in JSF component
        model
        Call to backend business logic using JSF event Model
Challenges with typical AJAX development
JavaScript
        Not a strongly typed language
        Static Type checking?
        Code completion?
        Runtime-only bugs
 Browser compatibilities = “if/else soup”
 Juggling multiple languages (JavaScript, JSP tags, Java, XML,
 HTML etc.)
 Poor debugging
        Window.alert(), Firebug
Sample Javascript
What is Google Web Toolkit?
What is GWT?

GWT is an open source Java development framework.
Provides set of tools for building AJAX apps in the
 Java language.
GWT converts your Java source into equivalent
 JavaScript
History of Web Frameworks




Source : COMPARING KICK-ASS WEB FRAMEWORKS, Matt Raible
Advantages of GWT
No need to learn/use JavaScript language

No need to handle browser incompatibilities and quirks

No need to learn/use DOM APIs

No need to handle forward/backward buttons browser-history

No need to build commonly used Widgets

Can send complex Java types to/from the server

Leverage various tools of Java programming language for

writing/debugging/testing
Disadvantages of GWT
Only for Java developers.

Big learning curve

Cumbersome deployment

Nonstandard approach to integrate JavaScript

Unusual approach
GWT Implementation
GWT Features
A Basic API for creating Graphical User Interfaces (GUI)
         Similar to Swing.
API for Manipulating the Web browser's Document Object
 Model (DOM).
Java to JavaScript Compiler.
         Only required to know Java, XML and CSS. No JavaScript. No
         HTML. No PHP/ASP/CGI.
An environment for running and debugging GWT applications
 called the GWT shell (Hosted Mode).
GWT Application Layout
Module descriptor : module is the name GWT uses for an
  individual application configuration.
Public resources : these are all files that will be served publicly
  (e.g. HTML page, CSS and images)
Client-side code : this is the Java code that the GWT compiler
  translates into JavaScript, which will eventually run inside the
  browser.
Server-side code (optional)—this is the server part of your
  GWT application
Module Descriptor
Inherited modules : these entries are comparable to import
  statements in normal Java classes, but for GWT applications.
Entry point class : details which classes serve as the entry
  points (class implements the EntryPoint interface)
Source path entries : the module descriptor allows you to
  customize the location of the client-side code.
Public path entries : these allow you to handle public path
  items such as source path entries.
Deferred binding rules : more advanced setting
Module Descriptor : Sample (Main.gwt.xml)


<?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
<module>
 <module>
   <inherits name="com.google.gwt.user.User"/>
    <inherits name="com.google.gwt.user.User"/>
   <entry-point class="org.thaijavadev.client.MainEntryPoint"/>
    <entry-point class="org.thaijavadev.client.MainEntryPoint"/>
</module>
 </module>
The Entry Point Class
Before we start building our user interface, we need to
  understand the Entry Point Class.
Think of this class as the main class of your application with
  the java main() method that the JVM invokes first.
The Entry Point class contains onModuleLoad() method which
  is the method that the GWT compiler calls first.
The class implements com.google.gwt.core.client.EntryPoint
  interface.
UI Components & Event : Sample
public class ButtonExample implements EntryPoint {{
 public class ButtonExample implements EntryPoint
     public void onModuleLoad() {{
      public void onModuleLoad()
          final ToggleButton messageToggleButton == new ToggleButton("UP",
           final ToggleButton messageToggleButton    new ToggleButton("UP",
               "DOWN");
                "DOWN");
          RootPanel.get().add(messageToggleButton);
           RootPanel.get().add(messageToggleButton);
          Hyperlink alertLink == new Hyperlink("Alert", "alert");
           Hyperlink alertLink    new Hyperlink("Alert", "alert");
          alertLink.addClickListener(new ClickListener() {{
           alertLink.addClickListener(new ClickListener()
               public void onClick(Widget widget) {{
                public void onClick(Widget widget)
                  if (messageToggleButton.isDown()) {{
                   if (messageToggleButton.isDown())
                     Window.alert("HELLLLP!!!!");
                      Window.alert("HELLLLP!!!!");
                  }} else {{
                      else
                      Window.alert("Take it easy and relax");
                       Window.alert("Take it easy and relax");
                  }}
                  }}
          });
           });
          RootPanel.get().add(alertLink);
           RootPanel.get().add(alertLink);
     }}
}}
Public Resource (welcomeGWT.html) : Sample
<html>
 <html>
        <head>
         <head>
             <meta name='gwt:module'
              <meta name='gwt:module'
   content='org.thaijavadev.Main=org.thaijavadev.Main'>
    content='org.thaijavadev.Main=org.thaijavadev.Main'>
              <link rel="stylesheet" href="Main.css"/>
               <link rel="stylesheet" href="Main.css"/>
           <title>Main</title>
            <title>Main</title>
       </head>
        </head>
       <body>
        <body>
             <script language="javascript"
              <script language="javascript"
   src="org.thaijavadev.Main/org.thaijavadev.Main.nocache.js"></script>
    src="org.thaijavadev.Main/org.thaijavadev.Main.nocache.js"></script>
       </body>
        </body>
</html>
 </html>
Public Resource (Main.css) : Sample
root {
 root {
     display: block;
      display: block;

}}
.gwt-Label {{
 .gwt-Label
font-size: 9px;
 font-size: 9px;
}}


.gwt-Button, .gwt-TextBox, .gwt-PasswordTextBox {{
 .gwt-Button, .gwt-TextBox, .gwt-PasswordTextBox
font-size: 9px;
 font-size: 9px;
height: 19px;
 height: 19px;
width: 75px;
 width: 75px;
}}
GWT Components
GWT Components
Available widgets
HTML primitives (Button, Radio Button, Checkbox, TextBox,
 PasswordTextBox, TextArea, Hyperlink, ListBox, Table etc.)
PushButton, ToggleButton
MenuBar
Tree
TabBar
DialogBox
Available widgets
Panels (PopupPanel, StackPanel, HorizontalPanel,
 VerticalPanel, FlowPanel, VerticalSplitPanel,
 HorizontalSplitPanel, DockPanel, TabPanel, DisclosurePanel)
RichTextArea
SuggestBox (auto-complete)
Available widgets
Available widgets
UI components & Event Programming Model
Programming model similar UI frameworks such as Swing

Primary difference between Swing and GWT is here widgets are
  dynamically transformed to HTML rather than pixel-oriented
  graphics
Using widgets makes it much easier to quickly build interfaces
  that will work correctly on all browsers.
Events in GWT use the "listener interface" model similar to
  other user interface frameworks (like Swing)
Entry Point Class : Sample
public class MainEntryPoint implements EntryPoint {
 public class MainEntryPoint implements EntryPoint {

     public void onModuleLoad() {{
      public void onModuleLoad()
         final Label label == new Label("Hello, GWT!!!");
          final Label label    new Label("Hello, GWT!!!");
          final Button button == new Button("Click me!");
           final Button button    new Button("Click me!");

          button.addClickHandler(new ClickHandler() {{
           button.addClickHandler(new ClickHandler()
              public void onClick(ClickEvent event) {{
               public void onClick(ClickEvent event)
                      label.setVisible(!label.isVisible());
                       label.setVisible(!label.isVisible());
                 }}
          });
           });

          RootPanel.get().add(button);
           RootPanel.get().add(button);
          RootPanel.get().add(label);
           RootPanel.get().add(label);
     }}
}}
Simple Layout Panels
Panels are used to organize the layout of the various widgets
 we have covered so far.
GWT has several layout widgets that provide this functionality
The simple Layout Panels include:
     FlowPanel
     VerticalPanel
     HorizontalPanel
FlowPanel
It functions like the HTML layout
Child widgets of the FlowPanel are displayed horizontally and
 then wrapped to the next row down when there is not enough
 horizontal room left:

FlowPanel flowPanel == new FlowPanel();
 FlowPanel flowPanel      new FlowPanel();
for( int ii == 1; ii <= 20; i++ )) {{
 for( int       1;    <= 20; i++
    flowPanel.add(new Button("Button "" ++ String.valueOf(i)));
     flowPanel.add(new Button("Button       String.valueOf(i)));
}}
RootPanel.get().add(flowPanel);
 RootPanel.get().add(flowPanel);
HorizontalPanel and VerticalPanel

HorizontalPanel is similar to FlowPanel but uses
 scrollbar to display its widgets if there is no enough
 room instead of displacing to the next row
VerticalPanel organizes its child widgets in a vertical
 orientation
DockPanel : Sample
public class GWTasks implements EntryPoint {{
 public class GWTasks implements EntryPoint
     public void onModuleLoad() {{
      public void onModuleLoad()
           DockPanel mainPanel == new DockPanel();
            DockPanel mainPanel    new DockPanel();
           mainPanel.setBorderWidth(5);
            mainPanel.setBorderWidth(5);
           mainPanel.setSize("100%", "100%");
            mainPanel.setSize("100%", "100%");
           mainPanel.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE);
            mainPanel.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE);
           mainPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER);
            mainPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER);
           Widget header == createHeaderWidget();
            Widget header    createHeaderWidget();
           mainPanel.add(header, DockPanel.NORTH);
            mainPanel.add(header, DockPanel.NORTH);
           mainPanel.setCellHeight(header, "30px");
            mainPanel.setCellHeight(header, "30px");
           Widget footer == createFooterWidget();
            Widget footer    createFooterWidget();
           mainPanel.add(footer, DockPanel.SOUTH);
            mainPanel.add(footer, DockPanel.SOUTH);
           mainPanel.setCellHeight(footer, "25px");
            mainPanel.setCellHeight(footer, "25px");
           Widget categories == createCategoriesWidget();
            Widget categories    createCategoriesWidget();
           mainPanel.add(categories, DockPanel.WEST);
            mainPanel.add(categories, DockPanel.WEST);
           mainPanel.setCellWidth(categories, "150px");
            mainPanel.setCellWidth(categories, "150px");
           Widget tasks == createTasksWidget();
            Widget tasks    createTasksWidget();
DockPanel : Sample (Cont.)
          mainPanel.add(tasks, DockPanel.EAST);
           mainPanel.add(tasks, DockPanel.EAST);
          RootPanel.get().add(mainPanel);
           RootPanel.get().add(mainPanel);
               }}
     protected Widget createHeaderWidget() {{
      protected Widget createHeaderWidget()
          return new Label("Header");
           return new Label("Header");
     }}
     protected Widget createFooterWidget() {{
      protected Widget createFooterWidget()
          return new Label("Footer");
           return new Label("Footer");
     }}
     protected Widget createCategoriesWidget() {{
      protected Widget createCategoriesWidget()
          return new Label("Categories List");
           return new Label("Categories List");
     }}
     protected Widget createTasksWidget() {{
      protected Widget createTasksWidget()
          return new Label("Tasks List");
           return new Label("Tasks List");
     }}
}}
DockPanel : Sample Output
GWT-RPC
Communication with the Server

GWT support communication between the client-side browser
 and the server via GWT-RPC and Basic Ajax.
GWT use asynchronous communication to provide the rich UI
 experience expected from RIAs.
The details of communicating a message between client and
 server and vice versa can be abstracted away by frameworks
GWT RPC allows you to program your communication by
 calling a method on a Java interface.
GWT-RPC
GWT extends a browser’s capability to asynchronously
 communicate with the server by providing a remote procedure
 call (RPC) library.
Calls to the server are simplified by providing you with an
 interface of methods that can be called similarly to regular
 method calls.
GWT marshal the calls (convert to a stream of data) and send
 to the remote server.
At the server side, the data, is un-marshalled the method on
 the server is invoked
GWT-RPC
GWT uses a pure Java implementation.
In GWT, the RPC library is divided into two packages:
     com.google.gwt.user.client.rpc package used for client-side RPC
     support .
     com.google.gwt.user.server.rpc package used for server-side RPC
     support . The client side provides interfaces that you can use to tag.
When the client code is compiled to Javascript using the
 GWT compiler, the code required to do the RPC marshaling will
 be generated .
RPC Plumbing Diagram
Implementing GWT-RPC Services

Define an interface for your service that extends
 RemoteService and lists all your RPC methods.
 Define a class to implement the server-side code that extends
 RemoteServiceServlet and implements the interface you
 created above.
Define an asynchronous interface to your service to be called
 from the client-side code.
A client-side Java interface

Create a client-side Java interface that extends the
 RemoteService tag interface.


import com.google.gwt.user.client.rpc.RemoteService;
 import com.google.gwt.user.client.rpc.RemoteService;


public interface MyService extends RemoteService {{
 public interface MyService extends RemoteService
  public String myMethod(String s);
   public String myMethod(String s);
}}
Implement the remote method

Implement the service on the server-side by a class that
 extend RemoteServiceServlet.
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
 import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.example.client.MyService;
 import com.example.client.MyService;


public class MyServiceImpl extends RemoteServiceServlet implements
 public class MyServiceImpl extends RemoteServiceServlet implements
    MyService {{
     MyService


  public String myMethod(String s) {{
   public String myMethod(String s)
    // Do something interesting with 's' here on the server.
     // Do something interesting with 's' here on the server.
       return s;
        return s;
  }}
Asynchronous Interfaces

This interface defines the callback method that will be called
 when the server generates a response.


interface MyServiceAsync {{
 interface MyServiceAsync
  public void myMethod(String s, AsyncCallback<String> callback);
   public void myMethod(String s, AsyncCallback<String> callback);
}}
 }}
Making an RPC from the client

Instantiate the service interface using GWT.create().
Create an asynchronous callback object to be notified when
 the RPC has completed.
Make the call .
Making a Call: Sample
public class MainEntryPoint implements EntryPoint {{
 public class MainEntryPoint implements EntryPoint

    public MainEntryPoint() {{
     public MainEntryPoint()
    }}
    public void onModuleLoad() {{
     public void onModuleLoad()
        getService().myMethod("Hello World", callback);
         getService().myMethod("Hello World", callback);
    }}


    final AsyncCallback callback == new AsyncCallback() {{
     final AsyncCallback callback    new AsyncCallback()
            public void onSuccess(Object result) {{
             public void onSuccess(Object result)
                 Window.alert((String)result);
                  Window.alert((String)result);
            }}


            public void onFailure(Throwable caught) {{
             public void onFailure(Throwable caught)
                Window.alert("Communication failed");
                 Window.alert("Communication failed");
            }}
    };
     };
Making a Call: Sample (Cont.)

     public static MyServiceAsync getService(){
      public static MyServiceAsync getService(){

          MyServiceAsync service == (MyServiceAsync)
           MyServiceAsync service    (MyServiceAsync)
              GWT.create(MyService.class);
               GWT.create(MyService.class);

          ServiceDefTarget endpoint == (ServiceDefTarget) service;
           ServiceDefTarget endpoint    (ServiceDefTarget) service;
          String moduleRelativeURL == GWT.getModuleBaseURL() ++ "myservice";
           String moduleRelativeURL    GWT.getModuleBaseURL()    "myservice";
          endpoint.setServiceEntryPoint(moduleRelativeURL);
           endpoint.setServiceEntryPoint(moduleRelativeURL);
          return service;
           return service;
     }}


}}
Resources
Building Rich Internet Applications Using Google Web Toolkit
 (GWT), Karthik Shyamsunder, Oct 2008.
Introduction to Google Web Toolkit, Muhammad Ghazali.
Official Google Web Tool Kit Tutorial,
 http://code.google.com/webtoolkit/doc/latest/tutorial/
Beginning Google Web Toolkit from Novice to Professional,
 Apress, 2009
Thank you

  thananum@gmail.com
  twitter.com/thanachart
www.facebook.com/thanachart
  www.thaijavadev.com

More Related Content

What's hot (20)

JavaScript Control Statements II
JavaScript Control Statements IIJavaScript Control Statements II
JavaScript Control Statements II
 
Network programming in java - PPT
Network programming in java - PPTNetwork programming in java - PPT
Network programming in java - PPT
 
Java interfaces
Java interfacesJava interfaces
Java interfaces
 
Introduction to spring boot
Introduction to spring bootIntroduction to spring boot
Introduction to spring boot
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applications
 
Flask
FlaskFlask
Flask
 
Java/Servlet/JSP/JDBC
Java/Servlet/JSP/JDBCJava/Servlet/JSP/JDBC
Java/Servlet/JSP/JDBC
 
18CSMP68 VTU Mobile Application Develeopment Lab Manual by Nithin, VVCE, Mysuru
18CSMP68 VTU Mobile Application Develeopment Lab Manual by Nithin, VVCE, Mysuru18CSMP68 VTU Mobile Application Develeopment Lab Manual by Nithin, VVCE, Mysuru
18CSMP68 VTU Mobile Application Develeopment Lab Manual by Nithin, VVCE, Mysuru
 
Web services SOAP
Web services SOAPWeb services SOAP
Web services SOAP
 
Core java concepts
Core java  conceptsCore java  concepts
Core java concepts
 
Introduction to c#
Introduction to c#Introduction to c#
Introduction to c#
 
Applets in java
Applets in javaApplets in java
Applets in java
 
Java11 New Features
Java11 New FeaturesJava11 New Features
Java11 New Features
 
Java Presentation
Java PresentationJava Presentation
Java Presentation
 
Android app development ppt
Android app development pptAndroid app development ppt
Android app development ppt
 
Java Programming
Java ProgrammingJava Programming
Java Programming
 
Threads
ThreadsThreads
Threads
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
 
Presentation on Core java
Presentation on Core javaPresentation on Core java
Presentation on Core java
 
A Basic Django Introduction
A Basic Django IntroductionA Basic Django Introduction
A Basic Django Introduction
 

Viewers also liked

Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012Software Park Thailand
 
Business Strategy and Policy For Next Generation: Social Media Related DC
Business Strategy and Policy  For Next Generation: Social Media Related DCBusiness Strategy and Policy  For Next Generation: Social Media Related DC
Business Strategy and Policy For Next Generation: Social Media Related DCSoftware Park Thailand
 
Managing Security and Delivering Performance in the Cloud
Managing Security and Delivering Performance in the Cloud Managing Security and Delivering Performance in the Cloud
Managing Security and Delivering Performance in the Cloud Software Park Thailand
 
Driving Business Growth in the Age of Innovation
Driving Business Growth in the Age of InnovationDriving Business Growth in the Age of Innovation
Driving Business Growth in the Age of InnovationSoftware Park Thailand
 
ซอฟต์แวร์ไทยสู่เวทีโลกด้วย Windows azure overview
ซอฟต์แวร์ไทยสู่เวทีโลกด้วย Windows azure overviewซอฟต์แวร์ไทยสู่เวทีโลกด้วย Windows azure overview
ซอฟต์แวร์ไทยสู่เวทีโลกด้วย Windows azure overviewSoftware Park Thailand
 
Presentation ให้นักศึกษา ม.ขอนแก่น ที่มาเยี่ยมชม Software Park ในวันที่ 17 ต....
Presentation ให้นักศึกษา ม.ขอนแก่น ที่มาเยี่ยมชม Software Park ในวันที่ 17 ต....Presentation ให้นักศึกษา ม.ขอนแก่น ที่มาเยี่ยมชม Software Park ในวันที่ 17 ต....
Presentation ให้นักศึกษา ม.ขอนแก่น ที่มาเยี่ยมชม Software Park ในวันที่ 17 ต....Software Park Thailand
 
Thai Software Companies at CommunicAsia 2012
Thai Software Companies at CommunicAsia 2012Thai Software Companies at CommunicAsia 2012
Thai Software Companies at CommunicAsia 2012Software Park Thailand
 
แถลงข่าว “บริษัทซอฟต์แวร์ไทยผงาดขึ้นแท่นที่ 1 ในอาเซียน”
แถลงข่าว “บริษัทซอฟต์แวร์ไทยผงาดขึ้นแท่นที่ 1 ในอาเซียน”แถลงข่าว “บริษัทซอฟต์แวร์ไทยผงาดขึ้นแท่นที่ 1 ในอาเซียน”
แถลงข่าว “บริษัทซอฟต์แวร์ไทยผงาดขึ้นแท่นที่ 1 ในอาเซียน”Software Park Thailand
 
Key success factors for managing software business
Key success factors for managing software businessKey success factors for managing software business
Key success factors for managing software businessSoftware Park Thailand
 
Software Park Thailand Newsletter (Thai) Vol2/2556
Software Park Thailand Newsletter (Thai) Vol2/2556Software Park Thailand Newsletter (Thai) Vol2/2556
Software Park Thailand Newsletter (Thai) Vol2/2556Software Park Thailand
 
นวัตกรรมที่ควรเรียนรู้ในศตวรรษที่ 21
นวัตกรรมที่ควรเรียนรู้ในศตวรรษที่ 21นวัตกรรมที่ควรเรียนรู้ในศตวรรษที่ 21
นวัตกรรมที่ควรเรียนรู้ในศตวรรษที่ 21Software Park Thailand
 

Viewers also liked (20)

Thai IT Delegation to Japan 2012
Thai IT Delegation to Japan 2012Thai IT Delegation to Japan 2012
Thai IT Delegation to Japan 2012
 
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
 
Business Strategy and Policy For Next Generation: Social Media Related DC
Business Strategy and Policy  For Next Generation: Social Media Related DCBusiness Strategy and Policy  For Next Generation: Social Media Related DC
Business Strategy and Policy For Next Generation: Social Media Related DC
 
Managing Security and Delivering Performance in the Cloud
Managing Security and Delivering Performance in the Cloud Managing Security and Delivering Performance in the Cloud
Managing Security and Delivering Performance in the Cloud
 
Backdrop ballroom c
Backdrop ballroom cBackdrop ballroom c
Backdrop ballroom c
 
Zero Downtime Migration
Zero Downtime MigrationZero Downtime Migration
Zero Downtime Migration
 
Driving Business Growth in the Age of Innovation
Driving Business Growth in the Age of InnovationDriving Business Growth in the Age of Innovation
Driving Business Growth in the Age of Innovation
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
ซอฟต์แวร์ไทยสู่เวทีโลกด้วย Windows azure overview
ซอฟต์แวร์ไทยสู่เวทีโลกด้วย Windows azure overviewซอฟต์แวร์ไทยสู่เวทีโลกด้วย Windows azure overview
ซอฟต์แวร์ไทยสู่เวทีโลกด้วย Windows azure overview
 
Presentation ให้นักศึกษา ม.ขอนแก่น ที่มาเยี่ยมชม Software Park ในวันที่ 17 ต....
Presentation ให้นักศึกษา ม.ขอนแก่น ที่มาเยี่ยมชม Software Park ในวันที่ 17 ต....Presentation ให้นักศึกษา ม.ขอนแก่น ที่มาเยี่ยมชม Software Park ในวันที่ 17 ต....
Presentation ให้นักศึกษา ม.ขอนแก่น ที่มาเยี่ยมชม Software Park ในวันที่ 17 ต....
 
Spin intro-v6
Spin intro-v6Spin intro-v6
Spin intro-v6
 
Thai Software Companies at CommunicAsia 2012
Thai Software Companies at CommunicAsia 2012Thai Software Companies at CommunicAsia 2012
Thai Software Companies at CommunicAsia 2012
 
แถลงข่าว “บริษัทซอฟต์แวร์ไทยผงาดขึ้นแท่นที่ 1 ในอาเซียน”
แถลงข่าว “บริษัทซอฟต์แวร์ไทยผงาดขึ้นแท่นที่ 1 ในอาเซียน”แถลงข่าว “บริษัทซอฟต์แวร์ไทยผงาดขึ้นแท่นที่ 1 ในอาเซียน”
แถลงข่าว “บริษัทซอฟต์แวร์ไทยผงาดขึ้นแท่นที่ 1 ในอาเซียน”
 
Introduction to Datastore
Introduction to DatastoreIntroduction to Datastore
Introduction to Datastore
 
List of CMMI's companies in Thailand
List of CMMI's companies in ThailandList of CMMI's companies in Thailand
List of CMMI's companies in Thailand
 
Business model
Business modelBusiness model
Business model
 
Key success factors for managing software business
Key success factors for managing software businessKey success factors for managing software business
Key success factors for managing software business
 
Software Park Thailand Newsletter (Thai) Vol2/2556
Software Park Thailand Newsletter (Thai) Vol2/2556Software Park Thailand Newsletter (Thai) Vol2/2556
Software Park Thailand Newsletter (Thai) Vol2/2556
 
Technology Trends
Technology TrendsTechnology Trends
Technology Trends
 
นวัตกรรมที่ควรเรียนรู้ในศตวรรษที่ 21
นวัตกรรมที่ควรเรียนรู้ในศตวรรษที่ 21นวัตกรรมที่ควรเรียนรู้ในศตวรรษที่ 21
นวัตกรรมที่ควรเรียนรู้ในศตวรรษที่ 21
 

Similar to Google Web Toolkit

Vaadin 7 CN
Vaadin 7 CNVaadin 7 CN
Vaadin 7 CNjojule
 
Google Web Toolkits
Google Web ToolkitsGoogle Web Toolkits
Google Web ToolkitsYiguang Hu
 
Google Web Toolkit Introduction - eXo Platform SEA
Google Web Toolkit Introduction - eXo Platform SEAGoogle Web Toolkit Introduction - eXo Platform SEA
Google Web Toolkit Introduction - eXo Platform SEAnerazz08
 
Rob Tweed :: Ajax and the Impact on Caché and Similar Technologies
Rob Tweed :: Ajax and the Impact on Caché and Similar TechnologiesRob Tweed :: Ajax and the Impact on Caché and Similar Technologies
Rob Tweed :: Ajax and the Impact on Caché and Similar Technologiesgeorge.james
 
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
 
CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2Geoffrey Fox
 
GWT Training - Session 1/3
GWT Training - Session 1/3GWT Training - Session 1/3
GWT Training - Session 1/3Faiz Bashir
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
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-13Fred Sauer
 
Introduction to Google Web Toolkit
Introduction to Google Web ToolkitIntroduction to Google Web Toolkit
Introduction to Google Web ToolkitDidier Girard
 
Beyond HTML: Tools for Building Web 2.0 Apps
Beyond HTML: Tools for Building Web 2.0 AppsBeyond HTML: Tools for Building Web 2.0 Apps
Beyond HTML: Tools for Building Web 2.0 AppsMarcos Caceres
 
GWT 2 Is Smarter Than You
GWT 2 Is Smarter Than YouGWT 2 Is Smarter Than You
GWT 2 Is Smarter Than YouRobert Cooper
 
Gwt session
Gwt sessionGwt session
Gwt sessionMans Jug
 
GWT training session 1
GWT training session 1GWT training session 1
GWT training session 1SNEHAL MASNE
 

Similar to Google Web Toolkit (20)

GWT
GWTGWT
GWT
 
Vaadin 7 CN
Vaadin 7 CNVaadin 7 CN
Vaadin 7 CN
 
Google Web Toolkits
Google Web ToolkitsGoogle Web Toolkits
Google Web Toolkits
 
Google Web Toolkit Introduction - eXo Platform SEA
Google Web Toolkit Introduction - eXo Platform SEAGoogle Web Toolkit Introduction - eXo Platform SEA
Google Web Toolkit Introduction - eXo Platform SEA
 
Rob Tweed :: Ajax and the Impact on Caché and Similar Technologies
Rob Tweed :: Ajax and the Impact on Caché and Similar TechnologiesRob Tweed :: Ajax and the Impact on Caché and Similar Technologies
Rob Tweed :: Ajax and the Impact on Caché and Similar Technologies
 
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
 
CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2CTS Conference Web 2.0 Tutorial Part 2
CTS Conference Web 2.0 Tutorial Part 2
 
GWT Training - Session 1/3
GWT Training - Session 1/3GWT Training - Session 1/3
GWT Training - Session 1/3
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
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
 
Vaadin & Web Components
Vaadin & Web ComponentsVaadin & Web Components
Vaadin & Web Components
 
Introduction to Google Web Toolkit
Introduction to Google Web ToolkitIntroduction to Google Web Toolkit
Introduction to Google Web Toolkit
 
Gwt Presentation1
Gwt Presentation1Gwt Presentation1
Gwt Presentation1
 
JavaCro'14 - Building interactive web applications with Vaadin – Peter Lehto
JavaCro'14 - Building interactive web applications with Vaadin – Peter LehtoJavaCro'14 - Building interactive web applications with Vaadin – Peter Lehto
JavaCro'14 - Building interactive web applications with Vaadin – Peter Lehto
 
Beyond HTML: Tools for Building Web 2.0 Apps
Beyond HTML: Tools for Building Web 2.0 AppsBeyond HTML: Tools for Building Web 2.0 Apps
Beyond HTML: Tools for Building Web 2.0 Apps
 
GWT 2 Is Smarter Than You
GWT 2 Is Smarter Than YouGWT 2 Is Smarter Than You
GWT 2 Is Smarter Than You
 
Gwt session
Gwt sessionGwt session
Gwt session
 
Gwt session
Gwt sessionGwt session
Gwt session
 
GWT training session 1
GWT training session 1GWT training session 1
GWT training session 1
 
YaJUG: What's new in GWT2
YaJUG: What's new in GWT2YaJUG: What's new in GWT2
YaJUG: What's new in GWT2
 
Hybrid app
Hybrid appHybrid app
Hybrid app
 

More from Software Park Thailand

Software Park Newsletter Thai Vol 3/25561
Software Park Newsletter Thai Vol 3/25561Software Park Newsletter Thai Vol 3/25561
Software Park Newsletter Thai Vol 3/25561Software Park Thailand
 
Solfware park Newsletter Vol 3/2013 Eng Version
Solfware park Newsletter Vol 3/2013 Eng VersionSolfware park Newsletter Vol 3/2013 Eng Version
Solfware park Newsletter Vol 3/2013 Eng VersionSoftware Park Thailand
 
Software Park Thailand Newsletter Vol 3/2556
Software Park Thailand Newsletter Vol 3/2556Software Park Thailand Newsletter Vol 3/2556
Software Park Thailand Newsletter Vol 3/2556Software Park Thailand
 
Software Park Thailand Newsletter (Eng) Vol3/2012
Software Park Thailand Newsletter (Eng) Vol3/2012Software Park Thailand Newsletter (Eng) Vol3/2012
Software Park Thailand Newsletter (Eng) Vol3/2012Software Park Thailand
 
Software Park Thailand Newsletter (Eng) Vol5/2013
Software Park Thailand Newsletter (Eng) Vol5/2013Software Park Thailand Newsletter (Eng) Vol5/2013
Software Park Thailand Newsletter (Eng) Vol5/2013Software Park Thailand
 
Software Park Thailand Newsletter (Thai) Vol4/2555
Software Park Thailand Newsletter (Thai) Vol4/2555Software Park Thailand Newsletter (Thai) Vol4/2555
Software Park Thailand Newsletter (Thai) Vol4/2555Software Park Thailand
 
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)Software Park Thailand
 
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"Software Park Thailand
 
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...Software Park Thailand
 
Software Park Newsletter Vol. 4/2012 English Version
Software Park Newsletter Vol. 4/2012 English VersionSoftware Park Newsletter Vol. 4/2012 English Version
Software Park Newsletter Vol. 4/2012 English VersionSoftware Park Thailand
 
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012Software Park Thailand
 
Thai IT Business Development Delegation to Tokyo, Japan: November 2012
Thai IT Business Development Delegation to Tokyo, Japan: November 2012 Thai IT Business Development Delegation to Tokyo, Japan: November 2012
Thai IT Business Development Delegation to Tokyo, Japan: November 2012 Software Park Thailand
 
Technology Trends : Impacts to Thai Industries
Technology Trends : Impacts to Thai IndustriesTechnology Trends : Impacts to Thai Industries
Technology Trends : Impacts to Thai IndustriesSoftware Park Thailand
 

More from Software Park Thailand (20)

Smart industry Vol.33/2561
Smart industry Vol.33/2561Smart industry Vol.33/2561
Smart industry Vol.33/2561
 
Softwarepark news Vol.7/2561
Softwarepark news Vol.7/2561Softwarepark news Vol.7/2561
Softwarepark news Vol.7/2561
 
Software Park Newsletter Thai Vol 3/25561
Software Park Newsletter Thai Vol 3/25561Software Park Newsletter Thai Vol 3/25561
Software Park Newsletter Thai Vol 3/25561
 
Smart Industry Vol.23
Smart Industry Vol.23Smart Industry Vol.23
Smart Industry Vol.23
 
Solfware park Newsletter Vol 3/2013 Eng Version
Solfware park Newsletter Vol 3/2013 Eng VersionSolfware park Newsletter Vol 3/2013 Eng Version
Solfware park Newsletter Vol 3/2013 Eng Version
 
Software Park Thailand Newsletter Vol 3/2556
Software Park Thailand Newsletter Vol 3/2556Software Park Thailand Newsletter Vol 3/2556
Software Park Thailand Newsletter Vol 3/2556
 
Software Park Thailand Newsletter (Eng) Vol3/2012
Software Park Thailand Newsletter (Eng) Vol3/2012Software Park Thailand Newsletter (Eng) Vol3/2012
Software Park Thailand Newsletter (Eng) Vol3/2012
 
Software Park Thailand Newsletter (Eng) Vol5/2013
Software Park Thailand Newsletter (Eng) Vol5/2013Software Park Thailand Newsletter (Eng) Vol5/2013
Software Park Thailand Newsletter (Eng) Vol5/2013
 
Software Park Thailand Newsletter (Thai) Vol4/2555
Software Park Thailand Newsletter (Thai) Vol4/2555Software Park Thailand Newsletter (Thai) Vol4/2555
Software Park Thailand Newsletter (Thai) Vol4/2555
 
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
 
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
 
Software newsletter
Software newsletterSoftware newsletter
Software newsletter
 
Smart industry Vol. 21/2556
Smart industry Vol. 21/2556Smart industry Vol. 21/2556
Smart industry Vol. 21/2556
 
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
 
Software Park Newsletter Vol. 4/2012 English Version
Software Park Newsletter Vol. 4/2012 English VersionSoftware Park Newsletter Vol. 4/2012 English Version
Software Park Newsletter Vol. 4/2012 English Version
 
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
 
Thai IT Business Development Delegation to Tokyo, Japan: November 2012
Thai IT Business Development Delegation to Tokyo, Japan: November 2012 Thai IT Business Development Delegation to Tokyo, Japan: November 2012
Thai IT Business Development Delegation to Tokyo, Japan: November 2012
 
Smart industry Vol. 20/2555
Smart industry Vol. 20/2555Smart industry Vol. 20/2555
Smart industry Vol. 20/2555
 
Technology Trends : Impacts to Thai Industries
Technology Trends : Impacts to Thai IndustriesTechnology Trends : Impacts to Thai Industries
Technology Trends : Impacts to Thai Industries
 
Cloud Thailand Alliance
Cloud Thailand AllianceCloud Thailand Alliance
Cloud Thailand Alliance
 

Recently uploaded

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
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.pdfsudhanshuwaghmare1
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 

Recently uploaded (20)

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
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
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

Google Web Toolkit

  • 1. Google Web Toolkit Assoc.Prof. Dr.Thanachart Numnonda Asst.Prof. Thanisa Kruawaisayawan Mini Master of Java Technology KMITL July 2010
  • 2. Agenda RIA and AJAX What is Google Web Toolkit? GWT Implementation GWT Components GWT RPC
  • 4. Rich Internet Applications Web applications that have the features and functionality of traditional desktop applications Typically transfer the processing necessary for the user interface to the web client but keep the bulk of the data back o n the application server. Make asynchronous/synchronous calls to thebackend based on user actions/events Thick Client Application.
  • 5. Technologies for Building RIAs Key Technologies – Adobe Flex – Microsoft Silverlight – Java Applets/WebStart – AJAX Other Technologies and Frameworks – Java FX – Open Laszlo
  • 6. What is AJAX? Asynchronous JavaScript And XML. DHTML plus Asynchronous communication capability through XMLHttpRequest. Pros Most viable RIA technology so far Tremendous industry momentum Several toolkits and frameworks are emerging No need to download code & no plug-in required Cons Still browser incompatibility JavaScript is hard to maintain and debug.
  • 7. Why AJAX? Intuitive and natural user interaction. No clicking required Mouse movement is a sufficient event trigger Partial screen update replaces the "click, wait, and refresh" user interaction model Asynchronous communication replaces "synchronous request/ response model."
  • 8. Interrupted user operation while the data is being fetched Uninterrupted user operation while data is being fetched
  • 9.
  • 10. Building RIAs using Java EE and AJAX Client Side AJAX Development Presentation using HTML/JSP pages using client side frameworks such as Scriptaculous, JQuery, Dojo client side components. Presentation logic using JavaScript. Server Side development using traditional Java EE Servlets/ Services exposing backend services as REST, XML RPC Web Services. Call backend business logic in the background using the JavaScript language and XMLHttpRequest object built into the browser.
  • 11. Building RIAs using Java EE and AJAX Server Side AJAX Development Presentation using component frameworks JSTL tag libraries such as Jboss RichFaces, Icesoft Icefaces built on on top of JSF Presentation logic done as event handlers in JSF component model Call to backend business logic using JSF event Model
  • 12. Challenges with typical AJAX development JavaScript Not a strongly typed language Static Type checking? Code completion? Runtime-only bugs Browser compatibilities = “if/else soup” Juggling multiple languages (JavaScript, JSP tags, Java, XML, HTML etc.) Poor debugging Window.alert(), Firebug
  • 14. What is Google Web Toolkit?
  • 15. What is GWT? GWT is an open source Java development framework. Provides set of tools for building AJAX apps in the Java language. GWT converts your Java source into equivalent JavaScript
  • 16. History of Web Frameworks Source : COMPARING KICK-ASS WEB FRAMEWORKS, Matt Raible
  • 17. Advantages of GWT No need to learn/use JavaScript language No need to handle browser incompatibilities and quirks No need to learn/use DOM APIs No need to handle forward/backward buttons browser-history No need to build commonly used Widgets Can send complex Java types to/from the server Leverage various tools of Java programming language for writing/debugging/testing
  • 18. Disadvantages of GWT Only for Java developers. Big learning curve Cumbersome deployment Nonstandard approach to integrate JavaScript Unusual approach
  • 20. GWT Features A Basic API for creating Graphical User Interfaces (GUI) Similar to Swing. API for Manipulating the Web browser's Document Object Model (DOM). Java to JavaScript Compiler. Only required to know Java, XML and CSS. No JavaScript. No HTML. No PHP/ASP/CGI. An environment for running and debugging GWT applications called the GWT shell (Hosted Mode).
  • 21. GWT Application Layout Module descriptor : module is the name GWT uses for an individual application configuration. Public resources : these are all files that will be served publicly (e.g. HTML page, CSS and images) Client-side code : this is the Java code that the GWT compiler translates into JavaScript, which will eventually run inside the browser. Server-side code (optional)—this is the server part of your GWT application
  • 22. Module Descriptor Inherited modules : these entries are comparable to import statements in normal Java classes, but for GWT applications. Entry point class : details which classes serve as the entry points (class implements the EntryPoint interface) Source path entries : the module descriptor allows you to customize the location of the client-side code. Public path entries : these allow you to handle public path items such as source path entries. Deferred binding rules : more advanced setting
  • 23. Module Descriptor : Sample (Main.gwt.xml) <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?> <module> <module> <inherits name="com.google.gwt.user.User"/> <inherits name="com.google.gwt.user.User"/> <entry-point class="org.thaijavadev.client.MainEntryPoint"/> <entry-point class="org.thaijavadev.client.MainEntryPoint"/> </module> </module>
  • 24. The Entry Point Class Before we start building our user interface, we need to understand the Entry Point Class. Think of this class as the main class of your application with the java main() method that the JVM invokes first. The Entry Point class contains onModuleLoad() method which is the method that the GWT compiler calls first. The class implements com.google.gwt.core.client.EntryPoint interface.
  • 25. UI Components & Event : Sample public class ButtonExample implements EntryPoint {{ public class ButtonExample implements EntryPoint public void onModuleLoad() {{ public void onModuleLoad() final ToggleButton messageToggleButton == new ToggleButton("UP", final ToggleButton messageToggleButton new ToggleButton("UP", "DOWN"); "DOWN"); RootPanel.get().add(messageToggleButton); RootPanel.get().add(messageToggleButton); Hyperlink alertLink == new Hyperlink("Alert", "alert"); Hyperlink alertLink new Hyperlink("Alert", "alert"); alertLink.addClickListener(new ClickListener() {{ alertLink.addClickListener(new ClickListener() public void onClick(Widget widget) {{ public void onClick(Widget widget) if (messageToggleButton.isDown()) {{ if (messageToggleButton.isDown()) Window.alert("HELLLLP!!!!"); Window.alert("HELLLLP!!!!"); }} else {{ else Window.alert("Take it easy and relax"); Window.alert("Take it easy and relax"); }} }} }); }); RootPanel.get().add(alertLink); RootPanel.get().add(alertLink); }} }}
  • 26. Public Resource (welcomeGWT.html) : Sample <html> <html> <head> <head> <meta name='gwt:module' <meta name='gwt:module' content='org.thaijavadev.Main=org.thaijavadev.Main'> content='org.thaijavadev.Main=org.thaijavadev.Main'> <link rel="stylesheet" href="Main.css"/> <link rel="stylesheet" href="Main.css"/> <title>Main</title> <title>Main</title> </head> </head> <body> <body> <script language="javascript" <script language="javascript" src="org.thaijavadev.Main/org.thaijavadev.Main.nocache.js"></script> src="org.thaijavadev.Main/org.thaijavadev.Main.nocache.js"></script> </body> </body> </html> </html>
  • 27. Public Resource (Main.css) : Sample root { root { display: block; display: block; }} .gwt-Label {{ .gwt-Label font-size: 9px; font-size: 9px; }} .gwt-Button, .gwt-TextBox, .gwt-PasswordTextBox {{ .gwt-Button, .gwt-TextBox, .gwt-PasswordTextBox font-size: 9px; font-size: 9px; height: 19px; height: 19px; width: 75px; width: 75px; }}
  • 30. Available widgets HTML primitives (Button, Radio Button, Checkbox, TextBox, PasswordTextBox, TextArea, Hyperlink, ListBox, Table etc.) PushButton, ToggleButton MenuBar Tree TabBar DialogBox
  • 31. Available widgets Panels (PopupPanel, StackPanel, HorizontalPanel, VerticalPanel, FlowPanel, VerticalSplitPanel, HorizontalSplitPanel, DockPanel, TabPanel, DisclosurePanel) RichTextArea SuggestBox (auto-complete)
  • 34. UI components & Event Programming Model Programming model similar UI frameworks such as Swing Primary difference between Swing and GWT is here widgets are dynamically transformed to HTML rather than pixel-oriented graphics Using widgets makes it much easier to quickly build interfaces that will work correctly on all browsers. Events in GWT use the "listener interface" model similar to other user interface frameworks (like Swing)
  • 35. Entry Point Class : Sample public class MainEntryPoint implements EntryPoint { public class MainEntryPoint implements EntryPoint { public void onModuleLoad() {{ public void onModuleLoad() final Label label == new Label("Hello, GWT!!!"); final Label label new Label("Hello, GWT!!!"); final Button button == new Button("Click me!"); final Button button new Button("Click me!"); button.addClickHandler(new ClickHandler() {{ button.addClickHandler(new ClickHandler() public void onClick(ClickEvent event) {{ public void onClick(ClickEvent event) label.setVisible(!label.isVisible()); label.setVisible(!label.isVisible()); }} }); }); RootPanel.get().add(button); RootPanel.get().add(button); RootPanel.get().add(label); RootPanel.get().add(label); }} }}
  • 36. Simple Layout Panels Panels are used to organize the layout of the various widgets we have covered so far. GWT has several layout widgets that provide this functionality The simple Layout Panels include: FlowPanel VerticalPanel HorizontalPanel
  • 37. FlowPanel It functions like the HTML layout Child widgets of the FlowPanel are displayed horizontally and then wrapped to the next row down when there is not enough horizontal room left: FlowPanel flowPanel == new FlowPanel(); FlowPanel flowPanel new FlowPanel(); for( int ii == 1; ii <= 20; i++ )) {{ for( int 1; <= 20; i++ flowPanel.add(new Button("Button "" ++ String.valueOf(i))); flowPanel.add(new Button("Button String.valueOf(i))); }} RootPanel.get().add(flowPanel); RootPanel.get().add(flowPanel);
  • 38. HorizontalPanel and VerticalPanel HorizontalPanel is similar to FlowPanel but uses scrollbar to display its widgets if there is no enough room instead of displacing to the next row VerticalPanel organizes its child widgets in a vertical orientation
  • 39. DockPanel : Sample public class GWTasks implements EntryPoint {{ public class GWTasks implements EntryPoint public void onModuleLoad() {{ public void onModuleLoad() DockPanel mainPanel == new DockPanel(); DockPanel mainPanel new DockPanel(); mainPanel.setBorderWidth(5); mainPanel.setBorderWidth(5); mainPanel.setSize("100%", "100%"); mainPanel.setSize("100%", "100%"); mainPanel.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE); mainPanel.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE); mainPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER); mainPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER); Widget header == createHeaderWidget(); Widget header createHeaderWidget(); mainPanel.add(header, DockPanel.NORTH); mainPanel.add(header, DockPanel.NORTH); mainPanel.setCellHeight(header, "30px"); mainPanel.setCellHeight(header, "30px"); Widget footer == createFooterWidget(); Widget footer createFooterWidget(); mainPanel.add(footer, DockPanel.SOUTH); mainPanel.add(footer, DockPanel.SOUTH); mainPanel.setCellHeight(footer, "25px"); mainPanel.setCellHeight(footer, "25px"); Widget categories == createCategoriesWidget(); Widget categories createCategoriesWidget(); mainPanel.add(categories, DockPanel.WEST); mainPanel.add(categories, DockPanel.WEST); mainPanel.setCellWidth(categories, "150px"); mainPanel.setCellWidth(categories, "150px"); Widget tasks == createTasksWidget(); Widget tasks createTasksWidget();
  • 40. DockPanel : Sample (Cont.) mainPanel.add(tasks, DockPanel.EAST); mainPanel.add(tasks, DockPanel.EAST); RootPanel.get().add(mainPanel); RootPanel.get().add(mainPanel); }} protected Widget createHeaderWidget() {{ protected Widget createHeaderWidget() return new Label("Header"); return new Label("Header"); }} protected Widget createFooterWidget() {{ protected Widget createFooterWidget() return new Label("Footer"); return new Label("Footer"); }} protected Widget createCategoriesWidget() {{ protected Widget createCategoriesWidget() return new Label("Categories List"); return new Label("Categories List"); }} protected Widget createTasksWidget() {{ protected Widget createTasksWidget() return new Label("Tasks List"); return new Label("Tasks List"); }} }}
  • 43. Communication with the Server GWT support communication between the client-side browser and the server via GWT-RPC and Basic Ajax. GWT use asynchronous communication to provide the rich UI experience expected from RIAs. The details of communicating a message between client and server and vice versa can be abstracted away by frameworks GWT RPC allows you to program your communication by calling a method on a Java interface.
  • 44. GWT-RPC GWT extends a browser’s capability to asynchronously communicate with the server by providing a remote procedure call (RPC) library. Calls to the server are simplified by providing you with an interface of methods that can be called similarly to regular method calls. GWT marshal the calls (convert to a stream of data) and send to the remote server. At the server side, the data, is un-marshalled the method on the server is invoked
  • 45. GWT-RPC GWT uses a pure Java implementation. In GWT, the RPC library is divided into two packages: com.google.gwt.user.client.rpc package used for client-side RPC support . com.google.gwt.user.server.rpc package used for server-side RPC support . The client side provides interfaces that you can use to tag. When the client code is compiled to Javascript using the GWT compiler, the code required to do the RPC marshaling will be generated .
  • 47. Implementing GWT-RPC Services Define an interface for your service that extends RemoteService and lists all your RPC methods.  Define a class to implement the server-side code that extends RemoteServiceServlet and implements the interface you created above. Define an asynchronous interface to your service to be called from the client-side code.
  • 48. A client-side Java interface Create a client-side Java interface that extends the RemoteService tag interface. import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteService; public interface MyService extends RemoteService {{ public interface MyService extends RemoteService public String myMethod(String s); public String myMethod(String s); }}
  • 49. Implement the remote method Implement the service on the server-side by a class that extend RemoteServiceServlet. import com.google.gwt.user.server.rpc.RemoteServiceServlet; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import com.example.client.MyService; import com.example.client.MyService; public class MyServiceImpl extends RemoteServiceServlet implements public class MyServiceImpl extends RemoteServiceServlet implements MyService {{ MyService public String myMethod(String s) {{ public String myMethod(String s) // Do something interesting with 's' here on the server. // Do something interesting with 's' here on the server. return s; return s; }}
  • 50. Asynchronous Interfaces This interface defines the callback method that will be called when the server generates a response. interface MyServiceAsync {{ interface MyServiceAsync public void myMethod(String s, AsyncCallback<String> callback); public void myMethod(String s, AsyncCallback<String> callback); }} }}
  • 51. Making an RPC from the client Instantiate the service interface using GWT.create(). Create an asynchronous callback object to be notified when the RPC has completed. Make the call .
  • 52. Making a Call: Sample public class MainEntryPoint implements EntryPoint {{ public class MainEntryPoint implements EntryPoint public MainEntryPoint() {{ public MainEntryPoint() }} public void onModuleLoad() {{ public void onModuleLoad() getService().myMethod("Hello World", callback); getService().myMethod("Hello World", callback); }} final AsyncCallback callback == new AsyncCallback() {{ final AsyncCallback callback new AsyncCallback() public void onSuccess(Object result) {{ public void onSuccess(Object result) Window.alert((String)result); Window.alert((String)result); }} public void onFailure(Throwable caught) {{ public void onFailure(Throwable caught) Window.alert("Communication failed"); Window.alert("Communication failed"); }} }; };
  • 53. Making a Call: Sample (Cont.) public static MyServiceAsync getService(){ public static MyServiceAsync getService(){ MyServiceAsync service == (MyServiceAsync) MyServiceAsync service (MyServiceAsync) GWT.create(MyService.class); GWT.create(MyService.class); ServiceDefTarget endpoint == (ServiceDefTarget) service; ServiceDefTarget endpoint (ServiceDefTarget) service; String moduleRelativeURL == GWT.getModuleBaseURL() ++ "myservice"; String moduleRelativeURL GWT.getModuleBaseURL() "myservice"; endpoint.setServiceEntryPoint(moduleRelativeURL); endpoint.setServiceEntryPoint(moduleRelativeURL); return service; return service; }} }}
  • 54. Resources Building Rich Internet Applications Using Google Web Toolkit (GWT), Karthik Shyamsunder, Oct 2008. Introduction to Google Web Toolkit, Muhammad Ghazali. Official Google Web Tool Kit Tutorial, http://code.google.com/webtoolkit/doc/latest/tutorial/ Beginning Google Web Toolkit from Novice to Professional, Apress, 2009
  • 55. Thank you thananum@gmail.com twitter.com/thanachart www.facebook.com/thanachart www.thaijavadev.com