Question

Est-il possible d'annuler / abort demandes d'usine de demande? En utilisant GWT 2.3

Était-ce utile?

La solution

Une autre option serait de créer un type de com.google.web.bindery.requestfactory.shared.RequestTransport alternatif, au lieu d'utiliser DefaultRequestTransport. Le seul inconvénient à ce (et à l'envers à l'approche de BobV) est que vous ne saurez pas quand la demande sur le serveur que vous le tuez, il aurait peut-être déjà exécuté certaines de vos méthodes - vous n'obtenir des commentaires de l'un d'eux, vous simplement arrêter la demande sortante.

Je soupçonne que c'est pourquoi RF ne possède pas cette fonctionnalité déjà, tout comme RPC. Considérons même le cas de RPC ou bien RequestBuilder - comment ces informer le serveur qu'ils ont changé leur esprit, et de ne pas exécuter la demande? Je crois comprendre qu'ils ne le font pas - la seule façon dont ils sont à l'arrêt précoce est quand ils essaient de lecture / écriture à la réponse, et d'obtenir une erreur de tcp, que la connexion a été fermée. (Il est possible que je me trompe, et qu'un autre thread garde un œil sur l'état de la connexion tcp et appelle thread.stop(Throwable), mais l'arrêt a été dépréciée pour un bon moment .)

Une pensée serait d'envoyer un message au serveur, lui disant de tuer d'autres demandes de la même session - cela nécessiterait une participation active dans votre code serveur si, peut-être fait générique dans un sous-type de ServiceLayerDecorator, probablement au moins invoke, loadDomainObject(s) et getSetter, entre autres. Ceci est assez clairement impliqué demander GWT de le construire pour vous si ...

Autres conseils

Il n'y a aucun moyen d'annuler une demande après la méthode fire() a été appelé. Envisager la construction d'une classe de base Receiver personnalisés tels que:

public abstract class CancelableReceiver<V> extends Receiver<V> {
  private boolean canceled;

  public void cancel() {
    canceled = true;
  }

  @Override
  public final void onSuccess(V response) {
    if (!canceled) {
      doOnSuccess(response);
    }
  }

  protected abstract void doOnSuccess(V response);
}

Le motif peut être répété pour d'autres procédés dans le type de Receiver.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top