SlideShare a Scribd company logo
Google Web Toolkit (GWT) for
                 the Enterprise Developer
               Fred Sauer
               Developer Advocate, Google
               September 2009

               fredsa@google.com




          1                    JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Agenda

         30 second survey
         What to do about questions?
         Mission & Introduction
         Know your toolkit
         Tips
         Q&A




          2                    JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Mission statement


              "GWT's mission is to radically improve
                      the web experience for users by
                  enabling developers to use existing
                  Java tools to build no-compromise
                        AJAX for any modern browser."




          3                    JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
GWT is all about

         Productivity for developers
              Language, IDEs, tools, libraries
              People, ecosystem


         Performance for your users
              'Perfect' caching
              Whole program optimization
              Better than practical hand written code




          4                    JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
GWT Browser-Proofs Your JavaScript Code...



                                        IE



                                       Firefo
                                             x


                                          i
                                     Safar e
                                          m
                                     Chro


                                       Opera




Wednesday, September 2, 2009
Deferred Binding




                                  Firefox         Webkit (Safari) Opera           IE
               Typical portable   2876 ms         1276 ms               2053 ms   4078 ms
               setInnerText()
               textContent=... -                  908 ms                1386 ms   -
               innerText=...      2477 ms         918 ms                1520 ms   2469 ms
               DOM manipulation 7148 ms           1997 ms               4836 ms   14800 ms


               Improvement        14%             29%                   32%       39%




          6                             JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Deferred Binding at Runtime




          7                    JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Deferred Binding at Runtime




          8                    JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
More than just a compiler




          9                    JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
