bNd
bNd

Reputation: 7630

What is best apprach to attempt multiple times same RPC call

What is best way to attempt multiple time same RPC call while failing RPC call?

just example: Here one case like if RPC get failed due to network connection, it will catch in onFailure(Throwable caught). Now here it should recall same RPC again for check network connection. The maximum attempt should be 3 times only then show message to user like "Network is not established" How can I achieve it?

Some couple of thoughts like call same rpc call in onFailure but here request become different.but I want same request have a three request and it is not good approach and I don't know if any good solution for it.

Thanks In Advance.

Upvotes: 0

Views: 324

Answers (2)

bNd
bNd

Reputation: 7630

@Jens given this answer from Google Groups.

You could transparently handle this for all your requests of a given GWT-RPC interface by using a custom RpcRequestBuilder. This custom RpcRequestBuilder would make 3 request attempts and if all 3 fail, calls the onFailure() method.

MyRemoteServiceAsync service = GWT.create(MyRemoteService.class); ((ServiceDefTarget) service).setRpcRequestBuilder(new RetryThreeTimesRequestBuilder());

The custom RequestBuilder could also fire a "NetworkFailureEvent" on the eventBus if multiple application components may be interested in that information. For example you could overlay the whole app with a dark screen and periodically try sending Ping requests to your server until network comes back online. There is also the onLine HTML 5 property you can check, but its not 100% reliable (https://developer.mozilla.org/en-US/docs/Web/API/window.navigator.onLine)

Upvotes: 0

Use a counter in your AsynCallBack implementation. I recommend as well to use a timer before requesting the server again.

This code should work:

  final GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
  final String textToServer = "foo";
  greetingService.greetServer(textToServer, new AsyncCallback<String>() {
    int tries = 0;
    public void onSuccess(String result) {
      // Do something
    }
    public void onFailure(Throwable caught) {
      if (tries ++ < 3) {
        // Optional Enclose the new call in a timer to wait sometime before requesting the server again
        new Timer() {
          public void run() {
            greetingService.greetServer(textToServer, this);
          }
        }.schedule(4000);
      }
    }
  });

Upvotes: 1

Related Questions