2009-01-03 6 views
1

Est-ce que quelqu'un sait comment surveiller les processus côté serveur de longue durée dans GWT, autres que l'interrogation du serveur? Nous devons effectuer un traitement fastidieux, en plusieurs étapes, lié aux E/S sur le serveur, et il serait bon d'afficher la progression de ce traitement dans le navigateur.Surveillance du processus dans GWT

Répondre

3

Ceci est assez facile à gérer dans GWT. Le processus de longue durée est soit déclenché par un appel GWT RPC, auquel cas vous avez votre point d'entrée, soit il ne l'est pas, auquel cas vous devez le désactiver manuellement. Rappelez-vous que les appels RTC GWT sont asynchrones, ils n'ont donc pas besoin de retourner immédiatement. Vous avez besoin d'un appel RPC comme checkStatus(). Ainsi, vous pouvez faire des choses comme:

public class JobStatus { 
    private boolean done; 
    // other info 
    // ... 
} 

public class JobStatusCallback<JobStatus> extends AsyncCallback { 
    public final void onSuccess(JobStatus result) { 
     if (result.isDone()) { 
      done(); 
     } else { 
      checkAgain(); 
     } 
    } 

    public final void onFailure(Throwable caught) { 
     error(caught); 
     checkAgain(); 
    } 

    public void done() { // override 
    } 

    public void checkAgain() { 
     service.checkStatus(this); 
    } 

    public void error(Thorwable t) { // override 
    } 
}); 

et dans votre service RPC:

void checkStatus(AsyncCallback<JobStatus> callback); 

Votre serveur peut prendre aussi longtemps qu'il aime (à raison) de retour de checkStatus(). Il peut retourner parce que le travail est terminé ou simplement avec une mise à jour du statut du travail. La procédure ci-dessus continuera en boucle jusqu'à ce que l'indicateur d'état du travail soit défini.

+0

Merci pour la réponse. Maintenant que je le vois, il semble si évident :) – Phil

+1

Bien que l'affiche originale dit non interrogation, c'est en fait une solution d'interrogation en ce que vous lancez un appel http (l'appel RPC), attendez pour revenir, et réessayer si elle n'est pas fait. C'est en fait ce que l'interrogation est. L'autre solution est d'essayer la comète. http://code.google.com/p/rocket-gwt/wiki/Comet – Chii

0

Je pense que cela dépend de votre processus, mais si vous allez faire quelque chose comme Streaming de données, vous pouvez utiliser la technologie Server Push (ou Comet). GWT supporte l'implémentation de Comet. google GWT + Comet, ou GWT + COMET + Tomcat, je lis sur comet et gwt dans le livre "Google Web Toolkit Applications" (gwtapps.com).