History just works




          10                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Rich Text Area




          11                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Widget Libraries

       • GWT (http://code.google.com/webtoolkit/)
       • Incubator (http://code.google.com/p/google-web-toolkit-incubator/)

       •   Smart GWT (http://code.google.com/p/smartgwt/)
       •   GWT-Ext (http://code.google.com/p/gwt-ext/)
       •   Vaadin (IT Mill Toolkit) (http://vaadin.com/)
       •   GWT mosaic (http://code.google.com/p/gwt-mosaic/)
       •   Ext GWT (http://extjs.com/products/gxt/)
       •   Advanced GWT Components
           (http://advanced-gwt.sourceforge.net/)




           12                        JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
GUI Editing




          13                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Simple, Powerful RPCs

      interface SpellService extends RemoteService {
        /**
        * Checks spelling and suggests
         * alternatives.
         * @param the word to check
         * @return the list of alternatives
         */
        String[] suggest(String word);
      }




          14                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
GWT 2.0 operating modes

     Development Mode (Hosted Mode)
           All about productivity
           Java + JavaScript
           JVM Debugging
           Now in any supported browser

     Production Mode (Web Mode)
           All about performance
           Compiled, Pure JavaScript



          15                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Development Mode (Hosted Mode)

     JVM debugging
           Server & Client code in the same IDE
           Step in / over / out
           Introspect & modify variables
           Hot swap code (ignore the IDE warning!)



                                                          U E
                                              T R
                                O T
                               N
          16                       JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Development Mode

     In any supported browser
           FF, Safari, IE6/7/8, …
           On your machine
           On remote machines
           In another VM
           Using a callback address:port


     http://mymachine:8080/Foo.html?gwt.codesvr=…



          17                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Development Mode




                Web            Code
               Server          Server

          Java Virtual Machine



          18                     JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Google Plugin for Eclipse




          19                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Eclipse plugin highlights

     Extensive JSNI support
     RPC sync/async quick fixes
     Launch configurations
     GWT JUnit tests
     Contributor SDKs (gwt-user, gwt-dev-<platform>)
     Development Mode (GWT 2.0)
           Hosted Mode (GWT 1.7)
     Constantly improving; check back often



          20                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
RTL, I18N, L10N, A11Y




          21                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Locale support

      <!-- Always use utf-8 -->
      <meta http-equiv="content-type" content="text/
        html;charset=utf-8" />

      <!-- Compile time locales -->
      <extend-property name="locale"
         values="fr_CA,de"/>
      <set-property-fallback name="locale"
         value="fr_CA"/>

      // Runtime locales
      LocaleInfo.getAvailableLocaleNames();



          22                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Developer guided code splitting
       GWT.runAsync()
    Size of Initial JavaScript Download (KB)


                                               1500
                                                                                                                       1400 KB




                                               1125




                                                750                                      7x Decrease
                                                                                         Initial Download

                                                375

                                                                                                                    200 KB



                                                    0
                                                        26-Nov   29-Apr   18-Jun       28-Jul     12-Sep   27-Oct     24-Dec     16-Mar



                                               23                         JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Developer guided code splitting
     GWT.runAsync()
                                                 Time


       HTML                    JS                                           Running



   Without splitting

   With splitting

                                Speedup

       HTML            JS            Running!                       Running!!         Running!!!


                                                 JS                         JS




          24                        JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Developer guided code splitting
     GWT.runAsync()
                                                 Time


       HTML                    JS                                           Running



   Without splitting

   With splitting

                                Speedup

       HTML            JS            Running!                       Running!!         Running!!!


                                                 JS                         JS




          25                        JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Manual code splitting - Don't try this at home




          26                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Developer guided code splitting
     GWT.runAsync()
      GWT.runAsync(new RunAsyncCallback() {

        public void onSuccess() {
          Window.alert("Hello, AJAX");
          doMoreStuff();
        }

        public void onFailure(Throwable caught) {
          Window.alert("Code download failed");
        }

      });



          27                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
RunAsync package pattern - Gateway class

      package com.foo.client.addressbookasync;

      public class AddressBook {
        // Can't construct directly
        private AddressBook() { }

           // Only callable once you have an instance
           public show() {
             // use package restricted code here
           }

           …



          28                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
RunAsync package pattern - Gateway class

           …

           // Async interface to obtain an
           // instance of AddressBook
           public interface Callback {
             void onCreated(AddressBook addressBook);
             void onCreateFailure(Throwable e);
           }

           …




          29                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
RunAsync package pattern - Gateway class

           …
           public static void get(final Callback cb) {
             GWT.runAsync(new RunAsyncCallback() {
               public void onSuccess() {
                 cb.onCreated(new AddressBook());
               }
               public void onFailure(Throwable e) {
                 cb.onCreateFailure(e);
               }
             });
           }
      }



          30                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Story of Your Compile (SOYC)




                                         -C


          31                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
SOYC

     The Story of Your Compile:
     Reading the Tea Leaves of the GWT
     Compiler for an Optimized Future
     Lex Spoon and Bruce Johnson
     May 28, 2009 @ Google I/O

     http://code.google.com/events/io/sessions/
     StoryCompilerGwtCompiler.html




          32                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
JSON - JavaScript Object Notation

      {
           "firstName": "Fred",
           "lastName": "Sauer",
           "contactInfo":
             {
               "email": "fredsa@google.com", …
             }
           "likes":
             [
               "Open Source", "GWT", "Chocolate"
             ]
      }



          33                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Using JSON

      // 1. Server responds
      {"firstName": "Fred", "lastName": "Sauer", … }


      // 2. Client parses
      p = safeJsonParse(responseText);

      // or Client evaluates (Danger, Will Robinson!)
      p = eval(responseText);

      …




          34                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Using JSON

      // Brittle
      var greeting = 'Hello, ' + p.firstName + ' ' +
        p.lastName;


      // Additional payload for user to download
      function getName(p) {
        return p.firstName + ' ' + p.lastName;
      }

      // Additional method invocation overhead
      var greeting = 'Hello, ' + getName(p);



          35                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
The amazing disappearing code trick
     Using JSO Types
      // This class is about to disappear!

      public class Person extends JavaScriptObject {

           // assume 'this' has 'firstName' property
           public native String getFirstName()
           /*-{ return this.firstName; }-*/;

           public native String getLastName()
           /*-{ return this.lastName; }-*/;

           …



          36                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
The amazing disappearing code trick

      public class Person extends JavaScriptObject {

           …

           // This method is about to disappear as well!
           public String getDisplayName() {
             return getFirstName() + " " + getLastName();
           }

      }




          37                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
The amazing disappearing code trick

      …
      // Go ahead, use your type-safe abstractions

      // You get to keep your wrapper classes
      Person person;

      // Also keep your convenience methods
      String name = person.getDisplayName();


      // GWT performs disappearing trick
      var name = p.firstName + ' ' + p.lastName;



          38                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Overlay Types++


                                   Client/server agnostic code using Person
                                        (e.g. unit tests, business logic)



                JavaScriptObject                            Person
                    (Class)                               (Interface)



                               Person_ClientImpl                   Person_ServerImpl
                                (JSO + Interface)                  (POJO or whatever)




          39                       JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Responsiveness matters

               0.1 seconds     perceived as instantaneous

                1 second       maintains the feeling that a single task
                               is being carried out



               10 seconds      limit for keeping user’s attention




          40                       JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Roundtrips are deadly

     1 round trip for TCP connection setup
     (1 round trip for HTTP redirect?)
     1 round trip for each HTTP request
               $ ping ohare.com
               PING ohare.com (70.142.247.22): 56 data          bytes
               64 bytes from 70.142.247.22: icmp_seq=0          ttl=113 time=54.689 ms
               64 bytes from 70.142.247.22: icmp_seq=1          ttl=113 time=55.500 ms
               64 bytes from 70.142.247.22: icmp_seq=2          ttl=113 time=54.728 ms




          41                    JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Reducing round trip time

     Use HTTP Expires and Cache-Control headers
     Use GWT 'Perfect Caching'
           Cache 'forever' - your entire app and all its resources
           Bundle, bundle, bundle
     Enable HTTP Pipelining
     Use multiple hostnames
           Defeat browser's two connection limit
           Watch out for DNS lookup overhead though



          42                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Know your HTTP Headers

      <!-- See RFC 2616. Here's an example:
        Expires: Thu, 02 Sep 2010 03:21:55 GMT
        Cache-Control: public, max-age=31536000
      -->
      <Files *.cache.*>
               ExpiresDefault "now plus 1 year"
      </Files>


      <Files *.nocache.*>
        ExpiresDefault "access"
      </Files>



          43                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Sprites for free (ImageBundle)



                                                              20,558 bytes


                  11 separate images




                                                                                    6,824 bytes


                  1 bundled image


                                                                       ∑ Separate       Bundled



          44                           JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Sprites for free (ImageBundle)

      public interface MyDialogImages
          extends ImageBundle {

           // Look for 'saveButton.{png|jpg|gif|bmp}'
           AbstractImagePrototype saveButton();

           AbstractImagePrototype okButton();


           @Resource("com/foo/myapp/btn_cancel.png")
           AbstractImagePrototype cancelButton();
      }



          45                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Injecting / inspecting resources at compile-time

      interface MyBundle extends ClientBundle {

           public static final MyBundle INSTANCE =
               GWT.create(MyBundle.class);

           @Source("app_config.xml")
           TextResource appConfig1();

           @Source("wordlist.txt")
           ExternalTextResource wordlist();

           …



          46                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Injecting / inspecting resources at compile-time

      interface MyBundle extends ClientBundle {
        @Source("myCursor.cur")
        DataResource myCursor();
      }
      MyBundle.INSTANCE.myCursor().getUrl();

      http://localhost:8080/foo/
        B349934EA27D6EFFD949B88E6A116ED7.cache.cur

      data:content/unknown;base64,c2FkIGprZ2xkZdqZGZrb
      CBnamtkZmxnIGRma2xnaiBrZGxmZ2prbGRmamcga2xkaiBna
      2w7ZGZqZy…IGRmamtsw7ZGZqZyBrbGRmZ2ogZGtsO



          47                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Injecting / inspecting resources at compile-time

      interface MyBundle extends ClientBundle {
        …

        @Source("arrow.png") // locale sensitive!
        @ImageOptions(flipRtl = true)
        ImageResource pointer();
      }

      MyBundle.INSTANCE.pointer().getUrl();
      MyBundle.INSTANCE.pointer().getWidth();
      MyBundle.INSTANCE.pointer().getHeight();
      …



          48                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Injecting / inspecting resources at compile-time

      interface MyBundle extends ClientBundle {

           …

           @Strict // or @NotStrict
           @Source("address_book.css")
           CssResource addressBookCSS();

      }




          49                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Compile time CSS awesomeness
     http://code.google.com/p/google-web-toolkit/wiki/CssResource

      @def small 1px; /* Constants */

      @if user.agent safari gecko1_8 { … }
      @if locale en { … }

      @noflip { … } /* no automatic left/right swap */

      @external




          50                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Pluggable Architecture




          51                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Linkers - orchestrating compiler output


                                                                  xs
                                                                     sso
    Out of the box                                             std



      3rd      party
                                       Ω µ
                                     ∆     ¶

          52                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Single Script (sso) Linker
     SingleScriptLinker


                               yourpage.html



                      <module>.nocache.js


          53                    JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Cross site (xs) Linker
     XSLinker

                               yourpage.html

                                     <module>.nocache.js




                               <md5>.cache.js


          54                     JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Standard (std) Linker
     IFrameLinker

                                yourpage.html

                                      <module>.nocache.js

        <iframe ...




                               <md5>.cache.html


          55                      JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Generators
     GWT.create(…)



                 What code will
                 your code write?




          56                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Corporate Gadgets




          57                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Making gadgets

      @ModulePrefs(
        title = "Hello World!",
        directory_title = "My first gadget",
        screenshot = "gadget.png",
        thumbnail = "thumb.png",
        …
        height = 210)
      public class HelloGadget
        extends
        Gadget<HelloPreferences>
      {
        …



          58                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Making gadgets

      @ModulePrefs(…)
      public class HelloGadget extends
        Gadget<HelloPreferences> {

           public void onModuleLoad() { /* ... */}

        protected void init(
            final HelloPreferences prefs) {
          …
        }

      }



          59                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Making gadget preferences

      public interface MealPreferences extends
        UserPreferences {

        @PreferenceAttributes(
            display_name = "Vegetarian",
            default_value = "false")
        BooleanPreference noMeat();

      }




          60                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Expecting the unexpected in Development

      public void onModuleLoad() {
        Log.setUncaughtExceptionHandler();
        // This isn't going to help us now
        DeferredCommand.addCommand(new Command() {
        GWT.setUncaughtExceptionHandler(…);
          public void execute() {
            onModuleLoad2();
        //}Your initialization code goes wrong here :(
         
        });
      } // Cross your fingers

      }
      private void onModuleLoad2() {
        // Your module initialization code goes here
      }



          61                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Expecting the unexpected in Development Mode

      // Hyperlink your stack traces
      Throwable#printStrackTrace()




          62                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Expecting the unexpected in Development Mode

      // Logging with zero overhead in production mode
      <inherits
         name="com.allen_sauer.gwt.log.gwt-log-DEBUG"/>

      Log.debug("This is a 'DEBUG' test message");




          63                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Make the compiler output human readable

      // Production Mode (-style OBF)
      Ee='area=';function nc(){$wnd.alert(Ee+(u(new
        q),Hb($doc))*Gb($doc))}

      // -draftCompile -style PRETTY
      function $onModuleLoad() {
        $showArea(getClientWidth(),getClientHeight());
      }

      function $showArea(width, height){
        alert_0('area=' + width * height);
      }



          64                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Expecting the unexpected in Production Mode

      <inherits name="compiler.emulatedStack" />

      <set-configuration-property
       name="compiler.emulatedStack.recordLineNumbers"
       value="true" />

      <set-configuration-property
       name="compiler.emulatedStack.recordFileNames"
       value="true" />




          65                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Expecting the unexpected in Production Mode

     Even with -style OBF
           Server side symbol maps, e.g.
           xQ() -> MyClass.myOriginalJavaMethod()




          66                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Expecting the unexpected in Production Mode

     You still get stack traces in JavaScript!
           Throwable#getStackTrace()




          67                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Projects you should know

     http://code.google.com/p/google-web-toolkit-incubator/
           Ideas: widgets, libraries, resources

     http://code.google.com/p/gwt-google-apis/                 (GALGWT)
           Gears, Gadgets, AJAX Search, Maps,
           Visualization, Language, AjaxLoader

     http://code.google.com/p/gwt-exporter/




          68                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Shameless plugs (gwt-dnd, gwt-log, gwt-voices)




          69                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Modules you should know

         <!-- Selenium, WebDriver, etc. -->
         <inherits name="com.google.gwt.user.Debug" />
         <set-property
            name="gwt.enableDebugId" value="true" />


         // Setup my ids for QA
         Button searchButton = new Button();
         searchButton.ensureDebugId("srch");




          70                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Watch the compiler optimize away your code
     -Dgwt.jjs.traceMethods=foo.Bar.onModuleLoad
      public class ShapeExample implements EntryPoint {
        public void onModuleLoad() {
          Shape s = getShape();
          Window.alert("Area is " + s.getArea());
        }

          public static abstract class Shape {
            public abstract double getArea();
          }

          private Shape getShape() { return shape; }
          private final Shape shape = new SmallSquare();

          public static abstract class Square extends Shape {
            public double getArea() { return getSideLength() * getSideLength(); }
            public abstract double getSideLength();
          }

          public static class SmallSquare extends Square {
            private static final double SIDE_LEN_SMALL = 2;
            public double getSideLength() { return SIDE_LEN_SMALL; }
          }
      }




           71                          JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Watch the compiler optimize away your code
     -Dgwt.jjs.traceMethods=foo.Bar.onModuleLoad

      ---------------------------
      CleanupRefsVisitor:
      DeadCodeVisitor:
      InliningVisitor:
      TightenTypesVisitor:
      RewriteCallSites:
      FinalizeVisitor:
      JAVA INITIAL:
      ---------------------------
      public void onModuleLoad(){
             static final void $onModuleLoad(ShapeExample
             final void onModuleLoad(){
      this$static){
        final ShapeExample$Shape s = this.getShape();
        ShapeExample$Shape s = this.getShape();
        this$static.shape;
        final ShapeExample$Shape
        Window.alert("Area is " +ss.getArea());
              ShapeExample$SmallSquare s = ShapeExample.
                              4.0"); this$static.getShape();
                                   = ShapeExample.
                                           this$static.shape;
                                           ((this
      $static.shape));
      $getShape(this$static); 4.0");
      } Window.alert("Area is " + s.getArea());
                                  ((2.0)) * ((2.0)));
                                  ShapeExample$SmallSquare.
                                  ((ShapeExample$SmallSquare.
                                  ShapeExample$Square.
      $getSideLength(s) * is " + s.getArea());
      $getArea(s));
      } Window.alert("AreaShapeExample$SmallSquare.
      $getSideLength(s));
      $getSideLength(s))));
      }
      }




          72                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
System properties you should know
     (GWT 1.7 and prior)
         // Hosted mode just closes
         // when you tell it to (e.g. ALT-F4)
         -Dgwt.shell.endquick=




          73                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Compiler arguments you should know

         // Human readable code
         -style PRETTY

         // fast (for development)
         -draftCompile

         // Compile N permutations in parallel
         // (N = number of cores)
         -localWorkers=N




          74                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Compiler arguments you should know

         // Story of your compile
         -soyc

         // Symbols maps, SOYC reports, RPC info
         -exta stuff

         -logLevel

         // GWT Compiler argument!
         -ea




          75                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
EXPERIMENTAL arguments you should know

         // Don't care what Class#getName() returns?
         -XdisableClassMetadata

               Showcase metadata before
                 var Ljava_lang_Object_2_classLit = createForClass('java.lang.', 'Object'), Lcom_google_gwt_animation_client_Animation_2_classLit = createForClass('com.google.gwt.animation.client.', 'Animation'), _3Lcom_google_gwt_animation_client_Animation_2_classLit = createForArray('[Lcom.google.gwt.animation.client.', 'Animation;'),
                 Lcom_google_gwt_user_client_Timer_2_classLit = createForClass('com.google.gwt.user.client.', 'Timer'), Lcom_google_gwt_animation_client_Animation$1_2_classLit = createForClass('com.google.gwt.animation.client.', 'Animation$1'), _3I_classLit = createForArray('', '[I'), Ljava_lang_Throwable_2_classLit = createForClass('java.lang.', 'Throwable'),
                 Ljava_lang_Exception_2_classLit = createForClass('java.lang.', 'Exception'), Ljava_lang_RuntimeException_2_classLit = createForClass('java.lang.', 'RuntimeException'), Lcom_google_gwt_core_client_impl_AsyncFragmentLoader$HttpDownloadFailure_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'AsyncFragmentLoader$HttpDownloadFailure'),
                 Lcom_google_gwt_core_client_impl_AsyncFragmentLoader$InitialFragmentDownloadFailed_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'AsyncFragmentLoader$InitialFragmentDownloadFailed'), Lcom_google_gwt_core_client_impl_AsyncFragmentLoader$1_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'AsyncFragmentLoader$1'),
                 Lcom_google_gwt_core_client_impl_StackTraceCreator$Collector_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'StackTraceCreator$Collector'), Ljava_lang_StackTraceElement_2_classLit = createForClass('java.lang.', 'StackTraceElement'), _3Ljava_lang_StackTraceElement_2_classLit = createForArray('[Ljava.lang.', 'StackTraceElement;'),

                 Lcom_google_gwt_core_client_impl_StringBufferImpl_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'StringBufferImpl'), Lcom_google_gwt_core_client_impl_StringBufferImplAppend_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'StringBufferImplAppend'), Lcom_google_gwt_core_client_JavaScriptException_2_classLit =
                 createForClass('com.google.gwt.core.client.', 'JavaScriptException'), Lcom_google_gwt_core_client_JavaScriptObject_2_classLit = createForClass('com.google.gwt.core.client.', 'JavaScriptObject$'), Lcom_google_gwt_dom_client_DOMImpl_2_classLit = createForClass('com.google.gwt.dom.client.', 'DOMImpl'), Lcom_google_gwt_dom_client_DOMImplStandard_2_classLit =
                 createForClass('com.google.gwt.dom.client.', 'DOMImplStandard'), Lcom_google_gwt_dom_client_DOMImplSafari_2_classLit = createForClass('com.google.gwt.dom.client.', 'DOMImplSafari'), Ljava_lang_String_2_classLit = createForClass('java.lang.', 'String'), _3Ljava_lang_String_2_classLit = createForArray('[Ljava.lang.', 'String;'), Ljava_lang_Enum_2_classLit
                 = createForClass('java.lang.', 'Enum'), Lcom_google_gwt_event_shared_GwtEvent_2_classLit = createForClass('com.google.gwt.event.shared.', 'GwtEvent'), Lcom_google_gwt_event_dom_client_DomEvent_2_classLit = createForClass('com.google.gwt.event.dom.client.', 'DomEvent'), Lcom_google_gwt_event_dom_client_ChangeEvent_2_classLit =

                 createForClass('com.google.gwt.event.dom.client.', 'ChangeEvent'), Lcom_google_gwt_event_dom_client_ClickEvent_2_classLit = createForClass('com.google.gwt.event.dom.client.', 'ClickEvent'), Lcom_google_gwt_event_shared_GwtEvent$Type_2_classLit = createForClass('com.google.gwt.event.shared.', 'GwtEvent$Type'), Lcom_google_gwt_event_dom_client_DomEvent
                 $Type_2_classLit = createForClass('com.google.gwt.event.dom.client.', 'DomEvent$Type'), Lcom_google_gwt_event_dom_client_PrivateMap_2_classLit = createForClass('com.google.gwt.event.dom.client.', 'PrivateMap'), Lcom_google_gwt_event_logical_shared_BeforeSelectionEvent_2_classLit = createForClass('com.google.gwt.event.logical.shared.',

                 'BeforeSelectionEvent'), Lcom_google_gwt_event_logical_shared_CloseEvent_2_classLit = createForClass('com.google.gwt.event.logical.shared.', 'CloseEvent'), Lcom_google_gwt_event_logical_shared_OpenEvent_2_classLit = createForClass('com.google.gwt.event.logical.shared.', 'OpenEvent'), Lcom_google_gwt_event_logical_shared_ResizeEvent_2_classLit =
                 createForClass('com.google.gwt.event.logical.shared.', 'ResizeEvent'), Lcom_google_gwt_event_logical_shared_SelectionEvent_2_classLit = createForClass('com.google.gwt.event.logical.shared.', 'SelectionEvent'), Lcom_google_gwt_event_logical_shared_ValueChangeEvent_2_classLit = createForClass('com.google.gwt.event.logical.shared.', 'ValueChangeEvent'),
                 Lcom_google_gwt_event_shared_DefaultHandlerRegistration_2_classLit = createForClass('com.google.gwt.event.shared.', 'DefaultHandlerRegistration'), Lcom_google_gwt_event_shared_HandlerManager_2_classLit = createForClass('com.google.gwt.event.shared.', 'HandlerManager'), Lcom_google_gwt_event_shared_HandlerManager$HandlerRegistry_2_classLit =
                 createForClass('com.google.gwt.event.shared.', 'HandlerManager$HandlerRegistry'), Lcom_google_gwt_event_shared_HandlerManager$1_2_classLit = createForClass('com.google.gwt.event.shared.', 'HandlerManager$1'), Lcom_google_gwt_http_client_Request_2_classLit = createForClass('com.google.gwt.http.client.', 'Request'),
                 Lcom_google_gwt_http_client_Response_2_classLit = createForClass('com.google.gwt.http.client.', 'Response'), Lcom_google_gwt_http_client_Request$1_2_classLit = createForClass('com.google.gwt.http.client.', 'Request$1'), Lcom_google_gwt_http_client_Request$3_2_classLit = createForClass('com.google.gwt.http.client.', 'Request$3'),
                 Lcom_google_gwt_http_client_RequestBuilder_2_classLit = createForClass('com.google.gwt.http.client.', 'RequestBuilder'), Lcom_google_gwt_http_client_RequestBuilder$Method_2_classLit = createForClass('com.google.gwt.http.client.', 'RequestBuilder$Method'), Lcom_google_gwt_http_client_RequestBuilder$1_2_classLit =
                 createForClass('com.google.gwt.http.client.', 'RequestBuilder$1'), Lcom_google_gwt_http_client_RequestException_2_classLit = createForClass('com.google.gwt.http.client.', 'RequestException'), Lcom_google_gwt_http_client_RequestPermissionException_2_classLit = createForClass('com.google.gwt.http.client.', 'RequestPermissionException'),
                 Lcom_google_gwt_http_client_RequestTimeoutException_2_classLit = createForClass('com.google.gwt.http.client.', 'RequestTimeoutException'), Ljava_util_AbstractMap_2_classLit = createForClass('java.util.', 'AbstractMap'), Ljava_util_AbstractCollection_2_classLit = createForClass('java.util.', 'AbstractCollection'), Ljava_util_AbstractSet_2_classLit =
                 createForClass('java.util.', 'AbstractSet'), Lcom_google_gwt_i18n_client_impl_LocaleInfoImpl_2_classLit = createForClass('com.google.gwt.i18n.client.impl.', 'LocaleInfoImpl'), Lcom_google_gwt_i18n_client_impl_LocaleInfoImpl_1shared_2_classLit = createForClass('com.google.gwt.i18n.client.impl.', 'LocaleInfoImpl_shared'),
                 Lcom_google_gwt_i18n_client_impl_LocaleInfoImpl_1en_1runtimeSelection_2_classLit = createForClass('com.google.gwt.i18n.client.impl.', 'LocaleInfoImpl_en_runtimeSelection'), Lcom_google_gwt_i18n_client_HasDirection$Direction_2_classLit = createForEnum('com.google.gwt.i18n.client.', 'HasDirection$Direction', values_0),




                                                                                                                                                                                                                                                                                                                                                                                                                        Showcase metadata after
                 _3Lcom_google_gwt_i18n_client_HasDirection$Direction_2_classLit = createForArray('[Lcom.google.gwt.i18n.client.', 'HasDirection$Direction;'), Lcom_google_gwt_i18n_client_LocaleInfo_2_classLit = createForClass('com.google.gwt.i18n.client.', 'LocaleInfo'), _3C_classLit = createForArray('', '[C'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader1_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader1__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader1$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader1$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader10_1_1Super_2_classLit =
                 createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader10__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader10$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader10$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader10_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.',
                 'AsyncLoader10__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader11_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader11__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader11$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader11$1'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader11_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader11__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader12_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader12__Super'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader12$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader12$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader12_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader12__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader13_1_1Super_2_classLit

                 = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader13__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader13$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader13$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader13_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.',
                 'AsyncLoader13__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader15_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader15__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader15$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader15$1'),

                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader15_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader15__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader16_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader16__Super'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader16$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader16$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader16_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader16__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader17_1_1Super_2_classLit
                 = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader17__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader17$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader17$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader17_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.',
                 'AsyncLoader17__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader18_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader18__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader18$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader18$1'),




                                                                                                                                                                                                                                                                                                                                                                                                   5% - 10%
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader18_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader18__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader19_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader19__Super'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader19$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader19$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader19_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader19__Callback'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader1_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader1__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader2_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader2__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader2$1_2_classLit
                 = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader2$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader20_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader20__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader20$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader20$1'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader20_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader20__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader21_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader21__Super'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader21$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader21$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader21_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader21__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader22_1_1Super_2_classLit
                 = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader22__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader22$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader22$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader22_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.',
                 'AsyncLoader22__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader23_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader23__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader23$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader23$1'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader23_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader23__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader24_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader24__Super'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader24$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader24$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader24_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader24__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader25_1_1Super_2_classLit
                 = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader25__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader25$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader25$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader25_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.',
                 'AsyncLoader25__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader26_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader26__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader26$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader26$1'),

                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader26_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader26__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader27_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader27__Super'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader27$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader27$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader27_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader27__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader28_1_1Super_2_classLit

                 = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader28__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader28$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader28$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader28_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.',




                                                                                                                                                                                                                                                                                                                                                                                                script reduction
                 'AsyncLoader28__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader29_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader29__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader29$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader29$1'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader29_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader29__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader2_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader2__Callback'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader3_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader3__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader3$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader3$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader30_1_1Super_2_classLit =
                 createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader30__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader30$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader30$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader30_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.',
                 'AsyncLoader30__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader31_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader31__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader31$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader31$1'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader31_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader31__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader32_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader32__Super'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader32$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader32$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader32_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader32__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader33_1_1Super_2_classLit
                 = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader33__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader33$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader33$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader33_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.',
                 'AsyncLoader33__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader34_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader34__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader34$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader34$1'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader34_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader34__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader35_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader35__Super'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader35$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader35$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader35_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader35__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader36_1_1Super_2_classLit
                 = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader36__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader36$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader36$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader36_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.',
                 'AsyncLoader36__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader3_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader3__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader4_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader4__Super'),

                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader4$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader4$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader4_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader4__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader5_1_1Super_2_classLit =
                 createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader5__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader5$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader5$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader5_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.',

                 'AsyncLoader5__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader6_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader6__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader6$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader6$1'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader6_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader6__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader7_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader7__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader7$1_2_classLit

                 = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader7$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader7_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader7__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader8_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.',
                 'AsyncLoader8__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader8$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader8$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader8_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader8__Callback'),
                 Lcom_google_gwt_lang_asyncloaders_AsyncLoader9_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader9__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader9$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader9$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader9_1_1Callback_2_classLit =
                 createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader9__Callback'), Lcom_google_gwt_sample_showcase_client_content_i18n_ExampleConstants_2_classLit = createForInterface('com.google.gwt.sample.showcase.client.content.i18n.', 'ExampleConstants'), Lcom_google_gwt_user_client_ui_UIObject_2_classLit =
                 createForClass('com.google.gwt.user.client.ui.', 'UIObject'), Lcom_google_gwt_user_client_ui_Widget_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Widget'), Lcom_google_gwt_user_client_ui_Panel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Panel'), Lcom_google_gwt_user_client_ui_SimplePanel_2_classLit =
                 createForClass('com.google.gwt.user.client.ui.', 'SimplePanel'), Lcom_google_gwt_user_client_ui_LazyPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'LazyPanel'), Lcom_google_gwt_sample_showcase_client_ContentWidget_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'ContentWidget'),
                 Lcom_google_gwt_sample_showcase_client_content_i18n_CwConstantsExample_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwConstantsExample'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwConstantsExample$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwConstantsExample
                 $2'), Lcom_google_gwt_sample_showcase_client_content_i18n_ColorConstants_2_classLit = createForInterface('com.google.gwt.sample.showcase.client.content.i18n.', 'ColorConstants'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwConstantsWithLookupExample_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.',
                 'CwConstantsWithLookupExample'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwConstantsWithLookupExample$3_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwConstantsWithLookupExample$3'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwDateTimeFormat_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwDateTimeFormat'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwDateTimeFormat$4_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwDateTimeFormat$4'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwDictionaryExample_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwDictionaryExample'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwDictionaryExample$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwDictionaryExample$1'), Lcom_google_gwt_sample_showcase_client_content_i18n_ErrorMessages_2_classLit =
                 createForInterface('com.google.gwt.sample.showcase.client.content.i18n.', 'ErrorMessages'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwMessagesExample_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwMessagesExample'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwMessagesExample$3_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwMessagesExample$3'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwNumberFormat_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwNumberFormat'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwNumberFormat$4_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwNumberFormat$4'), Lcom_google_gwt_sample_showcase_client_content_lists_CwListBox_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwListBox'), Lcom_google_gwt_sample_showcase_client_content_lists_CwListBox$2_2_classLit =

                 createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwListBox$2'), Lcom_google_gwt_sample_showcase_client_content_lists_CwMenuBar_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwMenuBar'), Lcom_google_gwt_sample_showcase_client_content_lists_CwMenuBar$2_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwMenuBar$2'), Lcom_google_gwt_sample_showcase_client_content_lists_CwStackPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwStackPanel'), Lcom_google_gwt_sample_showcase_client_content_lists_CwStackPanel$1_2_classLit =

                 createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwStackPanel$1'), Lcom_google_gwt_sample_showcase_client_content_lists_CwSuggestBox_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwSuggestBox'), Lcom_google_gwt_sample_showcase_client_content_lists_CwSuggestBox$1_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwSuggestBox$1'), Lcom_google_gwt_sample_showcase_client_content_lists_CwTree_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwTree'), Lcom_google_gwt_sample_showcase_client_content_lists_CwTree$1_2_classLit =

                 createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwTree$1'), Lcom_google_gwt_sample_showcase_client_content_other_CwAnimation_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.other.', 'CwAnimation'), Lcom_google_gwt_sample_showcase_client_content_other_CwAnimation$1_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.other.', 'CwAnimation$1'), Lcom_google_gwt_sample_showcase_client_content_other_CwCookies_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.other.', 'CwCookies'), Lcom_google_gwt_sample_showcase_client_content_other_CwCookies$4_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.other.', 'CwCookies$4'), Lcom_google_gwt_sample_showcase_client_content_panels_CwAbsolutePanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwAbsolutePanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwAbsolutePanel$1_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwAbsolutePanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwAbsolutePanel$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwAbsolutePanel$2'), Lcom_google_gwt_sample_showcase_client_content_panels_CwDecoratorPanel_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwDecoratorPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwDecoratorPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwDecoratorPanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwDisclosurePanel_2_classLit
                 = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwDisclosurePanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwDisclosurePanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwDisclosurePanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwDockPanel_2_classLit
                 = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwDockPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwDockPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwDockPanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwFlowPanel_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwFlowPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwFlowPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwFlowPanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwHorizontalPanel_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwHorizontalPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwHorizontalPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwHorizontalPanel$1'),
                 Lcom_google_gwt_sample_showcase_client_content_panels_CwHorizontalSplitPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwHorizontalSplitPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwHorizontalSplitPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.',
                 'CwHorizontalSplitPanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwTabPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwTabPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwTabPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.',
                 'CwTabPanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwVerticalPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwVerticalPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwVerticalPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.',
                 'CwVerticalPanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwVerticalSplitPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwVerticalSplitPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwVerticalSplitPanel$1_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwVerticalSplitPanel$1'), Lcom_google_gwt_sample_showcase_client_content_popups_CwBasicPopup_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.popups.', 'CwBasicPopup'), Lcom_google_gwt_sample_showcase_client_content_popups_CwBasicPopup$4_2_classLit =

                 createForClass('com.google.gwt.sample.showcase.client.content.popups.', 'CwBasicPopup$4'), Lcom_google_gwt_sample_showcase_client_content_popups_CwDialogBox_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.popups.', 'CwDialogBox'), Lcom_google_gwt_sample_showcase_client_content_popups_CwDialogBox$2_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.popups.', 'CwDialogBox$2'), Lcom_google_gwt_sample_showcase_client_content_tables_CwFlexTable_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.tables.', 'CwFlexTable'), Lcom_google_gwt_sample_showcase_client_content_tables_CwFlexTable$3_2_classLit =

                 createForClass('com.google.gwt.sample.showcase.client.content.tables.', 'CwFlexTable$3'), Lcom_google_gwt_sample_showcase_client_content_tables_CwGrid_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.tables.', 'CwGrid'), Lcom_google_gwt_sample_showcase_client_content_tables_CwGrid$1_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.tables.', 'CwGrid$1'), Lcom_google_gwt_sample_showcase_client_content_text_CwBasicText_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.text.', 'CwBasicText'), Lcom_google_gwt_sample_showcase_client_content_text_CwBasicText$1_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.text.', 'CwBasicText$1'), Lcom_google_gwt_sample_showcase_client_content_text_CwRichText_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.text.', 'CwRichText'), Lcom_google_gwt_sample_showcase_client_content_text_CwRichText$1_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.text.', 'CwRichText$1'), Lcom_google_gwt_user_client_ui_Composite_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Composite'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwBasicButton_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwBasicButton'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwBasicButton$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwBasicButton$2'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwCheckBox_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwCheckBox'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwCustomButton_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwCustomButton'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwCustomButton$1_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwCustomButton$1'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwDatePicker_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwDatePicker'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwDatePicker$2_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwDatePicker$2'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwFileUpload_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwFileUpload'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwFileUpload$2_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwFileUpload$2'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwRadioButton_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwRadioButton'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwHyperlink_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwHyperlink'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwHyperlink$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwHyperlink$1'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwRadioButton$1_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwRadioButton$1'), Lcom_google_gwt_sample_showcase_client_Application_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Application'), Lcom_google_gwt_sample_showcase_client_Application_1ApplicationImages_1generatedBundle_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.', 'Application_ApplicationImages_generatedBundle'), Lcom_google_gwt_sample_showcase_client_ContentWidget$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'ContentWidget$1'), Lcom_google_gwt_sample_showcase_client_ContentWidget$2_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.', 'ContentWidget$2'), Lcom_google_gwt_sample_showcase_client_ContentWidget$3_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'ContentWidget$3'), Lcom_google_gwt_sample_showcase_client_Showcase_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase'),
                 Lcom_google_gwt_user_client_ui_FocusWidget_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'FocusWidget'), Lcom_google_gwt_user_client_ui_ButtonBase_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'ButtonBase'), Lcom_google_gwt_user_client_ui_CustomButton_2_classLit = createForClass('com.google.gwt.user.client.ui.',
                 'CustomButton'), Lcom_google_gwt_user_client_ui_ToggleButton_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'ToggleButton'), Lcom_google_gwt_sample_showcase_client_Showcase$ThemeButton_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase$ThemeButton'), Lcom_google_gwt_sample_showcase_client_Showcase$1_2_classLit
                 = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase$1'), Lcom_google_gwt_sample_showcase_client_Showcase$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase$2'), Lcom_google_gwt_sample_showcase_client_Showcase$3_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase$3'),

                 Lcom_google_gwt_sample_showcase_client_Showcase$4_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase$4'), Lcom_google_gwt_sample_showcase_client_Showcase$5_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase$5'), Lcom_google_gwt_sample_showcase_client_ShowcaseConstants_1_2_classLit =
                 createForClass('com.google.gwt.sample.showcase.client.', 'ShowcaseConstants_'), Lcom_google_gwt_sample_showcase_client_StyleSheetLoader$StyleTesterTimer_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'StyleSheetLoader$StyleTesterTimer'), Lcom_google_gwt_user_client_impl_ElementMapperImpl_2_classLit =

                 createForClass('com.google.gwt.user.client.impl.', 'ElementMapperImpl'), Lcom_google_gwt_user_client_impl_ElementMapperImpl$FreeNode_2_classLit = createForClass('com.google.gwt.user.client.impl.', 'ElementMapperImpl$FreeNode'), Lcom_google_gwt_user_client_impl_HistoryImpl_2_classLit = createForClass('com.google.gwt.user.client.impl.', 'HistoryImpl'),
                 Lcom_google_gwt_user_client_impl_HistoryImplTimer_2_classLit = createForClass('com.google.gwt.user.client.impl.', 'HistoryImplTimer'), Lcom_google_gwt_user_client_impl_HistoryImplSafari_2_classLit = createForClass('com.google.gwt.user.client.impl.', 'HistoryImplSafari'), Lcom_google_gwt_user_client_ui_AbstractImagePrototype_2_classLit =
                 createForClass('com.google.gwt.user.client.ui.', 'AbstractImagePrototype'), Lcom_google_gwt_user_client_ui_impl_ClippedImagePrototype_2_classLit = createForClass('com.google.gwt.user.client.ui.impl.', 'ClippedImagePrototype'), Lcom_google_gwt_user_client_ui_impl_FocusImpl_2_classLit = createForClass('com.google.gwt.user.client.ui.impl.', 'FocusImpl'),
                 Lcom_google_gwt_user_client_ui_impl_FocusImplOld_2_classLit = createForClass('com.google.gwt.user.client.ui.impl.', 'FocusImplOld'), Lcom_google_gwt_user_client_ui_impl_FocusImplSafari_2_classLit = createForClass('com.google.gwt.user.client.ui.impl.', 'FocusImplSafari'), Lcom_google_gwt_user_client_ui_ComplexPanel_2_classLit =
                 createForClass('com.google.gwt.user.client.ui.', 'ComplexPanel'), Lcom_google_gwt_user_client_ui_AbsolutePanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'AbsolutePanel'), Lcom_google_gwt_user_client_ui_CellPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'CellPanel'),
                 Lcom_google_gwt_user_client_ui_CheckBox_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'CheckBox'), Lcom_google_gwt_user_client_ui_CustomButton$Face_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'CustomButton$Face'), Lcom_google_gwt_user_client_ui_CustomButton$2_2_classLit = createForClass('com.google.gwt.user.client.ui.',
                 'CustomButton$2'), Lcom_google_gwt_user_client_ui_DeckPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'DeckPanel'), Lcom_google_gwt_user_client_ui_DeckPanel$SlideAnimation_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'DeckPanel$SlideAnimation'), Lcom_google_gwt_user_client_ui_TabBar_2_classLit =
                 createForClass('com.google.gwt.user.client.ui.', 'TabBar'), Lcom_google_gwt_user_client_ui_DecoratorPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'DecoratorPanel'), Lcom_google_gwt_user_client_ui_Label_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Label'), Lcom_google_gwt_user_client_ui_HTML_2_classLit =
                 createForClass('com.google.gwt.user.client.ui.', 'HTML'), _3Lcom_google_gwt_user_client_ui_Widget_2_classLit = createForArray('[Lcom.google.gwt.user.client.ui.', 'Widget;'), Lcom_google_gwt_user_client_ui_HTMLTable_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HTMLTable'), Lcom_google_gwt_user_client_ui_FlexTable_2_classLit =
                 createForClass('com.google.gwt.user.client.ui.', 'FlexTable'), Lcom_google_gwt_user_client_ui_HTMLTable$CellFormatter_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HTMLTable$CellFormatter'), Lcom_google_gwt_user_client_ui_FlexTable$FlexCellFormatter_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'FlexTable
                 $FlexCellFormatter'), Lcom_google_gwt_user_client_ui_FlowPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'FlowPanel'), Lcom_google_gwt_user_client_ui_Grid_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Grid'), Lcom_google_gwt_user_client_ui_HTMLTable$ColumnFormatter_2_classLit =
                 createForClass('com.google.gwt.user.client.ui.', 'HTMLTable$ColumnFormatter'), Lcom_google_gwt_user_client_ui_HTMLTable$RowFormatter_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HTMLTable$RowFormatter'), Lcom_google_gwt_user_client_ui_HTMLTable$1_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HTMLTable$1'),
                 Lcom_google_gwt_user_client_ui_HasHorizontalAlignment$HorizontalAlignmentConstant_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HasHorizontalAlignment$HorizontalAlignmentConstant'), Lcom_google_gwt_user_client_ui_HasVerticalAlignment$VerticalAlignmentConstant_2_classLit = createForClass('com.google.gwt.user.client.ui.',
                 'HasVerticalAlignment$VerticalAlignmentConstant'), Lcom_google_gwt_user_client_ui_HorizontalPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HorizontalPanel'), Lcom_google_gwt_user_client_ui_Image_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Image'), Lcom_google_gwt_user_client_ui_Image$State_2_classLit =
                 createForClass('com.google.gwt.user.client.ui.', 'Image$State'), Lcom_google_gwt_user_client_ui_Image$ClippedState_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Image$ClippedState'), Ljava_util_AbstractList_2_classLit = createForClass('java.util.', 'AbstractList'), Ljava_util_ArrayList_2_classLit = createForClass('java.util.',
                 'ArrayList'), Lcom_google_gwt_user_client_ui_ListBox_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'ListBox'), Lcom_google_gwt_user_client_ui_PopupPanel$AnimationType_2_classLit = createForEnum('com.google.gwt.user.client.ui.', 'PopupPanel$AnimationType', values_1), _3Lcom_google_gwt_user_client_ui_PopupPanel$AnimationType_2_classLit =

                 createForArray('[Lcom.google.gwt.user.client.ui.', 'PopupPanel$AnimationType;'), Lcom_google_gwt_user_client_ui_RootPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'RootPanel'), Lcom_google_gwt_user_client_ui_RootPanel$DefaultRootPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'RootPanel$DefaultRootPanel'),
                 Lcom_google_gwt_user_client_ui_RootPanel$1_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'RootPanel$1'), Lcom_google_gwt_user_client_ui_SimplePanel$1_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'SimplePanel$1'), Lcom_google_gwt_user_client_ui_TabBar$ClickDelegatePanel_2_classLit =

                 createForClass('com.google.gwt.user.client.ui.', 'TabBar$ClickDelegatePanel'), Lcom_google_gwt_user_client_ui_Tree_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Tree'), Lcom_google_gwt_user_client_ui_TreeItem_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'TreeItem'), Lcom_google_gwt_user_client_ui_Tree$1_2_classLit =
                 createForClass('com.google.gwt.user.client.ui.', 'Tree$1'), Lcom_google_gwt_user_client_ui_TreeItem$TreeItemAnimation_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'TreeItem$TreeItemAnimation'), Lcom_google_gwt_user_client_ui_VerticalPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'VerticalPanel'),
                 Lcom_google_gwt_user_client_ui_WidgetCollection_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'WidgetCollection'), Lcom_google_gwt_user_client_ui_WidgetCollection$WidgetIterator_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'WidgetCollection$WidgetIterator'), Lcom_google_gwt_user_client_ui_WidgetIterators$1_2_classLit =
                 createForClass('com.google.gwt.user.client.ui.', 'WidgetIterators$1'), Lcom_google_gwt_user_client_CommandCanceledException_2_classLit = createForClass('com.google.gwt.user.client.', 'CommandCanceledException'), Lcom_google_gwt_user_client_CommandExecutor_2_classLit = createForClass('com.google.gwt.user.client.', 'CommandExecutor'),
                 Lcom_google_gwt_user_client_CommandExecutor$CircularIterator_2_classLit = createForClass('com.google.gwt.user.client.', 'CommandExecutor$CircularIterator'), Lcom_google_gwt_user_client_CommandExecutor$1_2_classLit = createForClass('com.google.gwt.user.client.', 'CommandExecutor$1'), Lcom_google_gwt_user_client_CommandExecutor$2_2_classLit =
                 createForClass('com.google.gwt.user.client.', 'CommandExecutor$2'), Lcom_google_gwt_user_client_Timer$1_2_classLit = createForClass('com.google.gwt.user.client.', 'Timer$1'), Lcom_google_gwt_user_client_Window$ClosingEvent_2_classLit = createForClass('com.google.gwt.user.client.', 'Window$ClosingEvent'), Lcom_google_gwt_user_client_Window
                 $WindowHandlers_2_classLit = createForClass('com.google.gwt.user.client.', 'Window$WindowHandlers'), Ljava_lang_IndexOutOfBoundsException_2_classLit = createForClass('java.lang.', 'IndexOutOfBoundsException'), Ljava_lang_ArrayStoreException_2_classLit = createForClass('java.lang.', 'ArrayStoreException'), Ljava_lang_Boolean_2_classLit =
                 createForClass('java.lang.', 'Boolean'), Ljava_lang_Number_2_classLit = createForClass('java.lang.', 'Number'), Ljava_lang_Class_2_classLit = createForClass('java.lang.', 'Class'), Ljava_lang_ClassCastException_2_classLit = createForClass('java.lang.', 'ClassCastException'), Ljava_lang_IllegalArgumentException_2_classLit = createForClass('java.lang.',
                 'IllegalArgumentException'), Ljava_lang_IllegalStateException_2_classLit = createForClass('java.lang.', 'IllegalStateException'), Ljava_lang_Integer_2_classLit = createForClass('java.lang.', 'Integer'), _3Ljava_lang_Integer_2_classLit = createForArray('[Ljava.lang.', 'Integer;'), Ljava_lang_NullPointerException_2_classLit = createForClass('java.lang.',
                 'NullPointerException'), Ljava_lang_StringBuffer_2_classLit = createForClass('java.lang.', 'StringBuffer'), Ljava_lang_UnsupportedOperationException_2_classLit = createForClass('java.lang.', 'UnsupportedOperationException'), _3Ljava_lang_Object_2_classLit = createForArray('[Ljava.lang.', 'Object;'), Ljava_util_AbstractHashMap_2_classLit =
                 createForClass('java.util.', 'AbstractHashMap'), Ljava_util_AbstractHashMap$EntrySet_2_classLit = createForClass('java.util.', 'AbstractHashMap$EntrySet'), Ljava_util_AbstractHashMap$EntrySetIterator_2_classLit = createForClass('java.util.', 'AbstractHashMap$EntrySetIterator'), Ljava_util_AbstractMapEntry_2_classLit = createForClass('java.util.',
                 'AbstractMapEntry'), Ljava_util_AbstractHashMap$MapEntryNull_2_classLit = createForClass('java.util.', 'AbstractHashMap$MapEntryNull'), Ljava_util_AbstractHashMap$MapEntryString_2_classLit = createForClass('java.util.', 'AbstractHashMap$MapEntryString'), Ljava_util_AbstractList$IteratorImpl_2_classLit = createForClass('java.util.', 'AbstractList
                 $IteratorImpl'), Ljava_util_AbstractMap$1_2_classLit = createForClass('java.util.', 'AbstractMap$1'), Ljava_util_AbstractMap$1$1_2_classLit = createForClass('java.util.', 'AbstractMap$1$1'), Ljava_util_AbstractMap$2_2_classLit = createForClass('java.util.', 'AbstractMap$2'), Ljava_util_AbstractMap$2$1_2_classLit = createForClass('java.util.',
                 'AbstractMap$2$1'), Ljava_util_AbstractSequentialList_2_classLit = createForClass('java.util.', 'AbstractSequentialList'), Ljava_util_HashMap_2_classLit = createForClass('java.util.', 'HashMap'), Ljava_util_HashSet_2_classLit = createForClass('java.util.', 'HashSet'), Ljava_util_LinkedList_2_classLit = createForClass('java.util.', 'LinkedList'),
                 Ljava_util_LinkedList$ListIteratorImpl_2_clas




          76                                                                                                                                                                                                                                                                                                                                                                            JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
