Thanks. That's helpful.

On Thu, Aug 12, 2010 at 12:05 PM, Jeff Chimene <jchim...@gmail.com> wrote:

> On 08/12/2010 08:38 AM, salk31 wrote:
> > Don't you have to count the async returning and then do yet another
> > callback?
> >
> > So hook into the callback of all your commands and then when the last
> > one is done do the callback?
>
> Extending salk31's logic:
> Put your execute() inside a loop, inside an IncrementalCommand. Your
> execute() routine implements a mutex. The loop terminates per salk31's
> observation. The execute() routine sets the mutex before the async call,
> and clears it in OnResponseReceived(), OnError(). The loop checks that
> mutex and immediately returns to the IncrementalCommand if set. In FF
> 3.6, I found it was too easy to overload the server (resulting in
> response timeouts) w/o serializing the calls via a mutex. IOW, simply
> allowing the brower's RPC queue to serialize (i.e. clear the execute()
> queue as fast as possible) resulted in dropped calls.
>
> I believe the above will work w/ Java RPC.
>
> If there are many list elements, you might want a timer that controls a
> "loading..." message.
>
> Also, you might want to evaluate at the Dictionary class to see if
> that's a better fit for the problem you're trying to solve.
>
> >
> > On Aug 12, 3:30 pm, Kevin Qiu <kevin.jing....@gmail.com> wrote:
> >> I don't know if the title makes sense but working with gwt for about 2
> >> years, I often find myself in the position to mix both asynchronous and
> >> synchronous (blocking) apis. It's easy to transform a synchronous call
> to
> >> asynchronous, but the other way around is not immediately obvious to me,
> >> especially in the context of the single-threaded browser environment.
> >>
> >> Imagine I the following:
> >>
> >> abstract class GetList<T> {
> >>   abstract void execute(AsyncCallback<List<T>> callback);
> >>
> >> }
> >>
> >> class GetContactList extends GetList<Contact> {
> >>   void execute(AsyncCallback<List<Contact>> callback) { /*
> implementation */
> >>
> >> }
> >> }
> >>
> >> class GetAddressList extends GetList<Address> {
> >>   void execute(AsyncCallback<List<Address>> callback) { /*
> implementation */
> >>
> >> }
> >> }
> >>
> >> class GetPhoneList extends GetList<Phone> {
> >>   void execute(AsyncCallback<List<Phone>> callback) { /* implementation
> */ }
> >>
> >> }
> >>
> >> now imagine I keep a list of GetList objects:
> >> List<GetList> commands = Arrays.asList(new GetContactList(), new
> >> GetAddressList(), new GetPhoneList());
> >>
> >> and I have an executor that executes these commands:
> >>
> >> class Executor {
> >>   List<? extends GetList<?>> commands;
> >>   Executor(List<? extends GetList<?>> commands) {
> >>     this.commands = commands;
> >>   }
> >>   void execute() {
> >>   // XXX:
> >>   }
> >>
> >> }
> >>
> >> Now, for whatever reason, I need my execute() method to be a blocking
> call
> >> (synchronous). It should terminate after all GetList calls are returned.
> How
> >> can I achieve this?
> >
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google Web Toolkit" group.
> To post to this group, send email to google-web-tool...@googlegroups.com.
> To unsubscribe from this group, send email to
> google-web-toolkit+unsubscr...@googlegroups.com<google-web-toolkit%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-web-toolkit?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to google-web-tool...@googlegroups.com.
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to