Masterpiece!

On Aug 22, 7:03 pm, Jason Essington <[EMAIL PROTECTED]> wrote:
> I hear this often enough that I thought I'd offer up a little story  
> that'll maybe help some new comers to GWT from falling into this  
> fairly common problem.
>
> At issue is that the demos that come with GWT tend to lean heavily on  
> anonymous inner classes, which sometimes lead to misunderstandings  
> about what is really going on in the code. So without further ado, the  
> pitfall:
>
> protected String someString;
>
> public void callService(){
>    SomeServiceAsync service = (SomeServiceAsync)  
> GWT.create(SomeService.class);
>    ((ServiceDefTarget)  
> service).setServiceEntryPoint(GWT.getModuleBaseURL()+"SomeService";
>
>    service.doSomething( new AsyncCallback<String>(){
>        public void onFailure(Throwable caught) {
>          Window.alert("DOH!");
>        }
>        public void onSuccess(String result) {
>          someString = result;
>        }
>    });
>
>    Window.alert(someString);
>
> }
>
> And inevitably we'll hear "My RPC doesn't work" or "It doesn't work  
> the first time, but after that it is fine"
>
> The problem here is that the unwitting user, new to Asynchronous  
> programming has tried to make the asynchronous request synchronous.
>
> How's that? Well let me translate that little bit of java code into a  
> plain english situation that you could encounter any old day.
>
> Imagine if you will ...
>
> You are sitting on the couch watching TV, and knowing that you are out  
> of beer, you ask your spouse to please run down to the liquor store  
> and fetch you some. As soon as you see your spouse walk out the front  
> door, you get up off the couch and trundle into the kitchen and open  
> the fridge. To your surprise, there is no beer!
>
> Well of course there is no beer, your spouse is still on the trip to  
> the liquor store. You've gotta wait until [s]he returns before you can  
> expect to have a beer.
>
> So, lets rewrite our little RPC with that little tidbit in mind.
>
> protected Fridge kitchenFridge;
>
> public void getMeSomeBeer(){
>    SpouseServiceAsync spouse = (SpouseServiceAsync)  
> GWT.create(SpouseService.class);
>    ((ServiceDefTarget)  
> service).setServiceEntryPoint(GWT.getModuleBaseURL()+"SpouseService";
>
>   spouse.goToLiquorStorePlease(Beer.SIX_PACK,  new  
> AsyncCallback<Beer>(){
>        public void onFailure(Throwable caught) {
>          Window.alert("DOH!");
>        }
>        public void onSuccess(Beer your6pack) {
>          kitchenFridge.put(your6pack);
>          goDrinkYourBeer();
>        }
>    });
>
> }
>
> public Burp goDrinkYourBeer(){
>    Beer beer = kitchenFridge.get(Beer.BOTTLE);
>    beer.open();
>    /* its your beer, you figure it out */
>    return new Burp(Burp.LOUD);
>
> }
>
> So there you have it, A subtle but very important difference.
>
> Now, once that little revelation hits home, the very next thing that  
> folks new to GWT ask is, "But I really need it to be Synchronous"
>
> No, you don't!, and in fact you really don't want it to be ...
>
> Same scenario, only synchronous
> ... spouse walks out the door ...
> now, the entire world around you stops, you don't get to breath,  
> answer the door, or finish watching your show while [s]he runs across  
> town to fetch your beer. You just get to sit there not moving a  
> muscle, and turning blue until you lose consciousness ... waking up  
> some indefinite time later surrounded by EMTs and a spouse saying oh,  
> hey, I got your beer.
>
> Synchronous requests in the web browser lock up the entire browser,  
> you can't switch tabs, can't browse other pages, and in some cases  
> can't even close the browser until that request returns. That is the  
> definition of naughty behavior on the part of the programmer. That is  
> the reason that GWT doesn't provide a way to perform synchronous  
> requests.
>
> Hopefully this little plain english scenario will help some  
> programmers new to GWT navigate the sometimes confusing concept that  
> is the Asynchronous request.
>
> -jason
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to