RPC log <module>.rpc.log

      ====================================
      Types potentially sent from browser:
      ====================================

      Reachable types computed on: Thu Jul 23 14:38:43
        PDT 2009
      com.google.gwt.user.client.rpc.IncompatibleRemot
        eServiceException
      Path '…' is reachable as a subtype of type '…'
      Started from '…'




          77                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Hacks you should know

            class Safe {
              private static int secret() {
                return 42;
              }
            }

            class Thief {
              public native int breakIn() /*-{
                return @Safe::secret()();
              }-*/;
            }




          78                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
Be prepared


     Removing everything @deprecated for GWT 2.0




          79                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009
80                   JBoss World 2009 | Fred Sauer

Wednesday, September 2, 2009

More Related Content

What's hot

Hyper-V VMM ile Cloud computing
Hyper-V VMM ile Cloud computingHyper-V VMM ile Cloud computing
Hyper-V VMM ile Cloud computing
Ahmet Mutlu
 
Nuxeo World Session: Nuxeo Distributions
Nuxeo World Session: Nuxeo DistributionsNuxeo World Session: Nuxeo Distributions
Nuxeo World Session: Nuxeo Distributions
Nuxeo
 
Web Content Management System Deployment Patterns
Web Content Management System Deployment PatternsWeb Content Management System Deployment Patterns
Web Content Management System Deployment Patterns
sggottlieb
 
Web Frameworks
Web FrameworksWeb Frameworks
Web Frameworks
Capgemini TS Grenoble
 
MongoDB and Windows Azure
MongoDB and Windows AzureMongoDB and Windows Azure
MongoDB and Windows Azure
Doug Mahugh
 
Building and Customizing CoreOS
Building and Customizing CoreOSBuilding and Customizing CoreOS
Building and Customizing CoreOS
雄也 日下部
 

What's hot (6)

Hyper-V VMM ile Cloud computing
Hyper-V VMM ile Cloud computingHyper-V VMM ile Cloud computing
Hyper-V VMM ile Cloud computing
 
Nuxeo World Session: Nuxeo Distributions
Nuxeo World Session: Nuxeo DistributionsNuxeo World Session: Nuxeo Distributions
Nuxeo World Session: Nuxeo Distributions
 
Web Content Management System Deployment Patterns
Web Content Management System Deployment PatternsWeb Content Management System Deployment Patterns
Web Content Management System Deployment Patterns
 
Web Frameworks
Web FrameworksWeb Frameworks
Web Frameworks
 
MongoDB and Windows Azure
MongoDB and Windows AzureMongoDB and Windows Azure
MongoDB and Windows Azure
 
Building and Customizing CoreOS
Building and Customizing CoreOSBuilding and Customizing CoreOS
Building and Customizing CoreOS
 

Viewers also liked

GWT Introduction and Overview - SV Code Camp 09
GWT Introduction and Overview - SV Code Camp 09GWT Introduction and Overview - SV Code Camp 09
GWT Introduction and Overview - SV Code Camp 09
Fred Sauer
 
Javaland 2014 / GWT architectures and lessons learned
Javaland 2014 / GWT architectures and lessons learnedJavaland 2014 / GWT architectures and lessons learned
Javaland 2014 / GWT architectures and lessons learned
pgt technology scouting GmbH
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
pgt technology scouting GmbH
 
GWT is Smarter Than You
GWT is Smarter Than YouGWT is Smarter Than You
GWT is Smarter Than You
Robert Cooper
 
What's New in Android
What's New in AndroidWhat's New in Android
What's New in Android
Robert Cooper
 
GWT Training - Session 3/3
GWT Training - Session 3/3GWT Training - Session 3/3
GWT Training - Session 3/3
Faiz Bashir
 
GWT Training - Session 2/3
GWT Training - Session 2/3GWT Training - Session 2/3
GWT Training - Session 2/3
Faiz Bashir
 
GWT Overview And Feature Preview - SV Web JUG - June 16 2009
GWT Overview And Feature Preview - SV Web JUG -  June 16 2009GWT Overview And Feature Preview - SV Web JUG -  June 16 2009
GWT Overview And Feature Preview - SV Web JUG - June 16 2009
Fred Sauer
 
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
Fred Sauer
 
GWT architecture best practices and lessons learned
GWT architecture best practices and lessons learnedGWT architecture best practices and lessons learned
GWT architecture best practices and lessons learned
pgt technology scouting GmbH
 
GWT Training - Session 1/3
GWT Training - Session 1/3GWT Training - Session 1/3
GWT Training - Session 1/3
Faiz Bashir
 
GWT widget development
GWT widget developmentGWT widget development
GWT widget development
pgt technology scouting GmbH
 

Viewers also liked (12)

GWT Introduction and Overview - SV Code Camp 09
GWT Introduction and Overview - SV Code Camp 09GWT Introduction and Overview - SV Code Camp 09
GWT Introduction and Overview - SV Code Camp 09
 
Javaland 2014 / GWT architectures and lessons learned
Javaland 2014 / GWT architectures and lessons learnedJavaland 2014 / GWT architectures and lessons learned
Javaland 2014 / GWT architectures and lessons learned
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
GWT is Smarter Than You
GWT is Smarter Than YouGWT is Smarter Than You
GWT is Smarter Than You
 
What's New in Android
What's New in AndroidWhat's New in Android
What's New in Android
 
GWT Training - Session 3/3
GWT Training - Session 3/3GWT Training - Session 3/3
GWT Training - Session 3/3
 
GWT Training - Session 2/3
GWT Training - Session 2/3GWT Training - Session 2/3
GWT Training - Session 2/3
 
GWT Overview And Feature Preview - SV Web JUG - June 16 2009
GWT Overview And Feature Preview - SV Web JUG -  June 16 2009GWT Overview And Feature Preview - SV Web JUG -  June 16 2009
GWT Overview And Feature Preview - SV Web JUG - June 16 2009
 
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
 
GWT architecture best practices and lessons learned
GWT architecture best practices and lessons learnedGWT architecture best practices and lessons learned
GWT architecture best practices and lessons learned
 
GWT Training - Session 1/3
GWT Training - Session 1/3GWT Training - Session 1/3
GWT Training - Session 1/3
 
GWT widget development
GWT widget developmentGWT widget development
GWT widget development
 

Similar to Google Web Toolkit for the Enterprise Developer - JBoss World 2009

Mobile Web App Development
Mobile Web App DevelopmentMobile Web App Development
Mobile Web App Development
Brian LeRoux
 
iPhone Web Development
iPhone Web DevelopmentiPhone Web Development
iPhone Web Development
Andy Peters
 
Fast Slim Correct: The History and Evolution of JavaScript.
Fast Slim Correct: The History and Evolution of JavaScript.Fast Slim Correct: The History and Evolution of JavaScript.
Fast Slim Correct: The History and Evolution of JavaScript.
John Dalziel
 
DjangoCon 2009 Keynote
DjangoCon 2009 KeynoteDjangoCon 2009 Keynote
DjangoCon 2009 Keynote
Ted Leung
 
JavaME Deploy and Test - JMDF 2005
JavaME Deploy and Test - JMDF 2005JavaME Deploy and Test - JMDF 2005
JavaME Deploy and Test - JMDF 2005
Edoardo Schepis
 
Developing cross platform desktop application with Ruby
Developing cross platform desktop application with RubyDeveloping cross platform desktop application with Ruby
Developing cross platform desktop application with Ruby
Anis Ahmad
 
Gf Overview For Spanish Speakers 16 October2008
Gf Overview For Spanish Speakers 16 October2008Gf Overview For Spanish Speakers 16 October2008
Gf Overview For Spanish Speakers 16 October2008
Eduardo Pelegri-Llopart
 
Angular Extreme Performance - V2
Angular Extreme Performance - V2Angular Extreme Performance - V2
Angular Extreme Performance - V2
Gustavo Costa
 
Zh Tw Introduction To Cloud Computing
Zh Tw Introduction To Cloud ComputingZh Tw Introduction To Cloud Computing
Zh Tw Introduction To Cloud Computing
kevin liao
 
November 2009 - Whats Cooking At JBoss Tools
November 2009 - Whats Cooking At JBoss ToolsNovember 2009 - Whats Cooking At JBoss Tools
November 2009 - Whats Cooking At JBoss Tools
JBug Italy
 
Three key concepts for java batch
Three key concepts for java batchThree key concepts for java batch
Three key concepts for java batch
timfanelli
 
JavaFX Uni Parthenope
JavaFX Uni ParthenopeJavaFX Uni Parthenope
JavaFX Uni Parthenope
Emanuela Giannetta
 
z/VSE Update and Outlook
z/VSE Update and Outlookz/VSE Update and Outlook
z/VSE Update and Outlook
IBM India Smarter Computing
 
Web Leaps Forward
Web Leaps ForwardWeb Leaps Forward
Web Leaps Forward
Moh Haghighat
 
Chef in the cloud [dbccg]
Chef in the cloud [dbccg]Chef in the cloud [dbccg]
Chef in the cloud [dbccg]
jtimberman
 
JUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinderJUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinder
marekgoldmann
 
Html5
Html5Html5
Html5
uutttlan
 
Google html5 Tutorial
Google html5 TutorialGoogle html5 Tutorial
Google html5 Tutorial
jobfan
 
GTUG JS will save us all
GTUG JS will save us allGTUG JS will save us all
GTUG JS will save us all
Mário Valente
 
Yakiniku on the Cloud
Yakiniku on the CloudYakiniku on the Cloud
Yakiniku on the Cloud
Takao Funami
 

Similar to Google Web Toolkit for the Enterprise Developer - JBoss World 2009 (20)

Mobile Web App Development
Mobile Web App DevelopmentMobile Web App Development
Mobile Web App Development
 
iPhone Web Development
iPhone Web DevelopmentiPhone Web Development
iPhone Web Development
 
Fast Slim Correct: The History and Evolution of JavaScript.
Fast Slim Correct: The History and Evolution of JavaScript.Fast Slim Correct: The History and Evolution of JavaScript.
Fast Slim Correct: The History and Evolution of JavaScript.
 
DjangoCon 2009 Keynote
DjangoCon 2009 KeynoteDjangoCon 2009 Keynote
DjangoCon 2009 Keynote
 
JavaME Deploy and Test - JMDF 2005
JavaME Deploy and Test - JMDF 2005JavaME Deploy and Test - JMDF 2005
JavaME Deploy and Test - JMDF 2005
 
Developing cross platform desktop application with Ruby
Developing cross platform desktop application with RubyDeveloping cross platform desktop application with Ruby
Developing cross platform desktop application with Ruby
 
Gf Overview For Spanish Speakers 16 October2008
Gf Overview For Spanish Speakers 16 October2008Gf Overview For Spanish Speakers 16 October2008
Gf Overview For Spanish Speakers 16 October2008
 
Angular Extreme Performance - V2
Angular Extreme Performance - V2Angular Extreme Performance - V2
Angular Extreme Performance - V2
 
Zh Tw Introduction To Cloud Computing
Zh Tw Introduction To Cloud ComputingZh Tw Introduction To Cloud Computing
Zh Tw Introduction To Cloud Computing
 
November 2009 - Whats Cooking At JBoss Tools
November 2009 - Whats Cooking At JBoss ToolsNovember 2009 - Whats Cooking At JBoss Tools
November 2009 - Whats Cooking At JBoss Tools
 
Three key concepts for java batch
Three key concepts for java batchThree key concepts for java batch
Three key concepts for java batch
 
JavaFX Uni Parthenope
JavaFX Uni ParthenopeJavaFX Uni Parthenope
JavaFX Uni Parthenope
 
z/VSE Update and Outlook
z/VSE Update and Outlookz/VSE Update and Outlook
z/VSE Update and Outlook
 
Web Leaps Forward
Web Leaps ForwardWeb Leaps Forward
Web Leaps Forward
 
Chef in the cloud [dbccg]
Chef in the cloud [dbccg]Chef in the cloud [dbccg]
Chef in the cloud [dbccg]
 
JUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinderJUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinder
 
Html5
Html5Html5
Html5
 
Google html5 Tutorial
Google html5 TutorialGoogle html5 Tutorial
Google html5 Tutorial
 
GTUG JS will save us all
GTUG JS will save us allGTUG JS will save us all
GTUG JS will save us all
 
Yakiniku on the Cloud
Yakiniku on the CloudYakiniku on the Cloud
Yakiniku on the Cloud
 

Recently uploaded

Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
Pixlogix Infotech
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
TIPNGVN2
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 

Recently uploaded (20)

Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 

Google Web Toolkit for the Enterprise Developer - JBoss World 2009

  • 1. Google Web Toolkit (GWT) for the Enterprise Developer Fred Sauer Developer Advocate, Google September 2009 fredsa@google.com 1 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 2. Agenda 30 second survey What to do about questions? Mission & Introduction Know your toolkit Tips Q&A 2 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 3. Mission statement "GWT's mission is to radically improve the web experience for users by enabling developers to use existing Java tools to build no-compromise AJAX for any modern browser." 3 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 4. GWT is all about Productivity for developers Language, IDEs, tools, libraries People, ecosystem Performance for your users 'Perfect' caching Whole program optimization Better than practical hand written code 4 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 5. GWT Browser-Proofs Your JavaScript Code... IE Firefo x i Safar e m Chro Opera Wednesday, September 2, 2009
  • 6. Deferred Binding Firefox Webkit (Safari) Opera IE Typical portable 2876 ms 1276 ms 2053 ms 4078 ms setInnerText() textContent=... - 908 ms 1386 ms - innerText=... 2477 ms 918 ms 1520 ms 2469 ms DOM manipulation 7148 ms 1997 ms 4836 ms 14800 ms Improvement 14% 29% 32% 39% 6 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 7. Deferred Binding at Runtime 7 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 8. Deferred Binding at Runtime 8 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 9. More than just a compiler 9 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 10. History just works 10 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 11. Rich Text Area 11 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 12. Widget Libraries • GWT (http://code.google.com/webtoolkit/) • Incubator (http://code.google.com/p/google-web-toolkit-incubator/) • Smart GWT (http://code.google.com/p/smartgwt/) • GWT-Ext (http://code.google.com/p/gwt-ext/) • Vaadin (IT Mill Toolkit) (http://vaadin.com/) • GWT mosaic (http://code.google.com/p/gwt-mosaic/) • Ext GWT (http://extjs.com/products/gxt/) • Advanced GWT Components (http://advanced-gwt.sourceforge.net/) 12 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 13. GUI Editing 13 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 14. Simple, Powerful RPCs interface SpellService extends RemoteService { /**   * Checks spelling and suggests  * alternatives.  * @param the word to check  * @return the list of alternatives  */ String[] suggest(String word); } 14 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 15. GWT 2.0 operating modes Development Mode (Hosted Mode) All about productivity Java + JavaScript JVM Debugging Now in any supported browser Production Mode (Web Mode) All about performance Compiled, Pure JavaScript 15 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 16. Development Mode (Hosted Mode) JVM debugging Server & Client code in the same IDE Step in / over / out Introspect & modify variables Hot swap code (ignore the IDE warning!) U E T R O T N 16 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 17. Development Mode In any supported browser FF, Safari, IE6/7/8, … On your machine On remote machines In another VM Using a callback address:port http://mymachine:8080/Foo.html?gwt.codesvr=… 17 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 18. Development Mode Web Code Server Server Java Virtual Machine 18 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 19. Google Plugin for Eclipse 19 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 20. Eclipse plugin highlights Extensive JSNI support RPC sync/async quick fixes Launch configurations GWT JUnit tests Contributor SDKs (gwt-user, gwt-dev-<platform>) Development Mode (GWT 2.0) Hosted Mode (GWT 1.7) Constantly improving; check back often 20 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 21. RTL, I18N, L10N, A11Y 21 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 22. Locale support <!-- Always use utf-8 --> <meta http-equiv="content-type" content="text/ html;charset=utf-8" /> <!-- Compile time locales --> <extend-property name="locale" values="fr_CA,de"/> <set-property-fallback name="locale" value="fr_CA"/> // Runtime locales LocaleInfo.getAvailableLocaleNames(); 22 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 23. Developer guided code splitting GWT.runAsync() Size of Initial JavaScript Download (KB) 1500 1400 KB 1125 750 7x Decrease Initial Download 375 200 KB 0 26-Nov 29-Apr 18-Jun 28-Jul 12-Sep 27-Oct 24-Dec 16-Mar 23 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 24. Developer guided code splitting GWT.runAsync() Time HTML JS Running Without splitting With splitting Speedup HTML JS Running! Running!! Running!!! JS JS 24 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 25. Developer guided code splitting GWT.runAsync() Time HTML JS Running Without splitting With splitting Speedup HTML JS Running! Running!! Running!!! JS JS 25 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 26. Manual code splitting - Don't try this at home 26 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 27. Developer guided code splitting GWT.runAsync() GWT.runAsync(new RunAsyncCallback() {   public void onSuccess() {     Window.alert("Hello, AJAX");     doMoreStuff();   }   public void onFailure(Throwable caught) {     Window.alert("Code download failed");   } }); 27 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 28. RunAsync package pattern - Gateway class package com.foo.client.addressbookasync; public class AddressBook { // Can't construct directly private AddressBook() { } // Only callable once you have an instance public show() { // use package restricted code here } … 28 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 29. RunAsync package pattern - Gateway class … // Async interface to obtain an // instance of AddressBook public interface Callback { void onCreated(AddressBook addressBook); void onCreateFailure(Throwable e); } … 29 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 30. RunAsync package pattern - Gateway class … public static void get(final Callback cb) { GWT.runAsync(new RunAsyncCallback() { public void onSuccess() { cb.onCreated(new AddressBook()); } public void onFailure(Throwable e) { cb.onCreateFailure(e); } }); } } 30 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 31. Story of Your Compile (SOYC) -C 31 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 32. SOYC The Story of Your Compile: Reading the Tea Leaves of the GWT Compiler for an Optimized Future Lex Spoon and Bruce Johnson May 28, 2009 @ Google I/O http://code.google.com/events/io/sessions/ StoryCompilerGwtCompiler.html 32 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 33. JSON - JavaScript Object Notation { "firstName": "Fred", "lastName": "Sauer", "contactInfo": { "email": "fredsa@google.com", … } "likes": [ "Open Source", "GWT", "Chocolate" ] } 33 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 34. Using JSON // 1. Server responds {"firstName": "Fred", "lastName": "Sauer", … } // 2. Client parses p = safeJsonParse(responseText); // or Client evaluates (Danger, Will Robinson!) p = eval(responseText); … 34 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 35. Using JSON // Brittle var greeting = 'Hello, ' + p.firstName + ' ' + p.lastName; // Additional payload for user to download function getName(p) { return p.firstName + ' ' + p.lastName; } // Additional method invocation overhead var greeting = 'Hello, ' + getName(p); 35 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 36. The amazing disappearing code trick Using JSO Types // This class is about to disappear! public class Person extends JavaScriptObject { // assume 'this' has 'firstName' property public native String getFirstName() /*-{ return this.firstName; }-*/; public native String getLastName() /*-{ return this.lastName; }-*/; … 36 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 37. The amazing disappearing code trick public class Person extends JavaScriptObject { … // This method is about to disappear as well! public String getDisplayName() { return getFirstName() + " " + getLastName(); } } 37 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 38. The amazing disappearing code trick … // Go ahead, use your type-safe abstractions // You get to keep your wrapper classes Person person; // Also keep your convenience methods String name = person.getDisplayName(); // GWT performs disappearing trick var name = p.firstName + ' ' + p.lastName; 38 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 39. Overlay Types++ Client/server agnostic code using Person (e.g. unit tests, business logic) JavaScriptObject Person (Class) (Interface) Person_ClientImpl Person_ServerImpl (JSO + Interface) (POJO or whatever) 39 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 40. Responsiveness matters 0.1 seconds perceived as instantaneous 1 second maintains the feeling that a single task is being carried out 10 seconds limit for keeping user’s attention 40 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 41. Roundtrips are deadly 1 round trip for TCP connection setup (1 round trip for HTTP redirect?) 1 round trip for each HTTP request $ ping ohare.com PING ohare.com (70.142.247.22): 56 data bytes 64 bytes from 70.142.247.22: icmp_seq=0 ttl=113 time=54.689 ms 64 bytes from 70.142.247.22: icmp_seq=1 ttl=113 time=55.500 ms 64 bytes from 70.142.247.22: icmp_seq=2 ttl=113 time=54.728 ms 41 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 42. Reducing round trip time Use HTTP Expires and Cache-Control headers Use GWT 'Perfect Caching' Cache 'forever' - your entire app and all its resources Bundle, bundle, bundle Enable HTTP Pipelining Use multiple hostnames Defeat browser's two connection limit Watch out for DNS lookup overhead though 42 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 43. Know your HTTP Headers <!-- See RFC 2616. Here's an example: Expires: Thu, 02 Sep 2010 03:21:55 GMT Cache-Control: public, max-age=31536000 --> <Files *.cache.*> ExpiresDefault "now plus 1 year" </Files> <Files *.nocache.*> ExpiresDefault "access" </Files> 43 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 44. Sprites for free (ImageBundle) 20,558 bytes 11 separate images 6,824 bytes 1 bundled image ∑ Separate Bundled 44 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 45. Sprites for free (ImageBundle) public interface MyDialogImages extends ImageBundle { // Look for 'saveButton.{png|jpg|gif|bmp}' AbstractImagePrototype saveButton(); AbstractImagePrototype okButton(); @Resource("com/foo/myapp/btn_cancel.png") AbstractImagePrototype cancelButton(); } 45 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 46. Injecting / inspecting resources at compile-time interface MyBundle extends ClientBundle { public static final MyBundle INSTANCE = GWT.create(MyBundle.class); @Source("app_config.xml") TextResource appConfig1(); @Source("wordlist.txt") ExternalTextResource wordlist(); … 46 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 47. Injecting / inspecting resources at compile-time interface MyBundle extends ClientBundle { @Source("myCursor.cur")   DataResource myCursor(); } MyBundle.INSTANCE.myCursor().getUrl(); http://localhost:8080/foo/ B349934EA27D6EFFD949B88E6A116ED7.cache.cur data:content/unknown;base64,c2FkIGprZ2xkZdqZGZrb CBnamtkZmxnIGRma2xnaiBrZGxmZ2prbGRmamcga2xkaiBna 2w7ZGZqZy…IGRmamtsw7ZGZqZyBrbGRmZ2ogZGtsO 47 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 48. Injecting / inspecting resources at compile-time interface MyBundle extends ClientBundle { … @Source("arrow.png") // locale sensitive!   @ImageOptions(flipRtl = true)   ImageResource pointer(); } MyBundle.INSTANCE.pointer().getUrl(); MyBundle.INSTANCE.pointer().getWidth(); MyBundle.INSTANCE.pointer().getHeight(); … 48 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 49. Injecting / inspecting resources at compile-time interface MyBundle extends ClientBundle { … @Strict // or @NotStrict @Source("address_book.css") CssResource addressBookCSS(); } 49 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 50. Compile time CSS awesomeness http://code.google.com/p/google-web-toolkit/wiki/CssResource @def small 1px; /* Constants */ @if user.agent safari gecko1_8 { … } @if locale en { … } @noflip { … } /* no automatic left/right swap */ @external 50 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 51. Pluggable Architecture 51 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 52. Linkers - orchestrating compiler output xs sso Out of the box std 3rd party Ω µ ∆ ¶ 52 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 53. Single Script (sso) Linker SingleScriptLinker yourpage.html <module>.nocache.js 53 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 54. Cross site (xs) Linker XSLinker yourpage.html <module>.nocache.js <md5>.cache.js 54 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 55. Standard (std) Linker IFrameLinker yourpage.html <module>.nocache.js <iframe ... <md5>.cache.html 55 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 56. Generators GWT.create(…) What code will your code write? 56 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 57. Corporate Gadgets 57 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 58. Making gadgets @ModulePrefs(   title = "Hello World!",   directory_title = "My first gadget",   screenshot = "gadget.png",   thumbnail = "thumb.png", … height = 210) public class HelloGadget extends Gadget<HelloPreferences> { … 58 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 59. Making gadgets @ModulePrefs(…) public class HelloGadget extends Gadget<HelloPreferences> { public void onModuleLoad() { /* ... */}   protected void init( final HelloPreferences prefs) { … } } 59 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 60. Making gadget preferences public interface MealPreferences extends UserPreferences {   @PreferenceAttributes( display_name = "Vegetarian", default_value = "false")   BooleanPreference noMeat(); } 60 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 61. Expecting the unexpected in Development public void onModuleLoad() { Log.setUncaughtExceptionHandler();   // This isn't going to help us now DeferredCommand.addCommand(new Command() {   GWT.setUncaughtExceptionHandler(…);   public void execute() {       onModuleLoad2();   //}Your initialization code goes wrong here :(     }); } // Cross your fingers } private void onModuleLoad2() {   // Your module initialization code goes here } 61 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 62. Expecting the unexpected in Development Mode // Hyperlink your stack traces Throwable#printStrackTrace() 62 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 63. Expecting the unexpected in Development Mode // Logging with zero overhead in production mode <inherits name="com.allen_sauer.gwt.log.gwt-log-DEBUG"/> Log.debug("This is a 'DEBUG' test message"); 63 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 64. Make the compiler output human readable // Production Mode (-style OBF) Ee='area=';function nc(){$wnd.alert(Ee+(u(new q),Hb($doc))*Gb($doc))} // -draftCompile -style PRETTY function $onModuleLoad() { $showArea(getClientWidth(),getClientHeight()); } function $showArea(width, height){ alert_0('area=' + width * height); } 64 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 65. Expecting the unexpected in Production Mode <inherits name="compiler.emulatedStack" /> <set-configuration-property name="compiler.emulatedStack.recordLineNumbers" value="true" /> <set-configuration-property name="compiler.emulatedStack.recordFileNames" value="true" /> 65 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 66. Expecting the unexpected in Production Mode Even with -style OBF Server side symbol maps, e.g. xQ() -> MyClass.myOriginalJavaMethod() 66 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 67. Expecting the unexpected in Production Mode You still get stack traces in JavaScript! Throwable#getStackTrace() 67 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 68. Projects you should know http://code.google.com/p/google-web-toolkit-incubator/ Ideas: widgets, libraries, resources http://code.google.com/p/gwt-google-apis/ (GALGWT) Gears, Gadgets, AJAX Search, Maps, Visualization, Language, AjaxLoader http://code.google.com/p/gwt-exporter/ 68 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 69. Shameless plugs (gwt-dnd, gwt-log, gwt-voices) 69 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 70. Modules you should know <!-- Selenium, WebDriver, etc. --> <inherits name="com.google.gwt.user.Debug" /> <set-property name="gwt.enableDebugId" value="true" /> // Setup my ids for QA Button searchButton = new Button(); searchButton.ensureDebugId("srch"); 70 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 71. Watch the compiler optimize away your code -Dgwt.jjs.traceMethods=foo.Bar.onModuleLoad public class ShapeExample implements EntryPoint { public void onModuleLoad() { Shape s = getShape(); Window.alert("Area is " + s.getArea()); } public static abstract class Shape { public abstract double getArea(); } private Shape getShape() { return shape; } private final Shape shape = new SmallSquare(); public static abstract class Square extends Shape { public double getArea() { return getSideLength() * getSideLength(); } public abstract double getSideLength(); } public static class SmallSquare extends Square { private static final double SIDE_LEN_SMALL = 2; public double getSideLength() { return SIDE_LEN_SMALL; } } } 71 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 72. Watch the compiler optimize away your code -Dgwt.jjs.traceMethods=foo.Bar.onModuleLoad --------------------------- CleanupRefsVisitor: DeadCodeVisitor: InliningVisitor: TightenTypesVisitor: RewriteCallSites: FinalizeVisitor: JAVA INITIAL: --------------------------- public void onModuleLoad(){ static final void $onModuleLoad(ShapeExample final void onModuleLoad(){ this$static){ final ShapeExample$Shape s = this.getShape(); ShapeExample$Shape s = this.getShape(); this$static.shape; final ShapeExample$Shape Window.alert("Area is " +ss.getArea()); ShapeExample$SmallSquare s = ShapeExample. 4.0"); this$static.getShape(); = ShapeExample. this$static.shape; ((this $static.shape)); $getShape(this$static); 4.0"); } Window.alert("Area is " + s.getArea()); ((2.0)) * ((2.0))); ShapeExample$SmallSquare. ((ShapeExample$SmallSquare. ShapeExample$Square. $getSideLength(s) * is " + s.getArea()); $getArea(s)); } Window.alert("AreaShapeExample$SmallSquare. $getSideLength(s)); $getSideLength(s)))); } } 72 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 73. System properties you should know (GWT 1.7 and prior) // Hosted mode just closes // when you tell it to (e.g. ALT-F4) -Dgwt.shell.endquick= 73 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 74. Compiler arguments you should know // Human readable code -style PRETTY // fast (for development) -draftCompile // Compile N permutations in parallel // (N = number of cores) -localWorkers=N 74 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 75. Compiler arguments you should know // Story of your compile -soyc // Symbols maps, SOYC reports, RPC info -exta stuff -logLevel // GWT Compiler argument! -ea 75 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 76. EXPERIMENTAL arguments you should know // Don't care what Class#getName() returns? -XdisableClassMetadata Showcase metadata before var Ljava_lang_Object_2_classLit = createForClass('java.lang.', 'Object'), Lcom_google_gwt_animation_client_Animation_2_classLit = createForClass('com.google.gwt.animation.client.', 'Animation'), _3Lcom_google_gwt_animation_client_Animation_2_classLit = createForArray('[Lcom.google.gwt.animation.client.', 'Animation;'), Lcom_google_gwt_user_client_Timer_2_classLit = createForClass('com.google.gwt.user.client.', 'Timer'), Lcom_google_gwt_animation_client_Animation$1_2_classLit = createForClass('com.google.gwt.animation.client.', 'Animation$1'), _3I_classLit = createForArray('', '[I'), Ljava_lang_Throwable_2_classLit = createForClass('java.lang.', 'Throwable'), Ljava_lang_Exception_2_classLit = createForClass('java.lang.', 'Exception'), Ljava_lang_RuntimeException_2_classLit = createForClass('java.lang.', 'RuntimeException'), Lcom_google_gwt_core_client_impl_AsyncFragmentLoader$HttpDownloadFailure_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'AsyncFragmentLoader$HttpDownloadFailure'), Lcom_google_gwt_core_client_impl_AsyncFragmentLoader$InitialFragmentDownloadFailed_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'AsyncFragmentLoader$InitialFragmentDownloadFailed'), Lcom_google_gwt_core_client_impl_AsyncFragmentLoader$1_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'AsyncFragmentLoader$1'), Lcom_google_gwt_core_client_impl_StackTraceCreator$Collector_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'StackTraceCreator$Collector'), Ljava_lang_StackTraceElement_2_classLit = createForClass('java.lang.', 'StackTraceElement'), _3Ljava_lang_StackTraceElement_2_classLit = createForArray('[Ljava.lang.', 'StackTraceElement;'), Lcom_google_gwt_core_client_impl_StringBufferImpl_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'StringBufferImpl'), Lcom_google_gwt_core_client_impl_StringBufferImplAppend_2_classLit = createForClass('com.google.gwt.core.client.impl.', 'StringBufferImplAppend'), Lcom_google_gwt_core_client_JavaScriptException_2_classLit = createForClass('com.google.gwt.core.client.', 'JavaScriptException'), Lcom_google_gwt_core_client_JavaScriptObject_2_classLit = createForClass('com.google.gwt.core.client.', 'JavaScriptObject$'), Lcom_google_gwt_dom_client_DOMImpl_2_classLit = createForClass('com.google.gwt.dom.client.', 'DOMImpl'), Lcom_google_gwt_dom_client_DOMImplStandard_2_classLit = createForClass('com.google.gwt.dom.client.', 'DOMImplStandard'), Lcom_google_gwt_dom_client_DOMImplSafari_2_classLit = createForClass('com.google.gwt.dom.client.', 'DOMImplSafari'), Ljava_lang_String_2_classLit = createForClass('java.lang.', 'String'), _3Ljava_lang_String_2_classLit = createForArray('[Ljava.lang.', 'String;'), Ljava_lang_Enum_2_classLit = createForClass('java.lang.', 'Enum'), Lcom_google_gwt_event_shared_GwtEvent_2_classLit = createForClass('com.google.gwt.event.shared.', 'GwtEvent'), Lcom_google_gwt_event_dom_client_DomEvent_2_classLit = createForClass('com.google.gwt.event.dom.client.', 'DomEvent'), Lcom_google_gwt_event_dom_client_ChangeEvent_2_classLit = createForClass('com.google.gwt.event.dom.client.', 'ChangeEvent'), Lcom_google_gwt_event_dom_client_ClickEvent_2_classLit = createForClass('com.google.gwt.event.dom.client.', 'ClickEvent'), Lcom_google_gwt_event_shared_GwtEvent$Type_2_classLit = createForClass('com.google.gwt.event.shared.', 'GwtEvent$Type'), Lcom_google_gwt_event_dom_client_DomEvent $Type_2_classLit = createForClass('com.google.gwt.event.dom.client.', 'DomEvent$Type'), Lcom_google_gwt_event_dom_client_PrivateMap_2_classLit = createForClass('com.google.gwt.event.dom.client.', 'PrivateMap'), Lcom_google_gwt_event_logical_shared_BeforeSelectionEvent_2_classLit = createForClass('com.google.gwt.event.logical.shared.', 'BeforeSelectionEvent'), Lcom_google_gwt_event_logical_shared_CloseEvent_2_classLit = createForClass('com.google.gwt.event.logical.shared.', 'CloseEvent'), Lcom_google_gwt_event_logical_shared_OpenEvent_2_classLit = createForClass('com.google.gwt.event.logical.shared.', 'OpenEvent'), Lcom_google_gwt_event_logical_shared_ResizeEvent_2_classLit = createForClass('com.google.gwt.event.logical.shared.', 'ResizeEvent'), Lcom_google_gwt_event_logical_shared_SelectionEvent_2_classLit = createForClass('com.google.gwt.event.logical.shared.', 'SelectionEvent'), Lcom_google_gwt_event_logical_shared_ValueChangeEvent_2_classLit = createForClass('com.google.gwt.event.logical.shared.', 'ValueChangeEvent'), Lcom_google_gwt_event_shared_DefaultHandlerRegistration_2_classLit = createForClass('com.google.gwt.event.shared.', 'DefaultHandlerRegistration'), Lcom_google_gwt_event_shared_HandlerManager_2_classLit = createForClass('com.google.gwt.event.shared.', 'HandlerManager'), Lcom_google_gwt_event_shared_HandlerManager$HandlerRegistry_2_classLit = createForClass('com.google.gwt.event.shared.', 'HandlerManager$HandlerRegistry'), Lcom_google_gwt_event_shared_HandlerManager$1_2_classLit = createForClass('com.google.gwt.event.shared.', 'HandlerManager$1'), Lcom_google_gwt_http_client_Request_2_classLit = createForClass('com.google.gwt.http.client.', 'Request'), Lcom_google_gwt_http_client_Response_2_classLit = createForClass('com.google.gwt.http.client.', 'Response'), Lcom_google_gwt_http_client_Request$1_2_classLit = createForClass('com.google.gwt.http.client.', 'Request$1'), Lcom_google_gwt_http_client_Request$3_2_classLit = createForClass('com.google.gwt.http.client.', 'Request$3'), Lcom_google_gwt_http_client_RequestBuilder_2_classLit = createForClass('com.google.gwt.http.client.', 'RequestBuilder'), Lcom_google_gwt_http_client_RequestBuilder$Method_2_classLit = createForClass('com.google.gwt.http.client.', 'RequestBuilder$Method'), Lcom_google_gwt_http_client_RequestBuilder$1_2_classLit = createForClass('com.google.gwt.http.client.', 'RequestBuilder$1'), Lcom_google_gwt_http_client_RequestException_2_classLit = createForClass('com.google.gwt.http.client.', 'RequestException'), Lcom_google_gwt_http_client_RequestPermissionException_2_classLit = createForClass('com.google.gwt.http.client.', 'RequestPermissionException'), Lcom_google_gwt_http_client_RequestTimeoutException_2_classLit = createForClass('com.google.gwt.http.client.', 'RequestTimeoutException'), Ljava_util_AbstractMap_2_classLit = createForClass('java.util.', 'AbstractMap'), Ljava_util_AbstractCollection_2_classLit = createForClass('java.util.', 'AbstractCollection'), Ljava_util_AbstractSet_2_classLit = createForClass('java.util.', 'AbstractSet'), Lcom_google_gwt_i18n_client_impl_LocaleInfoImpl_2_classLit = createForClass('com.google.gwt.i18n.client.impl.', 'LocaleInfoImpl'), Lcom_google_gwt_i18n_client_impl_LocaleInfoImpl_1shared_2_classLit = createForClass('com.google.gwt.i18n.client.impl.', 'LocaleInfoImpl_shared'), Lcom_google_gwt_i18n_client_impl_LocaleInfoImpl_1en_1runtimeSelection_2_classLit = createForClass('com.google.gwt.i18n.client.impl.', 'LocaleInfoImpl_en_runtimeSelection'), Lcom_google_gwt_i18n_client_HasDirection$Direction_2_classLit = createForEnum('com.google.gwt.i18n.client.', 'HasDirection$Direction', values_0), Showcase metadata after _3Lcom_google_gwt_i18n_client_HasDirection$Direction_2_classLit = createForArray('[Lcom.google.gwt.i18n.client.', 'HasDirection$Direction;'), Lcom_google_gwt_i18n_client_LocaleInfo_2_classLit = createForClass('com.google.gwt.i18n.client.', 'LocaleInfo'), _3C_classLit = createForArray('', '[C'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader1_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader1__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader1$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader1$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader10_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader10__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader10$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader10$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader10_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader10__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader11_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader11__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader11$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader11$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader11_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader11__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader12_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader12__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader12$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader12$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader12_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader12__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader13_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader13__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader13$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader13$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader13_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader13__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader15_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader15__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader15$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader15$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader15_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader15__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader16_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader16__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader16$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader16$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader16_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader16__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader17_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader17__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader17$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader17$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader17_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader17__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader18_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader18__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader18$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader18$1'), 5% - 10% Lcom_google_gwt_lang_asyncloaders_AsyncLoader18_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader18__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader19_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader19__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader19$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader19$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader19_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader19__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader1_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader1__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader2_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader2__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader2$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader2$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader20_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader20__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader20$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader20$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader20_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader20__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader21_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader21__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader21$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader21$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader21_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader21__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader22_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader22__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader22$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader22$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader22_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader22__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader23_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader23__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader23$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader23$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader23_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader23__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader24_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader24__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader24$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader24$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader24_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader24__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader25_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader25__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader25$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader25$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader25_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader25__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader26_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader26__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader26$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader26$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader26_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader26__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader27_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader27__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader27$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader27$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader27_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader27__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader28_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader28__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader28$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader28$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader28_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', script reduction 'AsyncLoader28__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader29_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader29__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader29$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader29$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader29_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader29__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader2_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader2__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader3_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader3__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader3$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader3$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader30_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader30__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader30$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader30$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader30_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader30__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader31_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader31__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader31$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader31$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader31_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader31__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader32_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader32__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader32$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader32$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader32_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader32__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader33_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader33__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader33$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader33$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader33_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader33__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader34_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader34__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader34$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader34$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader34_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader34__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader35_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader35__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader35$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader35$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader35_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader35__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader36_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader36__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader36$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader36$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader36_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader36__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader3_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader3__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader4_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader4__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader4$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader4$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader4_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader4__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader5_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader5__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader5$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader5$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader5_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader5__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader6_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader6__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader6$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader6$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader6_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader6__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader7_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader7__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader7$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader7$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader7_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader7__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader8_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader8__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader8$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader8$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader8_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader8__Callback'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader9_1_1Super_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader9__Super'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader9$1_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader9$1'), Lcom_google_gwt_lang_asyncloaders_AsyncLoader9_1_1Callback_2_classLit = createForClass('com.google.gwt.lang.asyncloaders.', 'AsyncLoader9__Callback'), Lcom_google_gwt_sample_showcase_client_content_i18n_ExampleConstants_2_classLit = createForInterface('com.google.gwt.sample.showcase.client.content.i18n.', 'ExampleConstants'), Lcom_google_gwt_user_client_ui_UIObject_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'UIObject'), Lcom_google_gwt_user_client_ui_Widget_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Widget'), Lcom_google_gwt_user_client_ui_Panel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Panel'), Lcom_google_gwt_user_client_ui_SimplePanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'SimplePanel'), Lcom_google_gwt_user_client_ui_LazyPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'LazyPanel'), Lcom_google_gwt_sample_showcase_client_ContentWidget_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'ContentWidget'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwConstantsExample_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwConstantsExample'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwConstantsExample$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwConstantsExample $2'), Lcom_google_gwt_sample_showcase_client_content_i18n_ColorConstants_2_classLit = createForInterface('com.google.gwt.sample.showcase.client.content.i18n.', 'ColorConstants'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwConstantsWithLookupExample_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwConstantsWithLookupExample'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwConstantsWithLookupExample$3_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwConstantsWithLookupExample$3'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwDateTimeFormat_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwDateTimeFormat'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwDateTimeFormat$4_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwDateTimeFormat$4'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwDictionaryExample_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwDictionaryExample'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwDictionaryExample$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwDictionaryExample$1'), Lcom_google_gwt_sample_showcase_client_content_i18n_ErrorMessages_2_classLit = createForInterface('com.google.gwt.sample.showcase.client.content.i18n.', 'ErrorMessages'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwMessagesExample_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwMessagesExample'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwMessagesExample$3_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwMessagesExample$3'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwNumberFormat_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwNumberFormat'), Lcom_google_gwt_sample_showcase_client_content_i18n_CwNumberFormat$4_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.i18n.', 'CwNumberFormat$4'), Lcom_google_gwt_sample_showcase_client_content_lists_CwListBox_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwListBox'), Lcom_google_gwt_sample_showcase_client_content_lists_CwListBox$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwListBox$2'), Lcom_google_gwt_sample_showcase_client_content_lists_CwMenuBar_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwMenuBar'), Lcom_google_gwt_sample_showcase_client_content_lists_CwMenuBar$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwMenuBar$2'), Lcom_google_gwt_sample_showcase_client_content_lists_CwStackPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwStackPanel'), Lcom_google_gwt_sample_showcase_client_content_lists_CwStackPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwStackPanel$1'), Lcom_google_gwt_sample_showcase_client_content_lists_CwSuggestBox_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwSuggestBox'), Lcom_google_gwt_sample_showcase_client_content_lists_CwSuggestBox$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwSuggestBox$1'), Lcom_google_gwt_sample_showcase_client_content_lists_CwTree_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwTree'), Lcom_google_gwt_sample_showcase_client_content_lists_CwTree$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.lists.', 'CwTree$1'), Lcom_google_gwt_sample_showcase_client_content_other_CwAnimation_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.other.', 'CwAnimation'), Lcom_google_gwt_sample_showcase_client_content_other_CwAnimation$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.other.', 'CwAnimation$1'), Lcom_google_gwt_sample_showcase_client_content_other_CwCookies_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.other.', 'CwCookies'), Lcom_google_gwt_sample_showcase_client_content_other_CwCookies$4_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.other.', 'CwCookies$4'), Lcom_google_gwt_sample_showcase_client_content_panels_CwAbsolutePanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwAbsolutePanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwAbsolutePanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwAbsolutePanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwAbsolutePanel$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwAbsolutePanel$2'), Lcom_google_gwt_sample_showcase_client_content_panels_CwDecoratorPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwDecoratorPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwDecoratorPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwDecoratorPanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwDisclosurePanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwDisclosurePanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwDisclosurePanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwDisclosurePanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwDockPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwDockPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwDockPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwDockPanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwFlowPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwFlowPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwFlowPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwFlowPanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwHorizontalPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwHorizontalPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwHorizontalPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwHorizontalPanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwHorizontalSplitPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwHorizontalSplitPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwHorizontalSplitPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwHorizontalSplitPanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwTabPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwTabPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwTabPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwTabPanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwVerticalPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwVerticalPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwVerticalPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwVerticalPanel$1'), Lcom_google_gwt_sample_showcase_client_content_panels_CwVerticalSplitPanel_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwVerticalSplitPanel'), Lcom_google_gwt_sample_showcase_client_content_panels_CwVerticalSplitPanel$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.panels.', 'CwVerticalSplitPanel$1'), Lcom_google_gwt_sample_showcase_client_content_popups_CwBasicPopup_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.popups.', 'CwBasicPopup'), Lcom_google_gwt_sample_showcase_client_content_popups_CwBasicPopup$4_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.popups.', 'CwBasicPopup$4'), Lcom_google_gwt_sample_showcase_client_content_popups_CwDialogBox_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.popups.', 'CwDialogBox'), Lcom_google_gwt_sample_showcase_client_content_popups_CwDialogBox$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.popups.', 'CwDialogBox$2'), Lcom_google_gwt_sample_showcase_client_content_tables_CwFlexTable_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.tables.', 'CwFlexTable'), Lcom_google_gwt_sample_showcase_client_content_tables_CwFlexTable$3_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.tables.', 'CwFlexTable$3'), Lcom_google_gwt_sample_showcase_client_content_tables_CwGrid_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.tables.', 'CwGrid'), Lcom_google_gwt_sample_showcase_client_content_tables_CwGrid$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.tables.', 'CwGrid$1'), Lcom_google_gwt_sample_showcase_client_content_text_CwBasicText_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.text.', 'CwBasicText'), Lcom_google_gwt_sample_showcase_client_content_text_CwBasicText$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.text.', 'CwBasicText$1'), Lcom_google_gwt_sample_showcase_client_content_text_CwRichText_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.text.', 'CwRichText'), Lcom_google_gwt_sample_showcase_client_content_text_CwRichText$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.text.', 'CwRichText$1'), Lcom_google_gwt_user_client_ui_Composite_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Composite'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwBasicButton_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwBasicButton'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwBasicButton$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwBasicButton$2'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwCheckBox_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwCheckBox'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwCustomButton_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwCustomButton'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwCustomButton$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwCustomButton$1'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwDatePicker_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwDatePicker'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwDatePicker$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwDatePicker$2'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwFileUpload_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwFileUpload'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwFileUpload$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwFileUpload$2'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwRadioButton_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwRadioButton'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwHyperlink_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwHyperlink'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwHyperlink$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwHyperlink$1'), Lcom_google_gwt_sample_showcase_client_content_widgets_CwRadioButton$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.content.widgets.', 'CwRadioButton$1'), Lcom_google_gwt_sample_showcase_client_Application_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Application'), Lcom_google_gwt_sample_showcase_client_Application_1ApplicationImages_1generatedBundle_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Application_ApplicationImages_generatedBundle'), Lcom_google_gwt_sample_showcase_client_ContentWidget$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'ContentWidget$1'), Lcom_google_gwt_sample_showcase_client_ContentWidget$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'ContentWidget$2'), Lcom_google_gwt_sample_showcase_client_ContentWidget$3_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'ContentWidget$3'), Lcom_google_gwt_sample_showcase_client_Showcase_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase'), Lcom_google_gwt_user_client_ui_FocusWidget_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'FocusWidget'), Lcom_google_gwt_user_client_ui_ButtonBase_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'ButtonBase'), Lcom_google_gwt_user_client_ui_CustomButton_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'CustomButton'), Lcom_google_gwt_user_client_ui_ToggleButton_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'ToggleButton'), Lcom_google_gwt_sample_showcase_client_Showcase$ThemeButton_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase$ThemeButton'), Lcom_google_gwt_sample_showcase_client_Showcase$1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase$1'), Lcom_google_gwt_sample_showcase_client_Showcase$2_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase$2'), Lcom_google_gwt_sample_showcase_client_Showcase$3_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase$3'), Lcom_google_gwt_sample_showcase_client_Showcase$4_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase$4'), Lcom_google_gwt_sample_showcase_client_Showcase$5_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'Showcase$5'), Lcom_google_gwt_sample_showcase_client_ShowcaseConstants_1_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'ShowcaseConstants_'), Lcom_google_gwt_sample_showcase_client_StyleSheetLoader$StyleTesterTimer_2_classLit = createForClass('com.google.gwt.sample.showcase.client.', 'StyleSheetLoader$StyleTesterTimer'), Lcom_google_gwt_user_client_impl_ElementMapperImpl_2_classLit = createForClass('com.google.gwt.user.client.impl.', 'ElementMapperImpl'), Lcom_google_gwt_user_client_impl_ElementMapperImpl$FreeNode_2_classLit = createForClass('com.google.gwt.user.client.impl.', 'ElementMapperImpl$FreeNode'), Lcom_google_gwt_user_client_impl_HistoryImpl_2_classLit = createForClass('com.google.gwt.user.client.impl.', 'HistoryImpl'), Lcom_google_gwt_user_client_impl_HistoryImplTimer_2_classLit = createForClass('com.google.gwt.user.client.impl.', 'HistoryImplTimer'), Lcom_google_gwt_user_client_impl_HistoryImplSafari_2_classLit = createForClass('com.google.gwt.user.client.impl.', 'HistoryImplSafari'), Lcom_google_gwt_user_client_ui_AbstractImagePrototype_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'AbstractImagePrototype'), Lcom_google_gwt_user_client_ui_impl_ClippedImagePrototype_2_classLit = createForClass('com.google.gwt.user.client.ui.impl.', 'ClippedImagePrototype'), Lcom_google_gwt_user_client_ui_impl_FocusImpl_2_classLit = createForClass('com.google.gwt.user.client.ui.impl.', 'FocusImpl'), Lcom_google_gwt_user_client_ui_impl_FocusImplOld_2_classLit = createForClass('com.google.gwt.user.client.ui.impl.', 'FocusImplOld'), Lcom_google_gwt_user_client_ui_impl_FocusImplSafari_2_classLit = createForClass('com.google.gwt.user.client.ui.impl.', 'FocusImplSafari'), Lcom_google_gwt_user_client_ui_ComplexPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'ComplexPanel'), Lcom_google_gwt_user_client_ui_AbsolutePanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'AbsolutePanel'), Lcom_google_gwt_user_client_ui_CellPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'CellPanel'), Lcom_google_gwt_user_client_ui_CheckBox_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'CheckBox'), Lcom_google_gwt_user_client_ui_CustomButton$Face_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'CustomButton$Face'), Lcom_google_gwt_user_client_ui_CustomButton$2_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'CustomButton$2'), Lcom_google_gwt_user_client_ui_DeckPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'DeckPanel'), Lcom_google_gwt_user_client_ui_DeckPanel$SlideAnimation_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'DeckPanel$SlideAnimation'), Lcom_google_gwt_user_client_ui_TabBar_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'TabBar'), Lcom_google_gwt_user_client_ui_DecoratorPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'DecoratorPanel'), Lcom_google_gwt_user_client_ui_Label_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Label'), Lcom_google_gwt_user_client_ui_HTML_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HTML'), _3Lcom_google_gwt_user_client_ui_Widget_2_classLit = createForArray('[Lcom.google.gwt.user.client.ui.', 'Widget;'), Lcom_google_gwt_user_client_ui_HTMLTable_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HTMLTable'), Lcom_google_gwt_user_client_ui_FlexTable_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'FlexTable'), Lcom_google_gwt_user_client_ui_HTMLTable$CellFormatter_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HTMLTable$CellFormatter'), Lcom_google_gwt_user_client_ui_FlexTable$FlexCellFormatter_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'FlexTable $FlexCellFormatter'), Lcom_google_gwt_user_client_ui_FlowPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'FlowPanel'), Lcom_google_gwt_user_client_ui_Grid_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Grid'), Lcom_google_gwt_user_client_ui_HTMLTable$ColumnFormatter_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HTMLTable$ColumnFormatter'), Lcom_google_gwt_user_client_ui_HTMLTable$RowFormatter_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HTMLTable$RowFormatter'), Lcom_google_gwt_user_client_ui_HTMLTable$1_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HTMLTable$1'), Lcom_google_gwt_user_client_ui_HasHorizontalAlignment$HorizontalAlignmentConstant_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HasHorizontalAlignment$HorizontalAlignmentConstant'), Lcom_google_gwt_user_client_ui_HasVerticalAlignment$VerticalAlignmentConstant_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HasVerticalAlignment$VerticalAlignmentConstant'), Lcom_google_gwt_user_client_ui_HorizontalPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'HorizontalPanel'), Lcom_google_gwt_user_client_ui_Image_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Image'), Lcom_google_gwt_user_client_ui_Image$State_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Image$State'), Lcom_google_gwt_user_client_ui_Image$ClippedState_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Image$ClippedState'), Ljava_util_AbstractList_2_classLit = createForClass('java.util.', 'AbstractList'), Ljava_util_ArrayList_2_classLit = createForClass('java.util.', 'ArrayList'), Lcom_google_gwt_user_client_ui_ListBox_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'ListBox'), Lcom_google_gwt_user_client_ui_PopupPanel$AnimationType_2_classLit = createForEnum('com.google.gwt.user.client.ui.', 'PopupPanel$AnimationType', values_1), _3Lcom_google_gwt_user_client_ui_PopupPanel$AnimationType_2_classLit = createForArray('[Lcom.google.gwt.user.client.ui.', 'PopupPanel$AnimationType;'), Lcom_google_gwt_user_client_ui_RootPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'RootPanel'), Lcom_google_gwt_user_client_ui_RootPanel$DefaultRootPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'RootPanel$DefaultRootPanel'), Lcom_google_gwt_user_client_ui_RootPanel$1_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'RootPanel$1'), Lcom_google_gwt_user_client_ui_SimplePanel$1_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'SimplePanel$1'), Lcom_google_gwt_user_client_ui_TabBar$ClickDelegatePanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'TabBar$ClickDelegatePanel'), Lcom_google_gwt_user_client_ui_Tree_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Tree'), Lcom_google_gwt_user_client_ui_TreeItem_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'TreeItem'), Lcom_google_gwt_user_client_ui_Tree$1_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'Tree$1'), Lcom_google_gwt_user_client_ui_TreeItem$TreeItemAnimation_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'TreeItem$TreeItemAnimation'), Lcom_google_gwt_user_client_ui_VerticalPanel_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'VerticalPanel'), Lcom_google_gwt_user_client_ui_WidgetCollection_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'WidgetCollection'), Lcom_google_gwt_user_client_ui_WidgetCollection$WidgetIterator_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'WidgetCollection$WidgetIterator'), Lcom_google_gwt_user_client_ui_WidgetIterators$1_2_classLit = createForClass('com.google.gwt.user.client.ui.', 'WidgetIterators$1'), Lcom_google_gwt_user_client_CommandCanceledException_2_classLit = createForClass('com.google.gwt.user.client.', 'CommandCanceledException'), Lcom_google_gwt_user_client_CommandExecutor_2_classLit = createForClass('com.google.gwt.user.client.', 'CommandExecutor'), Lcom_google_gwt_user_client_CommandExecutor$CircularIterator_2_classLit = createForClass('com.google.gwt.user.client.', 'CommandExecutor$CircularIterator'), Lcom_google_gwt_user_client_CommandExecutor$1_2_classLit = createForClass('com.google.gwt.user.client.', 'CommandExecutor$1'), Lcom_google_gwt_user_client_CommandExecutor$2_2_classLit = createForClass('com.google.gwt.user.client.', 'CommandExecutor$2'), Lcom_google_gwt_user_client_Timer$1_2_classLit = createForClass('com.google.gwt.user.client.', 'Timer$1'), Lcom_google_gwt_user_client_Window$ClosingEvent_2_classLit = createForClass('com.google.gwt.user.client.', 'Window$ClosingEvent'), Lcom_google_gwt_user_client_Window $WindowHandlers_2_classLit = createForClass('com.google.gwt.user.client.', 'Window$WindowHandlers'), Ljava_lang_IndexOutOfBoundsException_2_classLit = createForClass('java.lang.', 'IndexOutOfBoundsException'), Ljava_lang_ArrayStoreException_2_classLit = createForClass('java.lang.', 'ArrayStoreException'), Ljava_lang_Boolean_2_classLit = createForClass('java.lang.', 'Boolean'), Ljava_lang_Number_2_classLit = createForClass('java.lang.', 'Number'), Ljava_lang_Class_2_classLit = createForClass('java.lang.', 'Class'), Ljava_lang_ClassCastException_2_classLit = createForClass('java.lang.', 'ClassCastException'), Ljava_lang_IllegalArgumentException_2_classLit = createForClass('java.lang.', 'IllegalArgumentException'), Ljava_lang_IllegalStateException_2_classLit = createForClass('java.lang.', 'IllegalStateException'), Ljava_lang_Integer_2_classLit = createForClass('java.lang.', 'Integer'), _3Ljava_lang_Integer_2_classLit = createForArray('[Ljava.lang.', 'Integer;'), Ljava_lang_NullPointerException_2_classLit = createForClass('java.lang.', 'NullPointerException'), Ljava_lang_StringBuffer_2_classLit = createForClass('java.lang.', 'StringBuffer'), Ljava_lang_UnsupportedOperationException_2_classLit = createForClass('java.lang.', 'UnsupportedOperationException'), _3Ljava_lang_Object_2_classLit = createForArray('[Ljava.lang.', 'Object;'), Ljava_util_AbstractHashMap_2_classLit = createForClass('java.util.', 'AbstractHashMap'), Ljava_util_AbstractHashMap$EntrySet_2_classLit = createForClass('java.util.', 'AbstractHashMap$EntrySet'), Ljava_util_AbstractHashMap$EntrySetIterator_2_classLit = createForClass('java.util.', 'AbstractHashMap$EntrySetIterator'), Ljava_util_AbstractMapEntry_2_classLit = createForClass('java.util.', 'AbstractMapEntry'), Ljava_util_AbstractHashMap$MapEntryNull_2_classLit = createForClass('java.util.', 'AbstractHashMap$MapEntryNull'), Ljava_util_AbstractHashMap$MapEntryString_2_classLit = createForClass('java.util.', 'AbstractHashMap$MapEntryString'), Ljava_util_AbstractList$IteratorImpl_2_classLit = createForClass('java.util.', 'AbstractList $IteratorImpl'), Ljava_util_AbstractMap$1_2_classLit = createForClass('java.util.', 'AbstractMap$1'), Ljava_util_AbstractMap$1$1_2_classLit = createForClass('java.util.', 'AbstractMap$1$1'), Ljava_util_AbstractMap$2_2_classLit = createForClass('java.util.', 'AbstractMap$2'), Ljava_util_AbstractMap$2$1_2_classLit = createForClass('java.util.', 'AbstractMap$2$1'), Ljava_util_AbstractSequentialList_2_classLit = createForClass('java.util.', 'AbstractSequentialList'), Ljava_util_HashMap_2_classLit = createForClass('java.util.', 'HashMap'), Ljava_util_HashSet_2_classLit = createForClass('java.util.', 'HashSet'), Ljava_util_LinkedList_2_classLit = createForClass('java.util.', 'LinkedList'), Ljava_util_LinkedList$ListIteratorImpl_2_clas 76 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 77. RPC log <module>.rpc.log ==================================== Types potentially sent from browser: ==================================== Reachable types computed on: Thu Jul 23 14:38:43 PDT 2009 com.google.gwt.user.client.rpc.IncompatibleRemot eServiceException Path '…' is reachable as a subtype of type '…' Started from '…' 77 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 78. Hacks you should know class Safe { private static int secret() { return 42; } } class Thief { public native int breakIn() /*-{ return @Safe::secret()(); }-*/; } 78 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 79. Be prepared Removing everything @deprecated for GWT 2.0 79 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009
  • 80. 80 JBoss World 2009 | Fred Sauer Wednesday, September 2, 2009